国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

51單片機(jī)——數(shù)碼管、按鍵、矩陣按鍵C語言入門編程

這篇具有很好參考價值的文章主要介紹了51單片機(jī)——數(shù)碼管、按鍵、矩陣按鍵C語言入門編程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

數(shù)碼管:

1.靜態(tài)數(shù)碼管:第二位數(shù)碼管顯示0

2.動態(tài)數(shù)碼管:每一位數(shù)碼管依次顯示對應(yīng)位數(shù)

按鍵:

1.獨立按鍵:按下按鍵對應(yīng)LED亮滅

矩陣按鍵:

1.矩陣按鍵:按下的每個按鍵,數(shù)碼管顯示對應(yīng)鍵碼


數(shù)碼管:

????????數(shù)碼管按段數(shù)可分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管多一個DP(小數(shù)點)二極管。也可分為CA共陽極數(shù)碼管(低電平點亮)和CC共陰極數(shù)碼管(高電平點亮)。本開發(fā)板上使用的是2個四位一體共陰極數(shù)碼管。數(shù)碼管靜態(tài)顯示是控制數(shù)碼管的每一個引腳,輸入一次電平之后可以一直顯示直到再一次改變電平,靜態(tài)顯示會增加IO口的使用,結(jié)構(gòu)復(fù)雜成本高,但是會減少占用CPU的時間。數(shù)碼管動態(tài)顯示通過位選—段選—清零(消影)來通過發(fā)光管余輝和人的視覺暫留是我們感覺出每一位同時顯示。 通過74HC138譯碼器(C為高位B為次高位A為低位)輸入高電平輸出低電平進(jìn)行位選,然后通過74HC245驅(qū)動數(shù)碼管段選(a為低位,DP為高位)。數(shù)碼管單片機(jī)編程,51單片機(jī),51單片機(jī),c語言,嵌入式硬件

//共陰極數(shù)碼管段碼表
0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71,0X00
 0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F    空

//共陽極數(shù)碼管段碼表
0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0XFF
 0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F    空

數(shù)碼管單片機(jī)編程,51單片機(jī),51單片機(jī),c語言,嵌入式硬件

數(shù)碼管單片機(jī)編程,51單片機(jī),51單片機(jī),c語言,嵌入式硬件

1.靜態(tài)數(shù)碼管:第二位數(shù)碼管顯示0

#include <REGX52.H>
 
void main()
{
    P2_2=0;//位選 LED7
    P2_3=1;
    P2_4=1;
    P0=0x3f;//段選 顯示0
    while(1)
    {
        
    }
}

2.動態(tài)數(shù)碼管:每一位數(shù)碼管依次顯示對應(yīng)位數(shù)

????????數(shù)碼管函數(shù)1

#include <REGX52.H>
 
unsigned char code NixieNum[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71,0X00};//共陰極段碼
 
void shumaguan(unsigned char wei,duan)
{
    P0=0x00;//清零消影 采用delay函數(shù)亮度增強(qiáng)
    switch(wei)//位選
    {
        case 1:P2_2=1;P2_3=1;P2_4=1;break;//P2_4為高位
        case 2:P2_2=0;P2_3=1;P2_4=1;break;
        case 3:P2_2=1;P2_3=0;P2_4=1;break;
        case 4:P2_2=0;P2_3=0;P2_4=1;break;
        case 5:P2_2=1;P2_3=1;P2_4=0;break;
        case 6:P2_2=0;P2_3=1;P2_4=0;break;
        case 7:P2_2=1;P2_3=0;P2_4=0;break;
        case 8:P2_2=0;P2_3=0;P2_4=0;break;
    }
    P0=NixieNum[duan];//段選
}

? ? ? ? 數(shù)碼管函數(shù)2

#include <REGX52.H>
#include "DELAY.h"

unsigned char code NixieNum[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71,0X00};//段碼

void shumaguan(unsigned char wei,duan)
{
    switch(wei)//位選
    {
        case 1:P2_2=1;P2_3=1;P2_4=1;break;//P2_4為高位
        case 2:P2_2=0;P2_3=1;P2_4=1;break;
        case 3:P2_2=1;P2_3=0;P2_4=1;break;
        case 4:P2_2=0;P2_3=0;P2_4=1;break;
        case 5:P2_2=1;P2_3=1;P2_4=0;break;
        case 6:P2_2=0;P2_3=1;P2_4=0;break;
        case 7:P2_2=1;P2_3=0;P2_4=0;break;
        case 8:P2_2=0;P2_3=0;P2_4=0;break;
    }
    P0=NixieNum[duan];//段選
    delay(1);//延時1ms穩(wěn)定圖像 清零消影 靜態(tài)關(guān)閉消影
    P0=0x00;//清零消影 靜態(tài)關(guān)閉消影
}

