這才是單片機44矩陣鍵盤控制數碼管最簡單的寫法

2022-05-18     大方老師單片機

原標題:這才是單片機44矩陣鍵盤控制數碼管最簡單的寫法

這才是單片4*4矩陣鍵盤控制數碼管最簡單的寫法

///插播一條:我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以~點我頭像黑色字體加我地球呺也能領取哦。最近比較閒,帶做畢設,帶學生參加省級或以上比///

第一次寫,也算是對我研究了幾天的代碼做一個總結

程序基AT89S51晶片,兩573鎖存器(控段選位選)

P3口接矩陣鍵盤,其P3.0~P3.3接行線P3.4~P3.7接列線P0口接共陰7段數碼管。

反轉法的原理:

反轉法就是通過給單片機的埠賦值兩次,最後得出所按鍵的值的一種算法。

P3口賦0x0f00001111,假0鍵按下了,則這P3口的實際值00001110

P3口再賦0xf011110000,如0鍵按下了,則這P3口的實際值11100000

通過這兩P3口的實際值相加111011100xee

由此我們便得到了按0鍵時所對應的數0xee,以此類推可得出其15個按鍵對應的數值,有了這種對應關係,矩陣鍵盤編程問題也就解決了,也就是程序的算法已經有了。

(上述方法來源於網絡)

好了下面直接進入程序

#include //頭文件

#define uchar unsigned char //宏定義

#define uint unsigned int

uchar key,n,i; //定義變量

uchar code table[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}; //反轉法矩陣鍵盤的各個按鍵的計算值

uchar code yin[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共陰極數碼管顯0~F

void delay(uint i) //延時函數

{

while(i--);

}

void keyscan()

{

uchar l,h,i; //定義局部變量,l得出4位的值,h得出4位的值

P3=0x0f; //P300001111

l=P3&0x0f;

if(l!=0x0f)

{

delay(100); //延遲後再檢測

P3=0x0f;

l=P3&0x0f;

if(l!=0x0f)

{

h=P3&0xf0; //若有鍵按下,得出高四位的值

P3=0xf0; //P311110000

h=P3&0xf0; //若有鍵按下,得出低四位的值

key=l+h; //4位的值與4位的值相加

for(i=0;i

{

if(key==table[i]) //通過查表得n的值

n=i;

}

}

}

}

void main()

{

while(1)

{

keyscan();

for(i=0;i //送入位選信號控制數碼管

{

P2_6=1;P2_7=0;

P0=yin[n];

P2_6=0;P2_7=1;

switch(i)

{

case 0:P0=0xfe;break;

case 1:P0=0xfd;break;

case 2:P0=0xfb;break;

case 3:P0=0xf7;break;

case 4:P0=0xef;break;

case 5:P0=0xdf;break;

default:break;

}

P2_6=0;P2_7=0;

delay(100);

}

}

}

文章來源: https://twgreatdaily.com/zh-cn/aebad54ff1d8ce7b00f40ebe2fa0d36e.html