定时器50ms单片机流水灯代码
时间: 2023-12-20 12:30:08 浏览: 173
以下是使用C51单片机实现定时器50ms流水灯的代码:
```c
#include <reg52.h>
#define time (65536-50000) // 单次定时50ms
unsigned char cn;unsigned char temp;
unsigned char dir;
void timer0() interrupt 1 // 定时器0中断服务程序
{
TH0 = time / 256; // 重新赋初值
TL0 = time % 256;
cn++;
if (cn >= 20) // 20次定时,即1s
{
cn = 0;
if (dir == 0) // 向左移动
{
temp <<= 1;
if (temp == 0) // 最高位为1时,向右移动
{
dir = 1;
temp = 0x7f;
}
}
else // 向右移动
{
temp >>= 1;
if (temp == 0) // 最低位为1时,向左移动
{
dir = 0;
temp = 0xfe;
}
}
}
}
void main()
{
TMOD = 0x01; // 定时器0,模式1
TH0 = time / 256; // 初值
TL0 = time % 256; EA = 1; // 总中断开关
ET0 = 1; // 定时器0中断开关
TR0 = 1; // 定时器0开关
temp = 0xfe; // 初始值
dir = 0; // 初始方向
while (1)
{
P1 = temp; // 输出
}
}
```
阅读全文