0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

多個(gè)按鍵控制數(shù)碼管顯示數(shù)字

CHANBAEK ? 來(lái)源:狂錘硬件 ? 作者:顧 ? 2023-06-28 11:31 ? 次閱讀

寫代碼思路

按照之前的文章關(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è)鍵

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 原理圖
    +關(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
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    按鍵控制各位數(shù)碼管顯示不同數(shù)字

    用4*4矩陣鍵盤掃描是否有按鍵按下,當(dāng)有按鍵按下第一位數(shù)碼管顯示按下的那個(gè)數(shù)字,接著再按下按鍵
    發(fā)表于 07-19 10:24

    按鍵控制數(shù)碼管顯示

    按鍵s4接在P3.3口,按鍵按下,數(shù)碼管顯示數(shù)字30。求助
    發(fā)表于 06-25 00:47

    請(qǐng)問(wèn)CH579如何配置一個(gè)按鍵,使用按鍵控制數(shù)碼管顯示數(shù)字加減?

    請(qǐng)問(wèn)CH579如何配置一個(gè)按鍵,使用按鍵控制數(shù)碼管顯示數(shù)字加減。。。
    發(fā)表于 08-11 07:02

    單片機(jī)c語(yǔ)言按鍵控制LED以及數(shù)碼管

    單片機(jī) c語(yǔ)言 按鍵控制LED 以及數(shù)碼管 熟練 掌握 按鍵 應(yīng)用原理 以及消斗
    發(fā)表于 02-16 17:57 ?24次下載

    按鍵控制單個(gè)數(shù)碼管顯示

    19-按鍵控制單個(gè)數(shù)碼管顯示----------51單片機(jī)源程序 用keil直接打開(kāi)
    發(fā)表于 06-16 15:36 ?31次下載

    獨(dú)立按鍵控制數(shù)碼管的加減資料下載

    電子發(fā)燒友網(wǎng)站提供《獨(dú)立按鍵控制數(shù)碼管的加減資料下載.rar》資料免費(fèi)下載
    發(fā)表于 05-26 08:00 ?22次下載

    fpga按鍵控制數(shù)碼管顯示

    本文主要介紹了fpga按鍵控制數(shù)碼管顯示程序設(shè)計(jì)。數(shù)碼管是由多個(gè)發(fā)光二極封裝在一起組成“8”字
    發(fā)表于 01-16 16:19 ?1.7w次閱讀
    fpga<b class='flag-5'>按鍵控制</b><b class='flag-5'>數(shù)碼管</b><b class='flag-5'>顯示</b>

    由FPGA DIY開(kāi)發(fā)板實(shí)現(xiàn)消抖按鍵控制數(shù)碼管顯示0—9

    wang1113 的消抖按鍵控制數(shù)碼管顯示0—9視頻。
    的頭像 發(fā)表于 06-22 09:57 ?4045次閱讀

    利用FPGA_DIY開(kāi)發(fā)板實(shí)現(xiàn)按鍵控制數(shù)碼管

    十八筆畫(huà)的 FPGA_DIY 按鍵控制數(shù)碼管。
    的頭像 發(fā)表于 06-20 02:30 ?5886次閱讀
    利用FPGA_DIY開(kāi)發(fā)板實(shí)現(xiàn)<b class='flag-5'>按鍵控制</b><b class='flag-5'>數(shù)碼管</b>

    FPGA DIY 按鍵控制數(shù)碼管顯示

    asean的 FPGA DIY 按鍵控制數(shù)碼管顯示的視頻
    的頭像 發(fā)表于 06-20 00:37 ?7671次閱讀

    通過(guò)按鍵控制數(shù)碼管顯示當(dāng)前數(shù)控增益的PCB源文件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是通過(guò)按鍵控制數(shù)碼管顯示當(dāng)前數(shù)控增益的PCB源文件免費(fèi)下載。
    發(fā)表于 09-07 08:00 ?1次下載
    通過(guò)<b class='flag-5'>按鍵控制</b><b class='flag-5'>數(shù)碼管</b><b class='flag-5'>顯示</b>當(dāng)前數(shù)控增益的PCB源文件免費(fèi)下載

    使用單片機(jī)實(shí)現(xiàn)按鍵控制單個(gè)數(shù)碼管顯示的C語(yǔ)言實(shí)例免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)按鍵控制單個(gè)數(shù)碼管顯示的C語(yǔ)言實(shí)例免費(fèi)下載。
    發(fā)表于 11-12 17:33 ?31次下載
    使用單片機(jī)實(shí)現(xiàn)<b class='flag-5'>按鍵控制單個(gè)數(shù)碼管</b><b class='flag-5'>顯示</b>的C語(yǔ)言實(shí)例免費(fèi)下載

    使用單片機(jī)實(shí)現(xiàn)按鍵控制數(shù)碼管閃爍增減顯示的C語(yǔ)言程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實(shí)現(xiàn)按鍵控制數(shù)碼管閃爍增減顯示的C語(yǔ)言程序免費(fèi)下載。
    發(fā)表于 03-16 14:39 ?21次下載

    STM32F103的按鍵控制數(shù)碼管加減仿真

    STM32F103的按鍵控制數(shù)碼管加減仿真
    發(fā)表于 06-21 09:12 ?95次下載

    基于89C51單片機(jī)的按鍵控制單個(gè)數(shù)碼管顯示

    基于89C51單片機(jī)的按鍵控制單個(gè)數(shù)碼管顯示
    發(fā)表于 05-12 16:53 ?3次下載