????????主函數(shù)

 
#include <REGX52.H>
#include "shumaguan.h"
 
void main()
{
    
    while(1)
    {
        shumaguan(1,0);
        shumaguan(2,1);
        shumaguan(3,2);
        shumaguan(4,3);
        shumaguan(5,4);
        shumaguan(6,5);
        shumaguan(7,6);
        shumaguan(8,7);
    }
}

按鍵:

????????兩端距離長的表示默認(rèn)是導(dǎo)通狀態(tài),距離短的默認(rèn)是斷開狀態(tài)。如果按鍵按下,初始導(dǎo)通狀態(tài)變?yōu)閿嚅_,初始斷開狀態(tài)變?yōu)閷?dǎo)通。通常的按鍵都是機(jī)械彈性開關(guān),由于彈性作用,在閉合時不會馬上穩(wěn)定的接通,在斷開時也不會馬上斷開,一般會抖動5-10ms。所以為了消抖,一般由軟件消抖20ms。IO口既可以輸出也可以輸入,當(dāng)按鍵按下時IO口電平會被接地,所以我們只需要檢測按鍵什么時候被拉低就可以。數(shù)碼管單片機(jī)編程,51單片機(jī),51單片機(jī),c語言,嵌入式硬件

數(shù)碼管單片機(jī)編程,51單片機(jī),51單片機(jī),c語言,嵌入式硬件

1.獨立按鍵:按下按鍵對應(yīng)LED亮滅

? ? ? ? 按鍵函數(shù)

#include <REGX52.H>
#include "DELAY.h"
 
unsigned char anjian()
{
    unsigned char jianwei=0;
    if(P3_1==0){delay(20);while(P3_1==0);delay(20);jianwei=1;}//檢測按鍵是否為0,消抖,檢測是否松手,消抖
    if(P3_0==0){delay(20);while(P3_0==0);delay(20);jianwei=2;}
    if(P3_2==0){delay(20);while(P3_2==0);delay(20);jianwei=3;}
    if(P3_3==0){delay(20);while(P3_3==0);delay(20);jianwei=4;}
    return jianwei;
}

????????主函數(shù)

#include <REGX52.H>
#include "anjian.h"
 
void main()
{
    unsigned char i;
    while(1)
    {
        i=anjian();
        if(i==1){P2_0=~P2_0;}//如果第一個按下,第一個燈狀態(tài)取反
        if(i==2){P2_1=~P2_1;}
        if(i==3){P2_2=~P2_2;}
        if(i==4){P2_3=~P2_3;}
    }
}

矩陣按鍵:

????????每一個獨立按鍵都需要借一個IO口,但是矩陣按鍵會大大減少IO資源的使用。開發(fā)板上將 16 個按 鍵排成 4 行 4 列,第一行將每個按鍵的一端連接在一起構(gòu)成行線,第一列將每 個按鍵的另一端連接在一起構(gòu)成列線,這樣便一共有 4 行 4 列共 8 根線,我們將 這 8 根線連接到單片機(jī)的 8 個 I/O 口上,通過程序掃描鍵盤就可檢測 16 個 鍵。用這種方法我們也可實現(xiàn) 3 行 3 列 9 個鍵、?5 行 5 列 25 個鍵、 6 行 6 列 36 個鍵甚至更多。跟獨立按鍵相同,我們只需要檢測按鍵什么時候被拉低就可以。本次我們采用行掃描的方法使用矩陣按鍵,并且不要忘記消抖。

數(shù)碼管單片機(jī)編程,51單片機(jī),51單片機(jī),c語言,嵌入式硬件

1.矩陣按鍵:按下的每個按鍵,數(shù)碼管顯示對應(yīng)鍵碼

? ? ? ? 矩陣函數(shù)

#include <REGX52.H>
#include "DELAY.h"
 
