- #include <REG51.H>
- typedef unsigned char u8;
- typedef unsigned int u16;
- #define KEY_MATRIX_PORT P1
- #define SMG_PORT P0
- u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71,0x40};
- u8 key_is=16;
- void delay_10us(u16 ten_us)
- {
- while(ten_us--);
- }
- void key_matrix(void)
- {
- static bit a=0;
- KEY_MATRIX_PORT=0xf0;
- if(KEY_MATRIX_PORT!=0xf0)
- {
- delay_10us(1000);
- if(KEY_MATRIX_PORT!=0xf0 && a==0)
- {
- a=1;
- switch(KEY_MATRIX_PORT)
- {
- case(0Xe0):key_is = 0;break;
- case(0Xd0):key_is = 1;break;
- case(0Xb0):key_is = 2;break;
- case(0X70):key_is = 3;break;
- }
- KEY_MATRIX_PORT=0x0f;
- switch(KEY_MATRIX_PORT)
- {
- case(0X0e):key_is += 0;break;
- case(0X0d):key_is += 4;break;
- case(0X0b):key_is += 8;break;
- case(0X07):key_is +=12;break;
- }
- }
- }
- else //按键抬起
- {
- a=0;
- }
- }
- void main()
- {
- while(1)
- {
- key_matrix();
- SMG_PORT=gsmg_code[key_is];
- }
- }
复制代码
|