電子產業(yè)一站式賦能平臺

PCB聯盟網

搜索
查看: 2424|回復: 0
收起左側

單片機C語言實例-331-數碼秒表設計

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2022-3-29 10:12:29 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機C語言實例-331-數碼秒表設計

//實例65:數碼秒表設計
#include<reg51.h>  //  包含51單片機寄存器定義的頭文件
unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//數碼管顯示0~9的段碼表
unsigned char int_time;        //記錄中斷次數
unsigned char second;        //儲存秒
/***********************************************************************
函數功能:快速動態(tài)掃描延時,延時約0.6毫秒
************************************************************************/
void delay(void)
{
  unsigned char i;
  for(i=0;i<200;i++)
        ;
}
/***********************************************************************
函數功能:顯示秒
入口參數:k
出口參數:無
************************************************************************/
void DisplaySecond(unsigned char k)
{

   P2=0xfb;        //P2.6引腳輸出低電平, DS6點亮
   P0=Tab[k/10];          //顯示十位
   delay();

   P2=0xf7;       //P2.7引腳輸出低電平, DS7點亮
   P0=Tab[k%10];         //顯示個位
        delay();
        P2=0xff;     //關閉所有數碼管



}
  void main(void)      //主函數
   {
          TMOD=0x01;                 //使用定時器T0
          TH0=(65536-46083)/256;    //將定時器計時時間設定為46083×1.085微秒
//=50000微秒=50毫秒
           TL0=(65536-46083)%256;
                EA=1;                    //開啟總中斷
                ET0=1;                   //定時器T0中斷允許
                TR0=1;                   //啟動定時器T0開始運行
                int_time=0;     //中斷次數初始化
                second=0;           //秒初始化               
        while(1)
                {
               DisplaySecond(second);        //調用秒的顯示子程序
                 }
    }  
//********************************************************
//函數功能:定時器T0的中斷服務程序
//*******************************************************
  void interserve(void ) interrupt 1 using 1  
  {
    TR0=0;    //關閉定時器T0
    int_time ++;        //每來一次中斷,中斷次數int_time自加1       
         if(int_time==20)   //夠20次中斷,即1秒鐘進行一次檢測結果采樣
          {
        int_time=0;    //中斷次數清0
            second++;    //秒加1
            if(second==60)
              second =0; //秒等于60就返回0
          }                     
          TH0=(65536-46083)/256;   //重新給計數器T0賦初值
        TL0=(65536-46083)%256;
        TR0=1;     //啟動定時器T0
}  

更多詳情參考附件文檔


游客,如果您要查看本帖隱藏內容請回復

回復

使用道具 舉報

發(fā)表回復

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

本版積分規(guī)則

關閉

站長推薦上一條 /1 下一條


聯系客服 關注微信 下載APP 返回頂部 返回列表