- #include<reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit P17=P1^7;
- sbit P16=P1^6;
- sbit P15=P1^5;
- sbit P14=P1^4;
- uint count=0,num=0,k;
- uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- //*****************延時子程序***************************
- void delay(uint i)
- {
- uint j;
- for(;i>0;i--)
- for(j=0;j<125;j++);
- }
- //**************矩陣鍵盤掃描子程序***********************
- uint keyscan()
- {
- uchar temp,keynum;
- P1=0xff;
- P17=0;//**************掃描第一行**********************
- temp=P1;
- temp&=0x0f;
- if(temp!=0x0f)
- {
- delay(10);
- temp=P1;
- temp&=0x0f;
- if(temp!=0x0f)
- {
- temp=P1;
- temp&=0x0f;
- switch(temp)
- {
- case 0x0e:keynum=0;break;
- case 0x0d:keynum=1;break;
- case 0x0b:keynum=2;break;
- case 0x07:keynum=3;break;
- }
- while(temp!=0x0f)
- {
- temp=P1;
- temp&=0x0f;
- }
- }
- }
- P1=0xff;
- P16=0;//**************掃描第二行**********************
- temp=P1;
- temp&=0x0f;
- if(temp!=0x0f)
- {
- delay(10);
- temp=P1;
- temp&=0x0f;
- if(temp!=0x0f)
- {
- temp=P1;
- temp&=0x0f;
- switch(temp)
- {
- case 0x0e:keynum=4;break;
- case 0x0d:keynum=5;break;
- case 0x0b:keynum=6;break;
- case 0x07:keynum=7;break;
- }
- while(temp!=0x0f)
- {
- temp=P1;
- temp&=0x0f;
- }
- }
- }
- P1=0xff;
- P15=0;//**************掃描第三行**********************
- temp=P1;
- temp&=0x0f;
- if(temp!=0x0f)
- {
- delay(10);
- temp=P1;
- temp&=0x0f;
- if(temp!=0x0f)
- {
- temp=P1;
- temp&=0x0f;
- switch(temp)
- {
- case 0x0e:keynum=8;break;
- case 0x0d:keynum=9;break;
- case 0x0b:keynum=10;break;
- case 0x07:keynum=11;break;
- }
- while(temp!=0x0f)
- {
- temp=P1;
- temp&=0x0f;
- }
- }
- }
- P1=0xff;
- P14=0;//**************掃描第四行**********************
- temp=P1;
- temp&=0x0f;
- if(temp!=0x0f)
- {
- delay(10);
- temp=P1;
- temp&=0x0f;
- if(temp!=0x0f)
- {
- temp=P1;
- temp&=0x0f;
- switch(temp)
- {
- case 0x0e:keynum=12;break;
- case 0x0d:keynum=13;break;
- case 0x0b:keynum=14;break;
- case 0x07:keynum=15;break;
- }
- while(temp!=0x0f)
- {
- temp=P1;
- temp&=0x0f;
- }
- }
- }
- return keynum;
- }
- //********************顯示子程序*************************
- void Display(uint num)
- {
- uint ge,shi,bai,qian;
- qian=num/1000;
- P0=table[qian];
- P2=0xfe;
- delay(10);
- P2=0xff;
- bai=num%1000/100;
- P0=table[bai];
- P2=0xfd;
- delay(10);
- P2=0xff;
- shi=num%100/10;
- P0=table[shi];
- P2=0xfb;
- delay(10);
- P2=0xff;
- ge=num%10;
- P0=table[ge];
- P2=0xf7;
- delay(10);
- P2=0xff;
- }
- void Init(void)
- {
- EA=1;//**************開總中斷
- EX1=1;//*************開外部中斷0
- IT1=0;//*************設置為電平觸發方式
- }
- //*********************主程序***************************
- void main(void)
- {
- uint i,count1;
- Init();
- while(1)
- {
- count=keyscan(); //調用掃鍵子程序
- Display(num);
- }
- }
- //*********************END******************************
- //*********************中斷子程序************************
- void Init1() interrupt 2
- {
- count=keyscan();
- num=num*10+count;
- if(num>9999)
- num=num%10;
- }//**********
復制代碼
|