谢谢各位的回复。 一进入显示函数,就消隐,问题解决。 |
看看是不是断码出问题了 |
wangwing 发表于 2021-7-14 13:10 可能是你的delayms()的運行時間太短了 用以下代碼和Protues的邏輯分析儀看看delayms(10)是多久吧 ![]() ![]() |
lkc8210 发表于 2021-7-13 16:40 AT89C52,改的 |
代码写得不好,给各位添堵了 本函数用自动重装的计数器,每10毫秒调用一次。用(k2482%4)作控制,每次进入后只显示一位。 1楼的截图,是没有消隐(delayms(2);dispbit=0x00;)的结果,如果加上这2个消隐语句,直接没有显示了。 消隐时间,从1毫秒到9毫秒,效果是一样的,没有显示。 |
因为代码不全,加加减减就成了![]() 另外请问楼主的Protues内的STC8单片机是如何汇入的? |
delayms(2) 动态显示的时间太短了,试试延时20毫秒左右,你想想你电脑屏幕刷新时间都要15ms,你快过它怎么会显示好呢? |
wangwing 发表于 2021-7-13 11:34 k2482是啥 |
看到这样的代码就脑壳疼。。。![]() 你的逻辑有点不对吧? |
代码如下,请指教: #define uchar unsigned char #define uint unsigned int #define dispout P1 #define dispbit P2 //*********************0****1****2****3****4****5****6****7****8****9***10***11***12***13***14***15***16***17***18***19***20***21**** //*********************0****1****2****3****4****5****6****7****8****9****a****b****c****d****e****f****h****j****l****p****u****y**** uchar code seg7[22]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xb9,0xde,0x8c,0x8e,0x89,0x8e,0xb8,0x8c,0xc1,0x91};//new board //******************************************************** void display2482(uchar dat1,uchar dat2,uchar dat3)//显示格式:dat1 前2位,dat2 后2位,dat3 首位显示的字母,第1位+X { uchar a1,a2,a3,a4; //dat2=ledbaktime; a1=dat1/10+dat3;a2=dat1%10;a3=dat2/10;a4=dat2%10; a1=1;a2=2;a3=3;a4=4; if(ledbaktime>0){dispON=1;} else {dispON=0;mode_num=0;modemenu=0;modedelay=0;} if((k2482%4==0)) {dispout=seg7[a1];if((a1==0)|(dispON==0))dispbit=0x00;else dispbit=0x01;delayms(2);dispbit=0x00;} //else if((k2482%4==1)){if (colon)dispout=seg7[a2]-0x80;else dispout=seg7[a2];if(dispON==0)dispbit=0x00;else dispbit=0x02;} else if((k2482%4==1)){if (colon)dispout=seg7[a2]-0x80;else dispout=seg7[a2];if(dispON==0)dispbit=0x00;else dispbit=0x02;delayms(2);dispbit=0x00;} else if((k2482%4==2)){dispout=seg7[2];if(dispON==0)dispbit=0x00;else dispbit=0x04;delayms(2);dispbit=0x00;} else if((k2482%4==3)){dispout=seg7[a4];if(dispON==0)dispbit=0x00;else dispbit=0x08;delayms(2);dispbit=0x00;} k2482++; } |
右边都能显示4,肯定是代码出问题了 |
你的代码有问题!右边显示“4”是打死不变的(硬件驱动),与代码无关! 所以你要重点去查左边的显示,为什么会这样?100%是代码出错了! |
我绝对你最好把程序发出来看一下 |
是软件问题。由于动态扫描驱动数码管程序没有做消隐处理,在实物中会有残影,在仿真中就出现乱码。 |
有时候是程序、仿真图问题,但有时候却是软件上的瑕疵在作怪 |