标题:
从左到右在从右到左的流水灯
[打印本页]
作者:
八月初
时间:
2019-11-8 15:25
标题:
从左到右在从右到左的流水灯
#include <reg52.h>
#include <led.h>
u8 T0RH = 0; //T0 重载值的高字节
u8 T0RL = 0; //T0 重载值的低字节
u8 flag = 0;//
void led_show()
{
u8 l_cnt = 0;
u8 r_cnt = 0;
bit led_flag = 0;//控制左右移位标志位
while(1)
{
if(flag == 100)//改变flag的大小,可控制等的移动速度
{
if(led_flag == 0)
{
flag = 0;
P0 = ~(0x01 << l_cnt);
l_cnt++;
if(l_cnt >= 8)
{
l_cnt = 0;
led_flag = 1;
}
}
else if(led_flag == 1)
{
flag = 0;
P0 = ~(0x80 >> r_cnt);
r_cnt++;
if(r_cnt >= 8)
{
r_cnt = 0;
led_flag = 0;
}
}
}
}
}
void main()
{
ConfigTimer0(1);//定时1ms
while(1)
{
led_show();
}
}
/* 配置并启动 T0, ms-T0 定时时间 */
void ConfigTimer0(u16 ms)
{
u32 tmp; //临时变量
EA = 1;
tmp = 11059200 / 12; //定时器计数频率
tmp = (tmp * ms) / 1000; //计算所需的计数值
tmp = 65536 - tmp; //计算定时器重载值
tmp = tmp + 12; //补偿中断响应延时造成的误差
T0RH = (unsigned char)(tmp>>8); //定时器重载值拆分为高低字节
T0RL = (unsigned char)tmp;
TMOD &= 0xF0; //清零 T0 的控制位
TMOD |= 0x01; //配置 T0 为模式 1
TH0 = T0RH; //加载 T0 重载值
TL0 = T0RL;
ET0 = 1; //使能 T0 中断
TR0 = 1; //启动 T0
}
/* T0 中断服务函数,执行 100ms 定时 */
void InterruptTimer0() interrupt 1
{
TH0 = T0RH; //重新加载重载值
TL0 = T0RL;
flag++;
}
复制代码
使用定时器来实现左右循环移动的流水灯,请各位帮忙指点
LED流水灯.rar
2019-11-8 15:24 上传
点击文件名下载附件
下载积分: 黑币 -5
55.06 KB, 下载次数: 5, 下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1