数码管显示十进制数,乱了,不知道怎么回事
百思不得其姐。
其实可以P0接的位码不用分开,你分开了,代码量大了,还容易忽视;现在发现你的问题了,你的是前一次扫描第一个数码管,选中了数码管之后,下一次扫描第二个数码管,你没把上一次的数码管位码关掉,这样第二次扫描就是选中了两个数码管;你可以用P0 = 0xfe;这是选中第一位数码管,i = 1的时候,位码P0 =0xfd;这样就是即选中了第二个数码管,又关闭了第一个数码管,你扫描数码管的时间加起来不要超过20ms就可以正常显示,希望我的回答对你有所帮助。
求解。
wei0-wei5置1后,没有清零,没有单独保存位选数据。
而且与段码共用P0口,在输出完段码数据后,P0口仍位段码数据,并非位选数据。
数据结构和功用没搞清楚
是出现乱码了,还是什么,你把现象放上来啊
我以为是这样的,在我位选后,74HC573=1;读取位,=0锁住数据了,然后扫段码,是不在我在段码后清零就可以了呢?共用P0口是可以的吧
乱码了,有显示,做是乱的
你的意思是我的位码和段码冲突了是吗?有个问题,我写了位码后,用74HC573使能端低电位锁住了,然后刷新段码了,不是要被覆盖掉的吗
switch(i)
{
case 0:wei0 = 1;wei = 1;wei = 0;i++;P0 = buff[0];duan = 1;duan = 0;P0 = 0x00;break;
case 1:wei1 = 1;wei = 1;wei = 0;P0 = buff[1];duan = 1;duan = 0;i++;P0 = 0x00;break;
case 2:wei2 = 1;wei = 1;wei = 0;P0 = buff[2];duan = 1;duan = 0;i++;P0 = 0x00;break;
case 3:wei3 = 1;wei = 1;wei = 0;P0 = buff[3];duan = 1;duan = 0;i++;P0 = 0x00;break;
case 4:wei4 = 1;wei = 1;wei = 0;P0 = buff[4];duan = 1;duan = 0;i++;P0 = 0x00;break;
case 5:wei5 = 1;wei = 1;wei = 0;P0 = buff[5];duan = 1;duan = 0;i=0;P0 = 0x00;break;
default:break;
这样改也不行
switch(i)
{
case 0:P0 = 0x01;wei = 1;wei = 0;i++;P0 = buff[0];duan = 1;duan = 0;break;
case 1:P0 = 0x02;wei = 1;wei = 0;;i++;P0 = buff[1];duan = 1;duan = 0;break;
case 2:P0 = 0x04;wei = 1;wei = 0;i++;P0 = buff[2];duan = 1;duan = 0;break;
case 3:P0 = 0x08;wei = 1;wei = 0;i++;P0 = buff[3];duan = 1;duan = 0;break;
case 4:P0 = 0x10;wei = 1;wei = 0;i++;P0 = buff[4];duan = 1;duan = 0;break;
case 5:P0 = 0x20;wei = 1;wei = 0;i=0;P0 = buff[5];duan = 1;duan = 0;break;
default:break;
也不行。
switch(i)
{
case 0:P0 = 0xfe;wei = 1;wei = 0;i++;P0 = buff[0];duan = 1;duan = 0;break;
case 1:P0 = 0xfd;wei = 1;wei = 0;;i++;P0 = buff[1];duan = 1;duan = 0;break;
case 2:P0 = 0xfb;wei = 1;wei = 0;i++;P0 = buff[2];duan = 1;duan = 0;break;
case 3:P0 = 0xf3;wei = 1;wei = 0;i++;P0 = buff[3];duan = 1;duan = 0;break;
case 4:P0 = 0xef;wei = 1;wei = 0;i++;P0 = buff[4];duan = 1;duan = 0;break;
case 5:P0 = 0xdf;wei = 1;wei = 0;i=0;P0 = buff[5];duan = 1;duan = 0;break;
default:break;
总算对了
还 是有问题了,第四个数码管显示8。
case 0:P0 = 0xfe;wei = 1;wei = 0;i++;P0 = buff[5];duan = 1;duan = 0;break;
case 1:P0 = 0xfd;wei = 1;wei = 0;;i++;P0 = buff[4];duan = 1;duan = 0;break;
case 2:P0 = 0xfb;wei = 1;wei = 0;i++;P0 = buff[3];duan = 1;duan = 0;break;
case 3:P0 = 0xf3;wei = 1;wei = 0;i++;P0 = buff[2];duan = 1;duan = 0;break;
case 4:P0 = 0xef;wei = 1;wei = 0;i++;P0 = buff[1];duan = 1;duan = 0;break;
case 5:P0 = 0xdf;wei = 1;wei = 0;i=0;P0 = buff[0];duan = 1;duan = 0;break;
default:break;
应该是
case 3:P0 = 0xf7;
case 3:P0 = 0xf7;0xf3是同时选择2位数码管
嗯嗯,算错了,晚上回去改过看看还有没有这个问题