用定时器控制16路流水灯循环单片机,且定时时间可调,谢谢!
答案:2 悬赏:70 手机版
解决时间 2021-02-10 16:32
- 提问者网友:謫仙
- 2021-02-10 07:49
用定时器控制16路流水灯循环单片机,且定时时间可调,谢谢!
最佳答案
- 五星知识达人网友:想偏头吻你
- 2021-02-10 08:10
用一个定时器足以,不需要两个定时器。思路如下在主程序中显示数码管,在定时器中断函数中显示LED。里面的软件延时完全可以不要,浪费CPU的资源。让CPU在哪里等待还不如让它去干别的事。voidmain(void){uchartemp=0x1;//LED显示的初始值//一些初始化的东西while(1){Display();//数码管显示函数}}voidTimer0(void)interrupt1{uchari;//循环变量//重装定时器初值,50ms中断一次p++;if(p>=20)//一秒钟改变一次状态{for(i=0;i<8;i++){P1=temp;temp<<=1;//左移一位,流水灯}p=0;}}呵呵,这就是简单的后台任务处理思想
全部回答
- 1楼网友:刀戟声无边
- 2021-02-10 08:39
中断子函数有问题
这样改
void timer0() interrupt 1
{
th0=(65536-100)/256; //原定时太短了吧
tl0=(65536-100)%256; //原定时太短了吧
t0++;
if(t0<=dc)
{
p1=0;
}
else
{
p1=0xff;
}
if(t0==200)
{
t0=0;
if(flag==0)
{
dc++;
if(dc==200)flag=1; //这是赋值语言,一个等号
}
else if(flag==1) //这应该是else if
{
dc--;
if(dc==0) flag=0;//这是赋值语言,一个等号
}
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