unsigned char juzhen()//行掃描
{
    unsigned char juzhenNum;
    P1=0x7f;
    if(P1_3==0){delay(20);while(P1_3==0);delay(20);juzhenNum=1;}
    if(P1_2==0){delay(20);while(P1_2==0);delay(20);juzhenNum=2;}
    if(P1_1==0){delay(20);while(P1_1==0);delay(20);juzhenNum=3;}
    if(P1_0==0){delay(20);while(P1_0==0);delay(20);juzhenNum=4;}
    P1=0xbf;
    if(P1_3==0){delay(20);while(P1_3==0);delay(20);juzhenNum=5;}
    if(P1_2==0){delay(20);while(P1_2==0);delay(20);juzhenNum=6;}
    if(P1_1==0){delay(20);while(P1_1==0);delay(20);juzhenNum=7;}
    if(P1_0==0){delay(20);while(P1_0==0);delay(20);juzhenNum=8;}
    P1=0xdf;
    if(P1_3==0){delay(20);while(P1_3==0);delay(20);juzhenNum=9;}
    if(P1_2==0){delay(20);while(P1_2==0);delay(20);juzhenNum=10;}
    if(P1_1==0){delay(20);while(P1_1==0);delay(20);juzhenNum=11;}
    if(P1_0==0){delay(20);while(P1_0==0);delay(20);juzhenNum=12;}
    P1=0xef;
    if(P1_3==0){delay(20);while(P1_3==0);delay(20);juzhenNum=13;}
    if(P1_2==0){delay(20);while(P1_2==0);delay(20);juzhenNum=14;}
    if(P1_1==0){delay(20);while(P1_1==0);delay(20);juzhenNum=15;}
    if(P1_0==0){delay(20);while(P1_0==0);delay(20);juzhenNum=16;}
    return juzhenNum;
}

? ? ? ? 主函數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-817107.html

#include <REGX52.H>
#include "shumaguan.h"
#include "juzhen.h"
 
void main()
{
    unsigned char i=0;
    while(1)
    {
        i=juzhen();
        shumaguan(1,i);
    }
}

