以下作为一个参考调试程序:<br /><br />#include <reg52.h><br />#include <stdio.h><br />#include <intrins.h><br />#include <math.h><br /><br />#define uchar unsigned char<br /><br />bit pro;<br /><br />uchar disp_d[6]; //用于保存所需显示的6位数据及符号位<br /><br />uchar disp_s[6] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //位码选择<br /><br />uchar disp[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92, //数字0-9段码选择<br /> 0x82,0xf8,0x80,0x90}; <br /><br />void display();<br /><br />void delayms(uchar n); //ms延时<br /><br /><br /><br />main()<br />{<br /> uchar i, j;<br /> uchar count[6];<br /> EA = 1; ET0 = 1; //开定时中断0<br /> TMOD = 0x01;<br /> TH0 = 0xc8; TL0 = 0x32; //20ms定时中断<br /> TR0 = 1; //启动定时中断0<br /> while(1)<br /> {<br /> ++count[0]; <br /> for(i = 0; i < 5; i++)<br /> {<br /> j = i + 1;<br /> if(count > 0x09)<br /> {<br /> ++count[j];<br /> count = 0;<br /> }<br /> }<br /> if(count[5] > 0x09)<br /> {<br /> for(i = 0; i < 6; i++)<br /> count = 0;<br /> }<br /> pro = 1;<br /> for(i = 0; i < 6; i++)<br /> {<br /> disp_d = count;<br /> }<br /> pro = 0;<br /> }<br />}<br /><br /><br />void timeint0() interrupt 1 //累计20ms重新显示一次数据<br />{<br /> if(!pro)<br /> {<br /> display();<br /> }<br /> TH0 = 0xc8; TL0 = 0x32;<br />}<br /><br /><br />void display()<br />{<br /> uchar i, j, dis;<br /> for(j = 0; j < 9; j++)<br /> {<br /> for(i = 0; i < 6; i++)<br /> {<br /> dis = disp_d;<br /> P2 = disp_s;<br /> P0 = disp[dis];<br /> delayms(1);<br /> P0 = 0xff;<br /> }<br /> P2 = disp_s[2];<br /> P0 = 0x7f; //显示小数点<br /> delayms(1);<br /> P0 = 0xff;<br /> }<br />}<br /><br /><br />void delayms(uchar n) //1ms延时<br />{<br /> int t, h;<br /> for(h = 0; h < n; h++)<br /> {<br /> for(t = 0; t < 125; t++)<br /> {<br /> ;<br /> }<br /> }<br />}<br /><br /><br />在子程序display()里,将j < 9改为j < 8则闪得很厉害,数据变换得很快;当用j < 9时,显示比较稳定,但反应很慢,要隔很久才能将新的数据转换到disp_d[]数组中,这到底是什么原因啊?麻烦各位分析以下
|