效果::每次按下的键对应的编码显示在数码管最后一位,之前的数码管显示的向左移动一位
单片机::stc89c52
代码:
- #include <REG52.h>
- typedef unsigned int uint;
- typedef unsigned char uchar;
- #define GPIO_DIG P0
- #define GPIO_KEY P1
- uint j=0,ii=1000,kk=0,pp;
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- uchar Key;
- uint amd=0;
- uchar code KKK[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71} ;
- uchar code app[]={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c};
- uchar amm[100];
- void delay(uint j)
- {
- while(j--);
- }
- void KeyDown(void)
- {
- char a=0;
- GPIO_KEY=0x0f;
- if(GPIO_KEY!=0x0f)
- {
- delay(1000);
- if(GPIO_KEY!=0x0f)
- {
- GPIO_KEY=0x0f;
- //行
- kk++;
- switch(GPIO_KEY)
- {
- case(0x07):Key=0;break;
- case(0x0b):Key=1;break;
- case(0x0d):Key=2;break;
- case(0x0e):Key=3;break;
- }
- GPIO_KEY=0xf0;
-
- //列
- switch (GPIO_KEY)
- {
- case(0x70):Key=Key+0;break;
- case(0xb0):Key=Key+4;break;
- case(0xd0):Key=Key+8;break;
- case(0xe0):Key=Key+12;break;
- }
- while((a<50)&&(GPIO_KEY= 0xf0))
- {
- delay(1000);
- a++;
- }
- }
- }
- }
- void main()
- {
- LSA=0;
- LSB=0;
- LSC=0;
- while(1)
- {
- KeyDown();
- if(kk==1)
- {
- P2=~app[0];
- GPIO_DIG= KKK[Key];
- amm[0]=KKK[Key];
- }
-
- if(kk==2)
- {
- P2=~app[1];
- GPIO_DIG= amm[0];
- delay(100);
- P2=~app[0];
- GPIO_DIG= KKK[Key];
- amm[1]=KKK[Key];
- delay(100);
- }
- if(kk==3)
- {
- P2=~app[2];
- GPIO_DIG= amm[0];
- delay(100);
- P2=~app[1];
- GPIO_DIG= amm[1];
- delay(100);
- P2=~app[0];
- GPIO_DIG= KKK[Key];
- amm[2]=KKK[Key];
- delay(100);
- }
- if(kk==4)
- {
- P2=~app[3];
- GPIO_DIG= amm[0];
- delay(100);
- P2=~app[2];
- GPIO_DIG= amm[1];
- delay(100);
- P2=~app[1];
- GPIO_DIG=amm[2];
- delay(100);
- P2=~app[0];
- GPIO_DIG= KKK[Key];
- amm[3]=KKK[Key];
- delay(100);
- }
- if(kk==5)
- {
- P2=~app[4];
- GPIO_DIG= amm[0];
- delay(100);
- P2=~app[3];
- GPIO_DIG= amm[1];
- delay(100);
- P2=~app[2];
- GPIO_DIG= amm[2];
- delay(100);
- P2=~app[1];
- GPIO_DIG= amm[3];
- delay(100);
- P2=~app[0];
- GPIO_DIG= KKK[Key];
- amm[4]=KKK[Key];
- delay(100);
- }
- if(kk==6)
- {
- P2=~app[5];
- GPIO_DIG= amm[0];
- delay(100);
- P2=~app[4];
- GPIO_DIG= amm[1];
- delay(100);
- P2=~app[3];
- GPIO_DIG= amm[2];
- delay(100);
- P2=~app[2];
- GPIO_DIG= amm[3];
- delay(100);
- P2=~app[1];
- GPIO_DIG= amm[4];
- delay(100);
- P2=~app[0];
- GPIO_DIG= KKK[Key];
- amm[5]=KKK[Key];
- delay(100);}
- if(kk==7)
- {
- P2=~app[6];
- GPIO_DIG=amm[0];
- delay(100);
- P2=~app[5];
- GPIO_DIG= amm[1];
- delay(100);
- P2=~app[4];
- GPIO_DIG= amm[2];
- delay(100);
- P2=~app[3];
- GPIO_DIG= amm[3];
- delay(100);
- P2=~app[2];
- GPIO_DIG= amm[4];
- delay(100);
- P2=~app[1];
- GPIO_DIG= amm[5];
- delay(100);
- P2=~app[0];
- GPIO_DIG= KKK[Key];
- amm[6]=KKK[Key];
- delay(100);
- }
- if(kk==8)
- {
- P2=~app[7];
- GPIO_DIG= amm[0];
- delay(100);
- P2=~app[6];
- GPIO_DIG=amm[1];
- delay(100);
- P2=~app[5];
- GPIO_DIG= amm[2];
- delay(100);
- P2=~app[4];
- GPIO_DIG= amm[3];
- delay(100);
- P2=~app[3];
- GPIO_DIG= amm[4];
- delay(100);
- P2=~app[2];
- GPIO_DIG= amm[5];
- delay(100);
- P2=~app[1];
- GPIO_DIG= amm[6];
- delay(100);
- P2=~app[0];
- GPIO_DIG= KKK[Key];
- amm[7]=KKK[Key];
- delay(100);
- }
- if(kk==9)
- {
- P2=~app[7];
- GPIO_DIG= amm[1];
- delay(100);
- P2=~app[6];
- GPIO_DIG=amm[2];
- delay(100);
- P2=~app[5];
- GPIO_DIG= amm[3];
- delay(100);
- P2=~app[4];
- GPIO_DIG= amm[4];
- delay(100);
- P2=~app[3];
- GPIO_DIG= amm[5];
- delay(100);
- P2=~app[2];
- GPIO_DIG= amm[6];
- delay(100);
- P2=~app[1];
- GPIO_DIG= amm[7];
- delay(100);
- P2=~app[0];
- GPIO_DIG= KKK[Key];
- amm[8]=KKK[Key];
- delay(100);
- }
- if(kk>9)
- {
- amd++;
- P2=~app[7];
- GPIO_DIG= amm[kk-8];
- delay(100);
- P2=~app[6];
- GPIO_DIG=amm[kk-7];
- delay(100);
- P2=~app[5];
- GPIO_DIG= amm[kk-6];
- delay(100);
- P2=~app[4];
- GPIO_DIG= amm[kk-5];
- delay(100);
- P2=~app[3];
- GPIO_DIG= amm[kk-4];
- delay(100);
- P2=~app[2];
- GPIO_DIG= amm[kk-3];
- delay(100);
- P2=~app[1];
- GPIO_DIG= amm[kk-2];
- delay(100);
- P2=~app[0];
- GPIO_DIG= KKK[Key];
- amm[kk-1]=KKK[Key];
- delay(100);
- }
- }
- }
复制代码
|