寫代碼思路
按照之前的文章關(guān)于數(shù)碼管說(shuō)到的線與,在此之上我們將一個(gè)按鍵拓展為多個(gè)按鍵,對(duì)數(shù)碼管進(jìn)行控制,就需要按鍵掃描函數(shù),數(shù)碼管顯示函數(shù),再加上個(gè)主函數(shù)和延遲函數(shù)就可以搞定。
01.原理圖
元器件為:7SEG-MPX6-CC、80C51、BUTTON
將原理圖畫(huà)好后,根據(jù)元件的連接和元件特性去寫代碼。
02.按鍵掃描函數(shù)
當(dāng)我們按鍵按下時(shí),需要判斷按鍵是否按下,如果按下了,我們需要給一個(gè)鍵標(biāo)志,判斷它已經(jīng)按下了。
按鍵掃描使用的方法為反轉(zhuǎn)法,除此方法外,還有掃描法。
或者你也可以先固定列,再判斷行是否按下,一行行去判斷,如果不在此列,則繼續(xù)下一列,同樣判斷每一行去確定按鍵是哪一個(gè)被按下了?!具@個(gè)方法有空我會(huì)嘗試寫出來(lái)】
//********按鍵掃描函數(shù)
void Key_scan(){
if(P1!=0xf0)
{
Delay(10); //延遲10ms
if(P1!=0xf0)
{
key_value = P1;
P1 = 0x0f;
key_value += P1;
key_flag = 1;
Display(); //數(shù)碼管顯示函數(shù)
P1 = 0xf0;
}
}
else
{
key_flag = 0;
}
}
03.數(shù)碼管顯示函數(shù)
因?yàn)閗ey_value是一個(gè)全局變量,所以并不需要傳參給Display函數(shù),直接拿去判斷就可以了。
//********數(shù)碼管顯示函數(shù)
void Display(){
if(key_value==key_pad[0])
P2 = Table_cc[0];
else if(key_value==key_pad[1])
P2 = Table_cc[1];
else if(key_value==key_pad[2])
P2 = Table_cc[2];
else if(key_value==key_pad[3])
P2 = Table_cc[3];
else if(key_value==key_pad[4])
P2 = Table_cc[4];
else if(key_value==key_pad[5])
P2 = Table_cc[5];
else if(key_value==key_pad[6])
P2 = Table_cc[6];
else if(key_value==key_pad[7])
P2 = Table_cc[7];
else if(key_value==key_pad[8])
P2 = Table_cc[8];
else if(key_value==key_pad[9])
P2 = Table_cc[9];
else if(key_value==key_pad[10])
P2 = Table_cc[10];
else if(key_value==key_pad[11])
P2 = Table_cc[11];
else if(key_value==key_pad[12])
P2 = Table_cc[12];
else if(key_value==key_pad[13])
P2 = Table_cc[13];
else if(key_value==key_pad[14])
P2 = Table_cc[14];
else if(key_value==key_pad[15])
P2 = Table_cc[15];
}
04.延遲函數(shù)
假設(shè)運(yùn)行一行代碼,是10us
那么循環(huán)100次就是1ms。
在延遲函數(shù)中,我加入了一個(gè)參數(shù),為了就是能得到任何我想要延遲的時(shí)間。
例如:當(dāng)k被賦為1時(shí),我們for循環(huán)總共循環(huán)了100次,延時(shí)時(shí)間time = 100 * 10 =1000us = 1ms。
PS:如果需要實(shí)際的執(zhí)行時(shí)間,還需要去debug一下,去算出一行代碼執(zhí)行時(shí)間是多少。
//********延遲函數(shù)
void Delay(u16 k){
u16 i,j;
for(i = 0; i < k ; i++)
for(j = 0; j< 100 ;j++);
}
05.主函數(shù)
因?yàn)槲覀儗?shí)現(xiàn)的功能分成了各個(gè)函數(shù)去寫,所以我們的主函數(shù)很簡(jiǎn)單,初始化加上我們需要調(diào)用的函數(shù),就可以實(shí)現(xiàn)我們想要的功能了。
void main(){
//初始化引腳
P1 = 0xf0;
P2 = 0x00;
P3 = 0x00;
Key_scan();
}
06.結(jié)果展示
未上電時(shí)
按下第一個(gè)鍵
按下第六個(gè)鍵
按下最后一個(gè)鍵
-
原理圖
+關(guān)注
關(guān)注
1285文章
6207瀏覽量
230928 -
數(shù)碼管
+關(guān)注
關(guān)注
31文章
1869瀏覽量
90518 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4235瀏覽量
61965 -
按鍵
+關(guān)注
關(guān)注
4文章
222瀏覽量
57491
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論