日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机矩阵键盘扫描程序c语言,51单片机矩阵键盘扫描程序(源代码)

發(fā)布時間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机矩阵键盘扫描程序c语言,51单片机矩阵键盘扫描程序(源代码) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

//小菜出品---嚴禁抄襲,轉(zhuǎn)載請注明出處

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar idata? x,y;

uchar code disp_code[] =

{

0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90,

// 0-9????? 0 1 2 3 4 5 6 7 8 9

0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,

// 10-15??? a b c d e f

0x7F, 0xBF, 0x9C, 0xFF

// 16-19??? . - 。null

};??? //數(shù)碼管顯示值列表

void delay(uchar c)??????????????????????? //延時函數(shù)

{

char a,b;

for(a=c;a>0;a--)

for(b=110;b>0;b--);

}

uchar key_scan()??????????????????????? //鍵盤掃描函數(shù)

{

uchar k;

uchar z;

x=0x00;

y=0x00;

P3=0xf0;??????????????????????????? //先給P3賦一個初值

if(P3!=0xf0)??????????????????????? //判斷P3不等于所賦初值,說明有健按下

{

delay(10);????????????????????? //消除鍵盤抖動? 延時10ms

if(P3!=0xf0)

{

x=P3;??????????????????? /*這里稍作解釋:起初我們已經(jīng)給P3賦了一個0xf0的值,如果有鍵按下,P3便一定不再是0xf0 ,

如果我們這時查看P3的值我們就能知道是哪一列的鍵按下了(說明一下,我的開發(fā)板上P3.0-P3.3接的是列)

但這時我們先不看P3的值,這時我們先把P3的值賦給x,再給P3賦一個0x0f的值,由于這兩條語句執(zhí)行的速度是

很快的,是us級的,而我們按一個按鍵怎么也得幾十到上百ms,盡管我們在前面已經(jīng)做過一個10ms的延時,但是

在我們給P3重新賦值后,按鍵一定還是閉合的,所以P3被賦0xof后由于有按鍵閉合,故P3的值又變了,這時候我們

查看P3的值就可以判斷出來是是哪一行的按鍵按下了.然后我們把這時的P3值賦給y,再用x或上y,把他們的值賦給z

然后判斷z的值就可以知道是具體哪一個鍵被按下了!(行和列都確定了,具體是哪一個鍵自然就確定了) */

P3=0x0f;

y=P3;

z=x|y;

switch(z)

{

case 0xee: k=0; break;

case 0xed: k=1; break;

case 0xeb: k=2; break;

case 0xe7: k=3; break;

case 0xde: k=4; break;

case 0xdd: k=5; break;

case 0xdb: k=6; break;

case 0xd7: k=7; break;

case 0xbe: k=8; break;

case 0xbd: k=9; break;

case 0xbb: k=10;break;

case 0xb7: k=11;break;

case 0x7e: k=12;break;

case 0x7d: k=13;break;

case 0x7b: k=14;break;

case 0x77: k=15;break;

}

}

}

return(k);

}

void main()

{

uchar dat;

while(1)

{

P3=0xf0;

while(P3!=0xf0)

{

dat=key_scan();

P1=0;

P0=disp_code[dat];

}

}

}

我感覺一般初學(xué)者會有疑問的地方 已經(jīng)做出了詳細的解釋

如果還有弄不明白的地方 可以回帖提問? 我會盡量做出解答

以期共同進步

總結(jié)

以上是生活随笔為你收集整理的单片机矩阵键盘扫描程序c语言,51单片机矩阵键盘扫描程序(源代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。