- //實例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; //儲存秒
- /***********************************************************************
- 函數功能:快速動態掃描延時,延時約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
- }
- //實例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; //儲存秒
- /***********************************************************************
- 函數功能:快速動態掃描延時,延時約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
- }
復制代碼 51單片機數碼秒表設計。
|