營銷型網(wǎng)站的名詞解釋寶雞seo排名
前言
實驗:通過4*4的矩陣鍵盤,按下某個按鈕之后會在數(shù)碼管上面顯示對應(yīng)的鍵號。(0~F)
基礎(chǔ)操作參考這篇博客:
LED數(shù)碼管的靜態(tài)顯示與動態(tài)顯示(Keil+Proteus)-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/134101256
Keil
實驗采用的是共陽極的接法。所以這個二進制的數(shù)據(jù)里面的元素都是共陽極的。
通過逐行的掃描,假設(shè)當(dāng)前掃描第一行,對應(yīng)的P1^0~P1^3中有0則說明是該行有鍵被按下,結(jié)合if判斷可以確定是哪一列。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned intsbit L1=P1^0;//定義列
sbit L2=P1^1;
sbit L3=P1^2;
sbit L4=P1^3;
//共陽極字符0~F的段碼
uchar dis[16]={0xC0,0XF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
uint time;
//延時,放鍵盤抖動
void delay(uint time);void main(void){uchar temp;uchar i;while(1){P1=0xEF;//行掃描初值1110 1111(掃描P1^4)for(i=0;i<4;i++){//逐行為低,按行掃描,一共4行if(L1==0)P0=dis[i*4+0];//判斷第一列有無鍵被按下if(L2==0)P0=dis[i*4+1];//判斷第二列有無鍵被按下if(L3==0)P0=dis[i*4+2];//判斷第三列有無鍵被按下if(L4==0)P0=dis[i*4+3];//判斷第四列有無鍵被按下delay(500);//延時temp=P1;//讀入P1口的狀態(tài)temp=temp|0x0F;//將P1^3~P1^0為1temp=temp<<1;//左移,準(zhǔn)備掃描下一行temp=temp|0x0F;P1=temp;//為掃描下一行做準(zhǔn)備}}
}
//軟件消除抖動,延時
void delay(uint time){uint i;for(i=0;i<time;i++);
}
Proteus
相信大家已經(jīng)輕車熟路了,就直接放原理圖了。
所需要的器件
元件名稱 | Proteus關(guān)鍵字 |
51單片機 | AT89C51 |
復(fù)位按鈕 | BUTTON |
電阻 | RES |
共陽極八位數(shù)碼管 | 7SEG-MPX1-CA |
電源 | POWER |
?
矩陣鍵盤
總結(jié)
繼續(xù)加油!!!