|
|
給51黑電子論壇的朋友們分享一個(gè)51單片機(jī)做的電子秒表程序,帶開始和停止和清除3個(gè)按鍵,可以實(shí)現(xiàn)0.01S~59分的計(jì)時(shí)。下面是該電子秒表的仿真原理圖:
0.png (25.08 KB, 下載次數(shù): 91)
下載附件
2017-3-18 03:57 上傳
單片機(jī)秒表主程序:
- /****************************************************
- *實(shí)例名稱:秒表
- *實(shí)例說(shuō)明:本實(shí)例實(shí)現(xiàn)0.01S~59分的計(jì)時(shí)。按下Start鍵時(shí)
- 開始計(jì)數(shù),此時(shí)按下Stop鍵時(shí)停止計(jì)時(shí),按下Clear鍵時(shí)清零
- 顯示屏。Start鍵和Stop鍵分別通過(guò)外部中斷0和外部中斷1來(lái)
- 實(shí)現(xiàn)操作
- *作者:kxm
- *時(shí)間:09.06.13
- ****************************************************/
- #include "target.h"
- #include "led.h"
- /*時(shí)鐘顯示數(shù)字區(qū),從左至右為:分高位,分低位;秒高位,秒低位;毫秒高位,毫秒低位*/
- uchar clock_time[8]={'0','0',0x01,'0','0',0x01,'0','0'};
- const uchar displayMode=0x24;
- void main()
- {
- uchar i;
- target_init();
- led_init();
- sei();
- while(1)
- {
- if(CLEAR_KEY==0)
- {
- for(i=0;i<200;i++);
- if(CLEAR_KEY==0)
- {
- clock_time[MS_H]='0';
- clock_time[MS_L]='0';
- clock_time[S_H]='0';
- clock_time[S_L]='0';
- clock_time[MIN_H]='0';
- clock_time[MIN_L]='0';
- }
- }
- ledSweepDisplay(clock_time,displayMode,0x08);
- }
- }
- void T0_OverFlow(void) interrupt 1 //定時(shí)器0溢出中斷,延時(shí)10ms
- {
- TH0=0xDC;
- TL0=0x00;
- if(clock_time[MS_L]<'9')
- clock_time[MS_L]++;
- else
- {
- clock_time[MS_L]='0';
- if(clock_time[MS_H]<'9')
- clock_time[MS_H]++;
- else
- {
- clock_time[MS_H]='0';
- ms_to_s(clock_time);
- }
- }
- }
- void StartInt(void) interrupt 0 //啟動(dòng)按鍵通過(guò)外部中斷0
- {
- TR0=1;
- }
- void StopInt(void) interrupt 2 //停止按鍵通過(guò)外部中斷1
- {
- TR0=0;
- }
復(fù)制代碼
電子秒表的target.c源碼:
- #define TARGET_GLOBAL 1
- #include "target.h"
- /****************************************
- *函數(shù)名稱:target_init(void)
- *函數(shù)功能:包含本文件中初始化函數(shù)和變量
- *函數(shù)入口:無(wú)
- *函數(shù)出口:無(wú)
- ****************************************/
- void target_init(void)
- {
- timer0_init(); //timer0初始化
- int0_init(); //外部中斷0初始化
- int1_init(); //外部中斷1初始化
- }
- /****************************************
- *函數(shù)名稱:timer0_init(void)
- *函數(shù)功能: 定時(shí)器0初始化,11.0592Mhz晶振,
- 定時(shí)10ms
- *函數(shù)入口:無(wú)
- *函數(shù)出口:無(wú)
- *****************************************/
- void timer0_init(void)
- {
- TMOD|=0x01; //MODEL1,timer
- TH0=0xDC; //定時(shí)10ms
- TL0=0x00;
- ET0=1; //中斷使能
- TR0=0; //關(guān)閉定時(shí)器0
- }
- /****************************************
- *函數(shù)名稱:int0_init(void)
- *函數(shù)功能: 外部中斷0中斷初始化
- *函數(shù)入口:無(wú)
- *函數(shù)出口:無(wú)
- *****************************************/
- void int0_init(void)
- {
- EX0 = 1; //外部中斷0使能
- T0 = 1; //外部中斷0跳變中斷(下降沿跳變)
- }
- /****************************************
- *函數(shù)名稱:int1_init(void)
- *函數(shù)功能: 外部中斷0中斷初始化
- *函數(shù)入口:無(wú)
- *函數(shù)出口:無(wú)
- *****************************************/
- void int1_init(void)
- {
- EX1 = 1; //外部中斷1使能
- IT1 = 1; //外部中斷1跳變中斷(下降沿跳變)
- }
- /*******************************************
- *函數(shù)名稱:ms_to_s(uchar *clockS)
- *函數(shù)功能:實(shí)現(xiàn)毫秒級(jí)向秒級(jí)進(jìn)位
- *函數(shù)入口:*clockS,指向時(shí)間數(shù)組的指針
- *函數(shù)出口:無(wú)
- 說(shuō)明:說(shuō)明:毫秒級(jí)和秒級(jí)計(jì)數(shù)均為兩位BCD碼,
- 毫秒最大值為99,秒最大值為59
- *******************************************/
- void ms_to_s(uchar *clockS)
- {
- if(clockS[S_L]<'9')
- clockS[S_L]++;
- else
- {
- clockS[S_L]='0';
- if(clockS[S_H]<'5')
- clockS[S_H]++;
- else
- {
- clockS[S_H]='0';
- s_to_min(clockS);
- }
- }
- }
- /*******************************************
- *函數(shù)名稱:s_to_min(uchar *clockMin)
- *函數(shù)功能:實(shí)現(xiàn)秒級(jí)向分鐘級(jí)進(jìn)位
- *函數(shù)入口:*clockMin,指向時(shí)間數(shù)組的指針
- *函數(shù)出口:無(wú)
- *說(shuō)明:秒級(jí)和分鐘級(jí)計(jì)數(shù)均為兩位BCD碼,
- 秒最大值59,分最大值99
- *******************************************/
- void s_to_min(uchar *clockMin)
- {
- if(clockMin[MIN_L]<'9')
- clockMin[MIN_L]++;
- else
- {
- clockMin[MIN_L]='0';
- if(clockMin[MIN_H]<'9')
- clockMin[MIN_H]++;
- else
- {
- clockMin[MIN_H]='0';
- }
- }
- }
復(fù)制代碼
0.png (47.5 KB, 下載次數(shù): 126)
下載附件
2017-3-18 03:56 上傳
仿真工程文件和源碼下載:
電子秒表.rar
(15.27 KB, 下載次數(shù): 112)
2017-3-18 03:58 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|