定时器做双向流水灯问题
答案:2 悬赏:30
解决时间 2021-03-06 09:34
- 提问者网友:优雅ぉ小姐
- 2021-03-05 14:18
#include
#include
#define uint unsigned int
#define uchar unsigned char
uint x,num,i;
uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar a;
void main()
{ i=0;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{ P0=table[i];
if(num==4)
{ num=0;
i++;
if(i==8)
{i=0;}
}
}
}
void ex0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
}
我只能做单向的 谁能帮我改改做个双向的给10分
最佳答案
- 二级知识专家网友:一场云烟
- 2021-03-05 14:55
uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
你为什么不在这个数组里头再多写一点数据呢?
既然你知道采取查表法来完成单向流水灯,那么你就一定知道查表法的原理,所以你只需在这数组里头继续写0xbf,0xdf,0xef,……,0xfe,这样数组里头的数据就可以完成流过去再流回来了。
最后把if(i==8)改成if(i==15)就OK了
全部回答
- 1楼网友:孤伤未赏
- 2021-03-05 15:28
抛开单片的东西,你得这段代码
if((kk<161)&&(kk%20==0))
{
p1=light[num1]; //这种方法不行,虽然灯大致上
num1++; //在流水,但其他等也会跳着亮。怎么回事呢?
if(num1==8)num1=0;
if(kk>160)kk=0;
}
if((kk<161)&&(kk%20==0))这句有问题,判断条件逻辑错了,20以内恒为真,
我要举报
大家都在看
推荐资讯