为什么用总线方式不能驱动数码管?请内行人指导下,程序如下:
#include <intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define Lcd_com0 XBYTE[0xfff8]
#define Lcd_com1 XBYTE[0xfff9]
#define Lcd_com2 XBYTE[0xfffA]
#define Lcd_com3 XBYTE[0xfffB]
#define Lcd_com4 XBYTE[0xfffC]
#define Lcd_com5 XBYTE[0xfffD]
#define Lcd_com6 XBYTE[0xfffE]
#define Lcd_com7 XBYTE[0xfffF]
bit flag_2ms;
sbit led=P1^0;
uchar code DSY_CODE[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };
void T0int(void)
{
TMOD=0X01;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
EA=ET0=TR0=1;
}
void T0sev(void) interrupt 1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
flag_2ms=1;
}
void display(void)
{
static uchar k;
switch(k)
{
case 0:Lcd_com0=0xff;Lcd_com0=DSY_CODE[k];break;
case 1:Lcd_com1=0xff;Lcd_com1=DSY_CODE[k];break;
case 2:Lcd_com2=0xff;Lcd_com2=DSY_CODE[k];break;
case 3:Lcd_com3=0xff;Lcd_com3=DSY_CODE[k];break;
case 4:Lcd_com4=0xff;Lcd_com4=DSY_CODE[k];break;
case 5:Lcd_com5=0xff;Lcd_com5=DSY_CODE[k];break;
case 6:Lcd_com6=0xff;Lcd_com6=DSY_CODE[k];break;
case 7:Lcd_com7=0xff;Lcd_com7=DSY_CODE[k];break;
}
k=++k%8;
}
void main(void)
{ uint cnt;
T0int();
while(1)
{
if(flag_2ms)
{
flag_2ms=0;
display();
if(++cnt>200){led=!led;cnt=0;}
}
}
}
|