利⽤定时器1实现流⽔灯
单⽚机实验1
圆珠笔尖
题⽬: 利⽤定时器1实现流⽔灯,先从左⾄右,再从右⾄左,1s从左到右,1s从右到左(不采⽤延时函数的⽅式实现) 思路硅胶模具制作方法
⾸先要求使⽤定时器1,且定时1s,那么先将基础的初始化函数完成,计算初值为1ms.在服务函数中定义⼀个计数变量count并且让count⾃增,当count=1000时即达到要求的1s.接着题⽬要求led灯
先从左⾄右,再从右⾄左移动,这⼀功能通过使⽤左移函数与右移函数来完成,具体看⽰例程序 #include <reg51.h>
#include <intrins.h>
水垢过滤器#define led P2
typedef unsigned char u8;
书法教学系统
typedef unsigned int u16;
u16 i,j; //定义两个控制左移和右移的控制变量 void Time1Init(); //声明定时器1的初始化函数
void main()
{
i = 0; //i⽤来控制左移赋初值0
j = 8; //j⽤来控制右移赋初值8
u形管
led = 0xfe; //先点亮最左边的led灯
Time1Init();
while(1);
}
/
*定时器1的初始化,设置初值为1ms*/
void Time1Init()
{
TMOD |= 0x01;
TH1 = 0xfc;
TL1 = 0x18;
EA = 1;
ET1 = 1;
TR1 = 1;
}
HD-PRIDE/*配置定时器1的服务函数*/
void Time1Start() interrupt 3
{
u16 count = 0; //定义计数变量
TH1 = 0xfc;
TL1 = 0x18;
count++;
if(count == 1000) //达到1s
{
count = 0;
/*
判断灯是否从左边开始,如果是led灯开始右移
加上逻辑与的原因是防⽌漏掉灯在中间的情况
*/
if(j==8 && i<8)
{
led = _crol_(led,1);
led = _crol_(led,1);
/*
每移动⼀次就让控制左移的函数加1,直到第⼋个led灯如果到达第⼋个led灯,说明已经到达最右边,重新赋值 */
i=i+1;
if(i==8)
{
j = 0;
}
}
/*原理同上*/
if(i==8 && j<8)
{
led = _cror_(led,1);
j = j+1;
if(j==8)
{
i = 0;
}
}
}
}