這是一個比較簡單的矩陣鍵盤顯示為1~16,
萌新路過,大佬勿噴,若有問題,還請指出,十分感謝
附件里包括源碼和proteus仿真,若有需要可以下載
proteus仿真
8b13132ea97838bce637617c84b62a9b.png (46.05 KB, 下載次數: 69)
下載附件
2020-12-22 14:47 上傳
c6d12dacf78be1e89b3d3168acbc7d69.png (47.33 KB, 下載次數: 79)
下載附件
2020-12-22 14:47 上傳
代碼如下- #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)
2020-12-22 09:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|