- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- sbit DX=P2^6;//(P0为数码管输出端口)
- sbit WX=P2^7;
- sbit S2=P3^4;
-
-
- uchar code Table_D[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- uchar code Table_W[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
-
- void Delay_Us(uchar x);
- void Delay_Ms(uchar x);
- void Display(uint x);
-
- void Key_Scan();
-
- uchar Display_Num;
-
- void main()
- {
- while(1)
- {
- Key_Scan();
- Display(Display_Num);
- }
- }
-
- void Delay_Us(uchar x)//12MHz_Delay:6x+10us;11.0592MHz=12MHz_Delay*1.085.
- {
- while(x--);
- }
-
- void Delay_Ms(uchar x)//12MHz_Delay:x+0.5~1Ms;11.0592MHz=12MHz_Delay*1.085.
- {
- while(x--)
- {
- Delay_Us(75);
- Delay_Us(75);
- }
- }
-
- void Display(uint x)
- {
- P0=0xff;
- WX=1;
- WX=0;
- P0=Table_D[x/100];
- DX=1;
- DX=0;
- P0=Table_W[0];
- WX=1;
- WX=0;
- Delay_Ms(5);
-
- P0=0xff;
- WX=1;
- WX=0;
- P0=Table_D[x%100/10];
- DX=1;
- DX=0;
- P0=Table_W[1];
- WX=1;
- WX=0;
- Delay_Ms(5);
-
- P0=0xff;
- WX=1;
- WX=0;
- P0=Table_D[x%100%10];
- DX=1;
- DX=0;
- P0=Table_W[2];
- WX=1;
- WX=0;
- Delay_Ms(5);
- }
-
- void Key_Scan()
- {
- uchar temp,Key;
-
- P3=0xf0;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- Delay_Ms(10);
- if(temp!=0xf0)
- {
- temp=P3;
- temp=temp|0x0f;
- P3=temp;
- Key=P3;
-
- switch(Key)
- {
- case 0xee:Display_Num=1*1;break;
- case 0xde:Display_Num=2*2;break;
- case 0xbe:Display_Num=3*3;break;
- case 0x7e:Display_Num=4*4;break;
-
- case 0xed:Display_Num=5*5;break;
- case 0xdd:Display_Num=6*6;break;
- case 0xbd:Display_Num=7*7;break;
- case 0x7d:Display_Num=8*8;break;
-
- case 0xeb:Display_Num=9*9;break;
- case 0xdb:Display_Num=10*10;break;
- case 0xbb:Display_Num=11*11;break;
- case 0x7b:Display_Num=12*12;break;
-
- case 0xe7:Display_Num=13*13;break;
- case 0xd7:Display_Num=14*14;break;
- case 0xb7:Display_Num=15*15;break;
- case 0x77:Display_Num=16*16;break;
- }
- }
- }
- }
复制代码
|