【C51單片機(jī)期末復(fù)習(xí)整理系列】[五]自制搶答器4*4按鍵對(duì)應(yīng)八位數(shù)碼管顯示

要求:4*4按鍵對(duì)應(yīng)八位數(shù)碼管顯示

數(shù)碼管電路圖:

Pasted Graphic.jpg

4*4矩陣式鍵盤電路原理圖:

Pasted Graphic.jpg

代碼如下:

#include "reg52.h"
sbit oe = P1^3;
sbit le1 = P1^4;//傳值
sbit le2 = P1^5;//片選
char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共陰極的code
char code select[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//延時(shí)函數(shù)
void delay(unsigned int ms){
          unsigned int x,y;
          for(x=0;x<ms;x++)
        for(y=0;y<110;y++);
      }
 //數(shù)碼管顯示函數(shù)(傳入uint的數(shù)字,在八位數(shù)碼管顯示相應(yīng)的數(shù)字)
    void display(unsigned int num){ 
    oe = 0;
    le1 = 0;
        le2 = 0;
    le1 = 1;
    P0 = table[num];
    le1 = 0;
    le2 = 1;
    P0 = select[0];
    le2 = 0;
    delay(5);
    }
      //按鍵檢測函數(shù)(按下相應(yīng)按鍵顯示不同數(shù)字)
    void button_check(){
      unsigned int l,h,hex;
      P2 = 0xF0;//列輸入,行輸出
        delay(2);
        h = P2;
        delay(2);
        P2 = 0x0F;/行輸入,列輸出
        l = P2;
        delay(2);
        hex = l|h;//兩個(gè)值相或的交點(diǎn)
        delay(2);
    switch(hex){
          case 0xEE://第一個(gè)E標(biāo)識(shí)列,第二個(gè)E表示行
                display(0);
                break;
        
            case 0xDE:
                display(1);
                break;
            
            case 0xBE:
                display(2);
                break;
        
            case 0x7E:
                display(3);
                break;
            
            case 0xED:
                display(4);
                break;

            case 0xDD:
                display(5);
                break;
            case 0xBD:
                display(6);
                break;
            
            case 0x7D:
                display(7);
                break;
            
            
            case 0xEB:
                display(8);
                break;

            case 0xDB:
                display(9);
                break;
            
            case 0xBB:
                display(10);
                break;
            
            case 0x7B:
                display(11);
                break;
            
            case 0xE7:
                display(12);
                break;

            case 0xD7:
                display(13);
                break;
            
            case 0xB7:
                display(14);
                break;
            
            case 0x77:
                display(15);
                break;  
      }
     }
            void main(){
    while(1){
        button_check();
        delay(5);

    }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容