我是个菜鸟,现在用LPC931做数码轮流显示,发现每个数码管都会暗显示8,不管是有数字显示还是没显示时都有,白天看不明显,晚上看上去就很明显了,不知道为什么,请前辈们指教,谢谢。
#include<reg931.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char data disp_buffer[6]; // 显于缓冲区基地址
unsigned char data *buffer;
uchar count=0;
unsigned char disbit[]={
0x04,0x02,0x01,0x80,0x40,0x08,0x00
};
unsigned char code discode[]={
0x28,// 0x03, /*0*/
0xEB,// 0x9f, /*1*/
0x32,// 0x25, /*2*/
0x62,// 0x0d, /*3*/
0xE1,// 0x99, /*4*/
0x64,// 0x49, /*5*/
0x24,// 0x41, /*6*/
0xEA,// 0x1f, /*7*/
0x20,// 0x01, /*8*/
0x60,// 0x09, /*9*/
0xff// /*null*/
};
uint a=9876,b=10245,c=32768;
void hextobcd(uint hexs,uchar j)
{
uint va;
uchar i;
va = 10000;
for(i=j-1;i;i--)
{
disp_buffer[i] = 0;
while ((hexs>=va)&&(va>9))
{
hexs -= va;
disp_buffer[i]++;
}
va /= 10;
}
disp_buffer[0]=hexs;
}
void delays(uchar j)
{
uchar i,k;
while(j--)
for(i=0;i<120;i++)
{
for(k=0;k<120;k++);
}
}
void time0() interrupt 1 using 1
{ TR0=0;
P0=disbit[6]; //关闭位选
P0=disbit[5-count];
P2=discode[buffer[count]];
if(count==6)
count=0; //定时器0在每次被触发时,改变LCD显示。
else count++; //从第一位到第六位循环显示
TH0=0xf3;
TL0=0xff;
TR0=1;
}
void led(uchar flag )
{
switch(flag)
{
case 1:
hextobcd(a,5);
buffer=disp_buffer;
break;
case 2:
hextobcd(b,5);
buffer=disp_buffer;
break;
case 3:
hextobcd(c,5);
buffer=disp_buffer;
break;
}
delays(200); //显示约2S
disp_buffer[0]=disp_buffer[1]=disp_buffer[2]=disp_buffer[3]=disp_buffer[4]=disp_buffer[5]=10; //关闭所有显示
delays(100); //停约1S
}
main()
{
TMOD=0x01;
TH0=0xf3; //7.373MHz晶振,5ms定时
TL0=0xff;
TR0=1;
ET0=1;
ET1=1;
EA=1;
while(1)
{
led(1);
led(2);
led(3);
}
} |