各位帮帮忙....问个关于数码管显示的...
要实现让数码管逐位点亮...比如加电时显示六个8...
当检测过一个简易按键按下时,则只点亮一位,并显示为0.当第二次按下时,多点亮一位.显示为01....依次类推下去,,这种要怎么实现呀?
uchar ledbuf[7]={0xfc,0xfa,0xf6,0xee,0xde,0xbe,0xff};
uchar led[11]={0x28,0x7E,0xA2,0x62,0x74,0x61,0x21,0x7A,0x20,0x60,0xff};
这个是显示函数
void display(uchar w1,w2,w3,w4,w5,w6,d1,d2,d3,d4,d5,d6)
w1..w5为字位,d1..d5为字型
{
P2=ledbuf[w1];
P0=led[d1];
delay();
P2=ledbuf[w2];
P0=led[d2];
delay();
P2=ledbuf[w3];
P0=led[d3];
delay();
P2=ledbuf[w4];
P0=led[d4];
delay();
P2=ledbuf[w5];
P0=led[d5];
delay();
P2=ledbuf[w6];
P0=led[d6];
delay();
}
那么要让它只点亮一位时这样调用就可以了
while(count==1)//count表示第几次按下按键
{
display(0,6,6,6,6,6,d,d,d,d,d,d);//d1=1;
d1=d;
getkey();//调用键盘扫描
}
while(count==2)
{
display(0,1,6,6,6,6,d1,d,d,d,d,d);//d1=1,d=2(按下2)
d1=d;
getkey();//调用键盘扫描
}
可是我的程序不能正常显示,当第一次按下(1)时,count=1,d=1...它会点亮所有的灯,并保持这个状态..显示为111111 我要的是只显示一位 1
补充一点,在没的第二次按下键盘时,也就是count一直为1,这个循环它会一直执行,也就是说这个条件是一直成立的..就是不懂怎么回事,不能正常显示(只显示一位1)...各位帮帮忙..愁死人了.搞了快一个星期了还没搞好~~
[解决办法]
关于LED的动态显示...
LZ可以找一下以前的贴子,好像我在那有相对清楚的解释.
[解决办法]
我没说你不会动太显示
我觉得你的这个显示封装得不好,几乎没法通用,呵呵
而我也没看出不能正常显示的原因...
所以......
[解决办法]
搂主,你的那个d是指按下的次数吗,第一次按下是不是应该调用led数组的索引为0的元素,而不是1呢,数组是从0开始索引的阿
[解决办法]
显示程序做的不好啊
这类程序在书上能找到现成的
给你推荐一本书 《51单片机C语言应用程序设计实例精讲》 电子工业出版社 戴佳 戴卫恒 编著