这是一个比较简单的矩阵键盘显示为1~16,
萌新路过,大佬勿喷,若有问题,还请指出,十分感谢
附件里包括源码和proteus仿真,若有需要可以下载
proteus仿真
代码如下- #include <REGX52.H>
- sbit key = P3^3;
- sbit LSA = P2^0;
- sbit LSB = P2^1;
- #define TIM_ZJ 5
- char num = -1,num2 = 0;
- unsigned char code dis[]={0x3f,0x06,0x5b,0x4f,0x66, // 0 1 2 3 4
- 0x6d,0x7d,0x07,0x7f,0x6f,0x00}; // 5 6 7 8 9
- unsigned char code keycode[16] = {0x77,0x7b,0x7d,0x7e,0xb7,
- 0xbb,0xbd,0xbe,0xd7,0xdb,
- 0xdd,0xde,0xe7,0xeb,0xed,0xee};
- void delay(unsigned int aaaa) //10us
- {
- while(aaaa--);
- }
- void dis_play()
- {
- LSA = 1;
- LSB = 0;
- P0 = dis[num2%10];
- if(num2 == 0)
- {
- P0 = 0x00;
- }
- delay(100);
- P0 = 0x00;
- LSA = 0;
- LSB = 1;
- P0 = dis[num2/10];
- if(num2 < 10)
- {
- P0 = 0x00;
- }
- delay(100);
- P0 = 0x00;
- }
- char matrix_buttons(void)
- {
- unsigned char scan1,scan2,key,j;
-
- char matrix_value = -1;
-
- P1 = 0xf0;
- if(P1 != 0xf0)
- {
- delay(TIM_ZJ);
- if(P1 != 0xf0)
- {
- scan1 = P1;
- P1 = 0x0f;
- scan2 = P1;
- key = scan1 | scan2;
-
- for(j = 0; j < 16; j++)
- {
- if(key == keycode[j])
- {
- matrix_value = j + 1;
- }
- }
- }
- P1 = 0x0f;
- while(P1 != 0x0f) dis_play();
- delay(TIM_ZJ);
- while(P1 != 0x0f) dis_play();
- }
- return (matrix_value);
- }
- void main()
- {
- while(1)
- {
- num = matrix_buttons();
- if(num != -1)
- {
- num2 = num;
- }
- dis_play();
- }
- }
复制代码 全部资料51hei下载地址:
矩阵键盘.zip
(99.84 KB, 下载次数: 72)
|