位的選擇最好在中斷里實現較好
#define A0 P22
#define A1 P23
#define A2 P24
#define DISP P0
//共陰數碼管顯示段碼
u8 code dispcode[] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};
u8 dispbuf[8]={0,1,2,3,4,5,6,7};
void time0() interrupt 1 using 1
{
static u8 wei; //wei用于位掃描
DISP=0; //消影
DISP=SHUZI[dispbuf[wei]]; //顯示緩沖區數據依次顯示
switch(wei)
{
case 0:A2=1;A1=1;A0=1;break;
case 1:A2=1;A1=1;A0=0;break;
case 2:A2=1;A1=0;A0=1;break;
case 3:A2=1;A1=0;A0=0;break;
case 4:A2=0;A1=1;A0=1;break;
case 5:A2=0;A1=1;A0=0;break;
case 6:A2=0;A1=0;A0=1;break;
case 7:A2=0;A1=0;A0=0;break;
}
wei++;
wei%=8; //m在0-7之間變化
}
TH0 TL0改為
TH0=0xF8;
TL0=0XCD; //11.0592MHZ 或0x30 對應12MHz
主程序只需要:
while(1)
{
;
} |