電子開發網

電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機實例 >> 正文

51單片機數碼管顯示程序, 共陰數碼管顯示程序 數碼管原理(顯示)及編碼(段碼)

作者:佚名    文章來源:本站原創    點擊數:    更新時間:2023/5/18
#include <reg51.h>
sbit dula=P2^6;
sbit wela=P2^7;
sbit P34=P3^4;
  char Tab [10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};   //共陰極數碼管0到f的短編碼
unsigned char Dat[4]={0xf7,0xfb,0xfd,0xfe};
    unsigned char Second=0;
unsigned long i,c=0;
void main()
{        
        char t;
    char b[2];
TMOD=0x01;        
    TR0=1;            
    TH0=(65536-46080)/256;
    TL0=(65536-46080)%256;
    ET0=1;                            //允許T0中斷
    EA=1;                       //允許所有中斷
   while(1)
    {
    b[3]=c/1000;     //千
  b[2]=c/100%10;    //百
 b[1]=c/10%10;     //十
  b[0]=c%10;       //個
for(t=0;t<2;t++){ //t是多少個數碼管顯示
        P0=Tab[b[t]];
dula=1;dula=0;
    P0=Dat[t];
    wela=1;wela=0;
for(i=0;i<2;i++);
    P0=0xFF;    
}}}
/*定時器0中斷服務子程序*/
void time0() interrupt 1
{
    TH0= (65536-46080)/256;
    TL0= (65536-46080)%256;
        i++;
    if(i==1){
        i=0;
    c++;
    if(c>=20) c=0;        //計數到20秒自動回0
    }
}

 

數碼管原理(顯示)及編碼(段碼)

常用的7段數碼管由發光二極管(組合)構成,如下圖:


不帶小數點的共陰數碼管驅動 

分為:共陽極和共陰極(如上圖)

如果顯示“0”,共陽極為:abcdefg dp ,dp為對應最高位,a為對應最低位,編碼:11000000 ,16進制0xC0,共陰極正好相反:00111111,16進制0x3f。

以此類推。

共陽極數碼管的0 到f的段編碼:
0xc0,0xf9,0xa4,0xb0,//0~3
0x99,0x92,0x82,0xf8,//4~7
0x80,0x90,0x88,0x83,//8~b
0xc6,0xa1,0x86,0x8e //c~f

共陰極數碼管0到f的短編碼:
0x3f,0x06,0x5b,0x4f,    //0~3
0x66,0x6d,0x7d,0x07,    //4~7
0x7f,0x6f,0x77,0x7c,    //8~b
0x39,0x5e,0x79,0x71    //c~f

這段代碼是一個基于單片機的數字時鐘,具體實現了以下功能:

  1. 通過四個共陰數碼管顯示當前時刻,每秒更新一次;
  2. 使用定時器0作為計時器,每隔50ms產生一次中斷,從而實現秒表計時功能;
  3. 將計時結果(單位為秒)以“xx.xx”形式顯示在第一個數碼管上,最多可以計時20秒。

下面是對這段代碼的詳細分析:

首先,在 main 函數中,定義了一些變量,包括:

  • Tab:數字 0~9 在數碼管上的顯示碼表;
  • Dat:數碼管控制位模式表;
  • Second:用于存儲當前時間的秒數,初始值為 0;
  • i:用于計時的計數器,初始值為 0;
  • c:用于秒表計時的計數器,初始值為 0。

接著,在 main 函數中,初始化定時器0,并開啟 T0 中斷和全局中斷使能。

隨后進入主循環,其中先通過將計數值 c 格式化為四個數字,存儲在數組 b 中。循環遍歷數組 b,依次將每個數字通過選擇相應的碼表值和數碼管控制位模式,發送給數碼管進行顯示。

在 T0 中斷服務子程序 time0 中,首先重新加載定時器初值,然后每隔一定周期執行一次計時操作:將計數值 i 加 1,如果 i 達到指定閾值(50ms),則將當前秒表計數值 c 加 1,并判斷是否超過20秒,如果超過則將其清零。

需要注意的是,此代碼僅僅是一個簡單的實現,還存在一些問題。例如,由于使用了延時函數,這會影響程序的實時性。而且,由于只在主循環中更新時鐘顯示,如果程序在處理其他任務時比較繁忙,則可能導致時鐘顯示出現明顯的卡頓或錯誤。因此,在實際應用中需要對代碼進行進一步的優化和改進。

Tags:七段數碼管,51單片機  
責任編輯:admin
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個字
[ 查看全部 ] 網友評論
關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢
欧美精品中文字幕亚洲专区| 我要看WWW免费看插插视频| 亚洲av无码专区在线观看下载 | 性色欲情网站iwww| 中文字幕福利片| 性一交一乱一乱一视频| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | rbd奴隷色の女教师4| 在线观看的免费视频网站| a级一级黄色片| 国产美女主播一级成人毛片| 91精品国产一区| 国产禁女女网站免费看| 高h全肉动漫在线观看最新| 国产女人的一级毛片视频| 老师的兔子好多软水在线看| 国产a级午夜毛片| 精品一区二区三区在线观看视频 | a级毛片免费看| 国产精品无码素人福利免费| 黑人一级大毛片| 国产午夜无码视频免费网站 | 国产又色又爽又黄的| 综合图区亚洲欧美另类小说| 午夜亚洲国产精品福利| 污视频免费网站| 亚洲日产综合欧美一区二区| 日韩美女在线视频网站免费观看| 九九电影院理论片| 成年视频在线播放| 一本色道久久88综合日韩精品| 在线视频www| 538精品视频在线观看| 国产性夜夜春夜夜爽| 精品视频vs精品视频| 免费观看成人毛片| 欧美成人伊人十综合色| 亚洲一区二区三区国产精华液 | 好爽快点使劲深点好紧视频| a级毛片视频免费观看| 国产真实乱了全集mp4|