4x4矩陣鍵數值的讀取和顯示;
按鍵被按下后只有被松開才會有效果;
多個按鍵被按下只有按鍵都被松開最先被按下的按鍵起效果;
采用共陽極數碼管顯示;
附件包含完整仿真設計和C程序。
仿真原理圖如下(proteus仿真工程文件和完整單片機c代碼可到本帖附件中下載)
1.png (135.48 KB)
下載附件
2021-6-9 17:25 上傳
部分代碼:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- /**************物理連線
- P1對應數碼管;
- P2前四位對應矩陣行
- P2后四位對應矩陣列
- *****************/
- #define saomiao P2
- #define DB P1
- void display(uchar dat); //顯示鍵盤值函數
- uchar key_scan( ); //鍵盤掃描函數
- uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e }; //0~15數碼管代碼,共陽極
- uchar key; //鍵盤值
- /********************************************************************
- 延時函數
- *********************************************************************/
- void delay10ms(void) //延時程序
- {
- unsigned char i,j;
- for(i=20;i>0;i--)
- for(j=248;j>0;j--);
- }
- //*****************鍵盤掃描函數*****************
- uchar key_scan()
- {
- uchar temp;
- saomiao=0xfe; //掃描第1行鍵
- temp=saomiao;
- temp=temp&0xf0;
- if(temp!=0xf0)
- delay10ms(); //延時10ms
- temp=saomiao;
- temp=temp&0xf0; //確認按鍵被按下
- if(temp!=0xf0)
- {
- temp=saomiao;
- switch(temp)
- {
- case 0xee: //第1行第1列被按下
- key=0;
- break;
- case 0xde: // 第1行第2列被按下
- key=1;
- break;
- case 0xbe: // 第1行第3列被按下
- key=2;
- break;
- case 0x7e: // 第1行第4列被按下
- key=3;
- break;
- default:
- break;
- }
- K1:
- temp=saomiao;
- temp=temp&0xf0;
- while(temp!=0xf0) //等待按鍵被松開才可以有效果
- goto K1;
- }
- saomiao=0xfd; //掃描第2行鍵
- temp=saomiao;
- temp=temp&0xf0;
- ------完整代碼請下載本文尾部的附件----
復制代碼 完整程序代碼和proteus仿真工程:
4x4矩陣鍵.zip
(54.63 KB, 售價: 3 E幣)
2021-6-9 17:26 上傳
點擊文件名下載附件
售價: 3 E幣 [記錄]
[ 購買]
【必讀】版權免責聲明
1、本主題所有言論和內容純屬會員個人意見,與本論壇立場無關。2、本站對所發內容真實性、客觀性、可用性不做任何保證也不負任何責任,網友之間僅出于學習目的進行交流。3、對提供的數字內容不擁有任何權利,其版權歸原著者擁有。請勿將該數字內容進行商業交易、轉載等行為,該內容只為學習所提供,使用后發生的一切問題與本站無關。 4、本網站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網站也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網站所有軟件和資料均為網友推薦收集整理而來,僅供學習用途使用,請務必下載后兩小時內刪除,禁止商用。6、如有侵犯你版權的,請及時聯系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|