欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 741|回復: 3
收起左側

74HC164芯片實現數碼管驅動和按鍵檢測分時復用 單片機程序仿真

[復制鏈接]
ID:619259 發表于 2025-10-20 20:04 | 顯示全部樓層 |閱讀模式
  機頂盒常用74HC164、74HC595、TM1637等芯片實現數碼管驅動和按鍵檢測功能,通過動態掃描和分時復用技術,利用人眼視覺暫留效應,讓同一組I/O口既控制數碼管顯示,又實現按鍵檢測,有效的節省I/O端口。  
  分時復用原理:將按鍵并聯接到數碼管的A-H端,最多可以連接8個按鍵,由單片機一個IO口檢測按鍵狀態。在數碼管完成一個掃描周期后,關閉數碼管位碼,將按鍵碼輸出,此時數碼管段選端和按鍵都接收到這個數據,但由于數碼管位碼關閉,數碼管并無顯示,未受到干擾。  
  按鍵碼為低電平有效,當有按鍵被按下,單片機檢測端會接收到低電平,若在傳送0xfe時接收到低電平,則判斷為K1被按下,數碼管會顯示相應的鍵值“01”,其它按鍵同理。
  本案例只是顯示01-06鍵值,若需要實現其它的功能,可在此程序的基礎上自行修改。

3DFB63B0AF359F1C80419F0CB7B78D12.png ED72A4748A8AC7DF5CA0CD7AACBBFB23.png

參考程序:
/*******************************************
        74HC164驅動4位數碼管及解析按鍵碼
*******************************************/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code SEG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //數碼管0~9共陽代碼
uchar code COM[]={0x01,0x02,0x04,0x08};             //數碼管位碼
uchar code KEY[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};   //按鍵碼
uchar buff[4];                   //顯示緩存
uchar keynum;      //按鍵消抖計時及按鍵鍵值

sbit DIO = P2^0;           //HC164數據
sbit CLK = P2^1;           //HC164時鐘
sbit Key_data = P2^2;  //按鍵檢測位

/**********************************************
    延時函數 x*1ms
**********************************************/
void delay(uint xms)         
{
         uchar i;
         while(--xms)
        {
             i=166;
             while(--i);
        }
}

/**********************************************
        74HC164寫入數據函數
**********************************************/        
void Wr_hc164(uchar dat)         
{
     uchar i;
     for(i=0; i<8; i++)
     {
         dat<<=1;
         DIO = CY;
         CLK = 0;      
         CLK = 1;
     }
}

/*********************************************
    顯示函數                                                
*********************************************/
void display()
{
    uchar i;  
    buff[0]=0xc6;
    buff[1]=0x89;
    buff[2]=SEG[keynum/10];
    buff[3]=SEG[keynum%10];
    for(i=0;i<4;i++)
    {
        Wr_hc164(buff); //傳送段碼     
        P3 = COM;           //傳送位碼   
        delay(3);
        P3 = 0x00;                    //消隱   
    }
}

/**********************************************
    按鍵掃描函數
**********************************************/  
void keyscan()
{
        uchar i;
        for(i=0;i<6;i++)                //循環6個按鍵
        {
                Wr_hc164(KEY);         //傳送按鍵碼
                if(Key_data==0)
                {
                        keynum=i+1;     //鍵值
                }                               //若要使按鍵具有加、減功能,需加入松手檢測
        }
}

/**********************************************
    主程序
**********************************************/  
void main()
{  
    while(1)
    {
         display();
         keyscan();        //4個數碼管完成1個掃描周期共12ms,正好作為按鍵的延時消抖
     }
}


仿真程序下載: 分時復用仿真(proteus8.17以上版本).zip (21.9 KB, 下載次數: 0)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:1064915 發表于 2025-10-21 09:25 | 顯示全部樓層
下載學習,感謝分享
回復

使用道具 舉報

ID:151348 發表于 2025-10-22 08:11 來自觸屏版 | 顯示全部樓層
矩陣按鍵掃描的IO輸出變成用串行芯片輸出
回復

使用道具 舉報

ID:712493 發表于 2025-10-22 09:13 | 顯示全部樓層
感謝分享,好資料
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表