最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

單片機(jī)學(xué)習(xí)——矩陣鍵盤(自用)

2023-03-14 21:20 作者:huabi_fxz  | 我要投稿

原理及思路:

對(duì)于矩陣鍵盤,我們只能逐行掃描,然后讀取列的信號(hào)。

例如一個(gè)4x4的矩陣,應(yīng)對(duì)每一行分別賦0,然后掃描列的信號(hào),加入某一列中出現(xiàn)0,則為對(duì)應(yīng)行列的鍵盤被按下。此時(shí),應(yīng)定義一個(gè)全局變量,給矩陣行列上的每一個(gè)按鍵賦予一個(gè)獨(dú)立的號(hào)碼,當(dāng)掃描到某一行某一列的動(dòng)作后,把對(duì)應(yīng)的編號(hào)輸出,我們就知道哪個(gè)按鍵觸發(fā)了。

軟件部分:

#include "reg52.h"

unsigned char code SMG_duanma[18]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,

0x82,0xf8,0x80,0x90,0x88,0x80,

0xc6,0xc0,0x86,0x8e,0xbf,0x7f};

unsigned char key_num;


sfr P4=0xc0; //52單片機(jī)無P4位,則需定義P4的地址


sbit R1=P3^0;

sbit R2=P3^1;

sbit R3=P3^2;

sbit R4=P3^3;


sbit C4=P3^4;

sbit C3=P3^4;

sbit C2=P4^2;

sbit C1=P4^4;//分別定義C1-C4、R1-R4端的端口


void selectHC573(unsigned char n)

{

?switch(n)

?{

?case 4:

?P2=(P2&0x1f)|0x80;

?break;

?case 5:

?P2=(P2&0x1f)|0xa0;

?break;

?case 6:

?P2=(P2&0x1f)|0xc0;

?break;

?case 7:

?P2=(P2&0x1f)|0xe0;

?break;

}

}//通過138譯碼器選擇需要使用的寄存器


void displaykeynum(unsigned char value)

{

?selectHC573(6);

?P0=0x01;

?selectHC573(7);

?P0=value;

}


void scankey()

{

?R1=0;//掃描第一行

?R2=R3=R4=1;

?C1=C2=C3=C4=1;

?if(C1==0)//分別對(duì)第一行的第一二三四列進(jìn)行掃描

?{

?while(C1==0);

?key_num=0;//若c1為0則代表按下的鍵為C1R1,輸出代表C1R1的0值

?displaykeynum(SMG_duanma[key_num]);

?}

?else if(C2==0)

?{

?while(C2==0);

?key_num=1;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C3==0)

?{

?while(C3==0);

?key_num=2;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C4==0)

?{

?while(C4==0);

?key_num=3;

?displaykeynum(SMG_duanma[key_num]);

?}?


?R2=0;

?R1=R3=R4=1;

?C1=C2=C3=C4=1;

?if(C1==0)

?{

?while(C1==0);

?key_num=4;

?displaykeynum(SMG_duanma[key_num]);

?}

?else if(C2==0)

?{

?while(C2==0);

?key_num=5;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C3==0)

?{

?while(C3==0);

?key_num=6;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C4==0)

?{

?while(C4==0);

?key_num=7;

?displaykeynum(SMG_duanma[key_num]);

?}


?R3=0;

?R2=R1=R4=1;

?C1=C2=C3=C4=1;

?if(C1==0)

?{

?while(C1==0);

?key_num=8;

?displaykeynum(SMG_duanma[key_num]);

?}

?else if(C2==0)

?{

?while(C2==0);

?key_num=9;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C3==0)

?{

?while(C3==0);

?key_num=10;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C4==0)

?{

?while(C4==0);

?key_num=11;

?displaykeynum(SMG_duanma[key_num]);

?}


?R4=0;

?R2=R3=R1=1;

?C1=C2=C3=C4=1;

?if(C1==0)

?{

?while(C1==0);

?key_num=12;

?displaykeynum(SMG_duanma[key_num]);

?}

?else if(C2==0)

?{

?while(C2==0);

?key_num=13;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C3==0)

?{

?while(C3==0);

?key_num=14;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C4==0)

?{

?while(C4==0);

?key_num=15;

?displaykeynum(SMG_duanma[key_num]);

?}

}

void main()

{

while(1)

{

?scankey();

}

}

懂完了


單片機(jī)學(xué)習(xí)——矩陣鍵盤(自用)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
龙胜| 谢通门县| 金昌市| 大荔县| 阳高县| 邮箱| 晴隆县| 沾益县| 乐业县| 淄博市| 深州市| 明星| 会同县| 渝北区| 渑池县| 乐平市| 宜春市| 明星| 巴青县| 临漳县| 化州市| 九龙县| 连州市| 屏山县| 江城| 威远县| 读书| 梅河口市| 微山县| 泰和县| 肇州县| 谷城县| 青浦区| 那坡县| 五家渠市| 军事| 枣阳市| 汉沽区| 龙山县| 莱芜市| 大丰市|