8位數(shù)碼管顯示時(shí)間(proteus)

注: 此例程基本完全抄襲博客---利用單片機(jī)的數(shù)碼管模擬時(shí)鐘的顯示時(shí)間---

  • 原理圖如下:

原理圖.png

鎖存器使用的74LS373
8位共陰極數(shù)碼管
時(shí)間不太準(zhǔn)
代碼如下:

#include <reg52.h>
#define SEGPORT P0
//段選和位選引腳,其中段選控制數(shù)碼管的顯示內(nèi)容,位選控制哪一個(gè)數(shù)碼管亮
sbit seg_select = P2^0;        
sbit bit_select = P2^1;        
//共陰極數(shù)碼管編碼表
unsigned char duanma[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};               
//位碼
unsigned char weima[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; 
unsigned char TempData[8];
//初始化時(shí)間
unsigned char shi = 9, fen = 28, miao = 30;
//顯示
void display()
{
      static unsigned char i = 0;
//初始化數(shù)碼管,讓數(shù)碼管都滅
      SEGPORT = 0x0;
      seg_select = 1;
      seg_select = 0;
      SEGPORT = 0xff;
      bit_select = 1;
      bit_select = 0;
//顯示
      SEGPORT = TempData[i];
      seg_select = 1;
      seg_select = 0;
      SEGPORT = weima[i];
      bit_select = 1;
      bit_select = 0;
        i++;
      if(8 == i)//只有8位
        {
                i = 0;
    }  
}
void time0_init(void)//定時(shí)器0初始化
{
      EA = 1;                             
      TMOD |= 0x01;                        
//一次定時(shí)20ms
      TH0 = (65536 - 20000) / 256;
      TL0 = (65536 - 20000) % 256;        
      ET0 = 1;                    
      TR0 = 1;
}
//定時(shí)器0中斷
void timer0_isr() interrupt 1
{
      static unsigned char i = 0;
          TH0 = (65536 - 20000) / 256;
      TL0 = (65536 - 20000) % 256;    
      i++;  
        if(50 == i) //1s
        {
                i = 0;
                miao++;
                if(60 == miao)
                {
                        miao = 0;
                        fen++;
                        if(60 == fen)
                        {
                            fen = 0;
                                shi++;
                                if(24 == shi)
                                {
                                        shi = 0;
                                }
                        }
                    }
        }

        TempData[0] = duanma[shi / 10];
        TempData[1] = duanma[shi % 10];
        TempData[2] = 0x40;
        TempData[3] = duanma[fen / 10];
        TempData[4] = duanma[fen % 10];
        TempData[5] = 0x40;
        TempData[6] = duanma[miao / 10];
        TempData[7] = duanma[miao % 10];

}

 
//定時(shí)器1初始化
void time1_init(void)
{

          EA = 1;
      TMOD |= 0x10;
      TH1 = (65536 - 20000) / 256;
      TL1 = (65536 - 20000) % 256;
      ET1 = 1;
      TR1 = 1;
}
void time1_isr() interrupt 3
{
          TH1 = (65536 - 1000) / 256;
      TL1 = (65536 - 1000) % 256;     
      display();
} 
void main()

{
     time0_init();
     time1_init();
     while(1)
     {
           }
}

?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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