#include?<REGX51.H>
#define?uchar?unsigned?char
#define?uint?unsigned?int
uchar?Bits=0,Ten=0,Hundred=0,Thousand=0;
uchar?code?ledshow[16]={?0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
0x77,/*A*/
0x7C,/*b*/
0x39,/*C*/
0x5E,/*d*/
0x79,/*E*/
0x71,/*F*/} ;?//***陰數碼管代碼
uchar?code?jz_code[17]={0xff,
0xee,0xed,0xeb,0xe7,
0xde,0xdd,0xdb,0xd7,
0xbe,0xbd,0xbb,0xb7,
0x7e,0x7d,0x7b,0x77};?//鍵盤代碼
void?delay(unsigned?char?a) ?//延時
{
unsigned?char?i;
while(a--)
for(i=100;i>0;i--);
}
uchar?kbscan(void)?//鍵盤掃描
{
unsigned?char?hang,lie,key;P1=0xf0;
delay(5);
lie=P1;
P1=0x0f;
delay(5);
hang=P1;
for(key=16;key>0;key--)
{
?if(jz_code[key]==(hang|lie))?break;
}
return?(key);
}
void?data_l(void) ?//左移
{
uchar?i; static?keytemp=0; i= kbscan(); if(i!=0) { if(!(keytemp==i)) { keytemp=i; Thousand=Hundred;?//千位 Hundred=Ten;//百位 Ten=Bits; //十位 Bits=i-1; //個位 } } else?keytemp=0;}
void?display(void)//數碼管顯示,調試方法:數碼管間隔跳動函數中?delay(5);四個,調小
{
data_l(); P0=ledshow[Thousand]; P2_0=0; delay(5); P2_0=1; P0=ledshow[Hundred]; P2_1=0; delay(5); P2_1=1; P0=ledshow[Ten]; P2_2=0; delay(5); P2_2=1; P0=ledshow[Bits]; P2_3=0; delay(5); P2_3=1;}
?
void?main(void)
{?
P2=0xff;
while(1)
{
display();
}
}