電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 1893|回復(fù): 0
收起左側(cè)

單片機(jī)C語(yǔ)言實(shí)例-332-數(shù)碼時(shí)鐘設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2022-3-29 10:14:51 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)C語(yǔ)言實(shí)例-332-數(shù)碼時(shí)鐘設(shè)計(jì)

//實(shí)例66:數(shù)碼時(shí)鐘設(shè)計(jì)
#include<reg51.h>    //  包含51單片機(jī)寄存器定義的頭文件
unsigned char Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //control  shape
unsigned char port[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char int_time ; //中斷次數(shù)計(jì)數(shù)變量
unsigned char second;    //秒計(jì)數(shù)變量
unsigned char minute;    //分鐘計(jì)數(shù)變量
unsigned char hour;     //小時(shí)計(jì)數(shù)變量

/////////////////////////////////////////////////////

void delay(void)      //延時(shí)函數(shù),延時(shí)約0.6ms
{
   unsigned char j;
        for(j=0;j<200;j++)
         ;
  }

/******************************************************************
函數(shù)功能:顯示秒的子程序
入口參數(shù):s
********************************************************************/
void DisplaySecond(unsigned char s)
{
   P2=0xbf;        //P2.6引腳輸出低電平, DS6點(diǎn)亮
   P0=Tab[s/10];          //顯示十位
   delay();

   P2=0x7f;       //P2.7引腳輸出低電平, DS7點(diǎn)亮
   P0=Tab[s%10];         //顯示個(gè)位
        delay();
        P2=0xff;     //關(guān)閉所有數(shù)碼管

}

/******************************************************************
函數(shù)功能:顯示分鐘的子程序
入口參數(shù):m
********************************************************************/
void DisplayMinute(unsigned char m)
{
     P2=0xf7;   // P2.3引腳輸出低電平, DS3點(diǎn)亮
     P0=Tab[m/10];//顯示個(gè)位
          delay();
          P2=0xef;   // P2.4引腳輸出低電平, DS4點(diǎn)亮
          P0=Tab[m%10];
          delay();
          P2=0xdf;   //P2.5引腳輸出低電平, DS5點(diǎn)亮
          P0=0xbf;   //分隔符“-”的段碼
          delay();
          P2=0xff;   //關(guān)閉所有數(shù)碼管



}
/******************************************************************
函數(shù)功能:顯示小時(shí)的子程序
入口參數(shù):h
********************************************************************/
void DisplayHour(unsigned char h)
{

   P2=0xfe;        //P2.0引腳輸出低電平, DS0點(diǎn)亮
   P0=Tab[h/10];          //顯示十位
   delay();

   P2=0xfd;       //P2.1引腳輸出低電平, DS1點(diǎn)亮
   P0=Tab[h%10];    //顯示個(gè)位
        delay();   
        P2=0xfb;     //P2.2引腳輸出低電平, DS2點(diǎn)亮
        P0=0xbf;     //分隔符“-”的段碼
        delay();
   P2=0xff;     //關(guān)閉所有數(shù)碼管

}
/******************************************************************
函數(shù)功能:主函數(shù)
********************************************************************/

void main(void)
   {
                   
                        TMOD=0x01;             //使用定時(shí)器T0               
                        EA=1;                  //開中斷總允許
                        ET0=1;                 //允許T0中斷
                        TH0=(65536-46083)/256;  //定時(shí)器高八位賦初值
                        TL0=(65536-46083)%256;  //定時(shí)器低八位賦初值
                        TR0=1;
                        int_time=0;    //中斷計(jì)數(shù)變量初始化
                        second=0;      //秒計(jì)數(shù)變量初始化
                        minute=0;     //分鐘計(jì)數(shù)變量初始化
                        hour=0;       //小時(shí)計(jì)數(shù)變量初始化

         while(1)
                        {             
                                          DisplaySecond(second);    //調(diào)用秒顯示子程序
                                         delay();
                                         DisplayMinute(minute);   //調(diào)用分鐘顯示子程序
                                         delay();
                                          DisplayHour(hour);     
                                         delay();                                                                 
                   }
  }

/******************************************************************
函數(shù)功能:定時(shí)器T0的中斷服務(wù)子程序
********************************************************************/
  void interserve(void ) interrupt 1 using 1  //using Time0
  {
       int_time++;
                 if(int_time==20)
                   {
              int_time=0;    //中斷計(jì)數(shù)變量清0
                        second++;      //秒計(jì)數(shù)變量加1
                        }
                          if(second==60)
                                 {
                                          second=0;    //如果秒計(jì)滿60,將秒計(jì)數(shù)變量清0
                                          minute++;    //分鐘計(jì)數(shù)變量加1
                                 }
                                         if(minute==60)
                                           {
                                                   minute=0;    //如果分鐘計(jì)滿60,將分鐘計(jì)數(shù)變量清0
                                                   hour++;      //小時(shí)計(jì)數(shù)變量加1
                                                }
                                                  if(hour==24)
                                                    {
                                                           hour=0;    //如果小時(shí)計(jì)滿24,將小時(shí)計(jì)數(shù)變量清0
                                                         }

                   TH0=(65536-46083)/256;   //定時(shí)器重新賦初值
                        TL0=(65536-46083)%256;
                                                     
               
  }  


更多詳情參考附件文檔

游客,如果您要查看本帖隱藏內(nèi)容請(qǐng)回復(fù)

發(fā)表回復(fù)

本版積分規(guī)則

關(guān)閉

站長(zhǎng)推薦上一條 /1 下一條


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表