到了這里,關(guān)于51單片機(jī)——數(shù)碼管、按鍵、矩陣按鍵C語言入門編程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 51單片機(jī)按鍵控制數(shù)碼管顯示0-9

    51單片機(jī)按鍵控制數(shù)碼管顯示0-9

    實驗題目:使用51單片機(jī)設(shè)計兩個按鍵控制數(shù)碼管顯示0-9,當(dāng)K1按下減1,當(dāng)K2按下加1. 理解程序可參考我的另外兩個文章; 51單片機(jī)數(shù)碼管顯示0-9_學(xué)習(xí)筆記吧的博客-CSDN博客 51單片機(jī)獨立按鍵控制合集_學(xué)習(xí)筆記吧的博客-CSDN博客 兩個文章一結(jié)合就是一個新的產(chǎn)物,所以51單片機(jī)

    2024年02月11日
    瀏覽(25)
  • 51單片機(jī)“獨立按鍵”控制靜態(tài)數(shù)碼管———顯示數(shù)字0-9

    51單片機(jī)“獨立按鍵”控制靜態(tài)數(shù)碼管———顯示數(shù)字0-9

    (1).獨立按鍵模塊電路圖可以清楚的看到,所有從引腳JP1出來的電流都會接到GND,且當(dāng)所有按鍵按下時被執(zhí)行鏈接GND。所以,當(dāng)JP1引腳各端口----識別----到“電流為低電平為0時”,說明按鍵被按下,否則為高電平按鍵沒有被按下。 ( 2).按鍵的原理其是需要我們單片機(jī)有檢

    2024年02月11日
    瀏覽(38)
  • 51單片機(jī)——秒表(定時器掃描獨立按鍵和數(shù)碼管)

    ????????這次實驗主要是用定時器來定時掃描獨立按鍵和數(shù)碼管,代替兩個模塊函數(shù)中的延時函數(shù)。用定時器定時掃描的好處就是,主函數(shù)中的延時并不會影響按鍵的檢測和數(shù)碼管的掃描,只會影響響應(yīng)速度。因為定時器是溢出就會執(zhí)行中斷程序,是定時的掃描。 改進(jìn)的

    2024年02月10日
    瀏覽(26)
  • 【51單片機(jī)】EEPROM-IIC實驗(按鍵控制數(shù)碼管)

    【51單片機(jī)】EEPROM-IIC實驗(按鍵控制數(shù)碼管)

    目錄 ? ??I2C總線 ?編輯 ??代碼 ??????main.c ??????i2.c ??代碼分析 ? I2C總線是Philips公司在八十年代初推出的一種串行、半雙工的總線,主要用于近距離、低速的芯片之間的通信;I2C總線有兩根雙向的信號線,一根 數(shù)據(jù)線SDA 用于收發(fā)數(shù)據(jù),一根 時鐘線SCL 用于通信

    2024年02月11日
    瀏覽(23)
  • 51單片機(jī)矩陣鍵盤——數(shù)碼管顯示

    當(dāng)我們熟悉了數(shù)碼管的位選與段選,并了解的矩陣鍵盤的掃描之后就可以編寫程序了。 按下矩陣鍵盤S1并松開,數(shù)碼管第一位(LED8)顯示0;按下矩陣鍵盤S2并松開,數(shù)碼管第一位顯示1;...按下矩陣鍵盤S16并松開,數(shù)碼管第一位顯示F; 矩陣鍵盤掃描(輸入掃描) ?? ?原理:

    2024年02月11日
    瀏覽(20)
  • 51單片機(jī)實驗三:數(shù)碼管顯示時鐘 按鍵調(diào)節(jié)時間時閃爍提示

    51單片機(jī)實驗三:數(shù)碼管顯示時鐘 按鍵調(diào)節(jié)時間時閃爍提示

    功能效果:1.時分秒的動態(tài)顯示。2.用三個按鍵實現(xiàn)時分秒的修改,調(diào)節(jié)的數(shù)字閃爍提示。 ?

    2024年02月11日
    瀏覽(31)
  • 單片機(jī)學(xué)習(xí)-使用矩陣按鍵來顯示數(shù)碼管0-F

    單片機(jī)學(xué)習(xí)-使用矩陣按鍵來顯示數(shù)碼管0-F

    1、行列掃碼 //數(shù)碼管字摸 u8 gsmg_code[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, ?? ??? ??? ??? ??? ??? ?0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};?? ? ?//共陰 顯示0-F 2、線翻轉(zhuǎn)掃描

    2024年02月04日
    瀏覽(21)
  • 51單片機(jī)用矩陣鍵盤控制數(shù)碼管,求助大佬

    從黑體的地方開始,我想通過矩陣鍵盤控制數(shù)碼管顯示0-15,但是不知道怎么搞兩位數(shù)的顯示,是不是延時什么的有問題 #include REGX52.H sfr P4 = 0xC0; unsigned char code duanma[18]={ ? ? ? ? 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x80,0xc0,0x86,0x8e,0xbf,0x7f}; sbit R1 = P3^0; sbit R2 = P3^1; sbit R3 = P

    2024年02月09日
    瀏覽(29)
  • C51單片機(jī)的電子時鐘(數(shù)碼管顯示+獨立按鍵模塊修改及暫停時間)

    C51單片機(jī)的電子時鐘(數(shù)碼管顯示+獨立按鍵模塊修改及暫停時間)

    IMG_1120 通過查看這三個原理圖我們可以得知控制K1、K2、K3及K4是通過P31、P30、P32及P33來實現(xiàn)的,控制8個數(shù)碼管是P22、P23及P24來實現(xiàn), 控制發(fā)光二極管則由P00-P07來實現(xiàn)。 代碼分為三部分分別為main.c、key.h、key.c scankey()函數(shù)的主要代碼,通過軟件入手提高系統(tǒng)的可靠性,防止外

    2024年02月05日
    瀏覽(25)
  • 51單片機(jī)的串口實驗之?dāng)?shù)碼管顯示與按鍵實驗(8位數(shù)字任意傳輸)

    51單片機(jī)的串口實驗之?dāng)?shù)碼管顯示與按鍵實驗(8位數(shù)字任意傳輸)

    目標(biāo)效果: 1、電腦發(fā)送任意小于=8位數(shù)字( SUBF只有8位最大只能發(fā)送255,但是可以通過數(shù)組進(jìn)行臨時存儲來實現(xiàn)傳輸多字節(jié) )數(shù)字,在數(shù)碼管上顯示對應(yīng)的數(shù)字且同時滿足高位是0可以不顯示 ?2、矩陣按鍵按下后,電腦接收所按下的按鈕 實驗器材: 1、普中51單片機(jī)。2、ST

    2024年02月02日
    瀏覽(36)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包