熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2023-9-20 11:53
正文摘要:試著寫了單片機(jī)程序,但不知如何加人啟動(dòng)和停止,定時(shí)器TR0為什么不能被其它函數(shù)調(diào)用呢? |
很簡單,按鍵控制一個(gè)變量,再去判斷是否啟動(dòng)定時(shí),關(guān)定時(shí)后,重按啟動(dòng),清除原來的計(jì)時(shí)值,重啟定時(shí)器,不難 |
此2變量要加關(guān)鍵字static 為靜態(tài)或聲明全局變量,否則會亂套。 void Timer0_Rountiue() interrupt 1 //中斷程序 { static unsigned char tem_ms; static unsigned int tem_s; //1秒 |
/* uint8 time10ms_count = 0; uint8 time1s_count = 0; bit time10ms_flag = 0; bit time1s_flag = 0; 定時(shí)中斷函數(shù) //1ms進(jìn)入一次 { if(++time10ms_count>10) { time10ms_count = 0; time10ms_flag = 1; //10ms標(biāo)志 if(++time1s_count>100) { time1s_count = 0; time1s_flag = 1; //1s標(biāo)志 } } } uint8 key_value = 0; uint8 key_count = 0; bit key_flag = 0; 按鍵判斷函數(shù) //10ms跑一次 { if(!key) { if(key_count<100) { if(++key_count>100) { key_count = 100; key_flag = !key_flag; //長按啟動(dòng) 暫停標(biāo)志 } } } else { if(key_count>2&&key_count<50) //按下時(shí)間大于20ms小于500ms判斷為點(diǎn)擊 { if(++key_value>9) //鍵值加加 key_value = 0; } key_count = 0; } } uint8 time = 0; uint16 time_count = 0; uint8 time_s = 0; 定時(shí)時(shí)間函數(shù) //1s跑一次 { if(key_value==time) { ; } else { time_s = 0; //重新計(jì)時(shí) time = key_value; //賦值定時(shí) } if(time>0) { if(++time_count>3600) { time_count = 0; if(++time_s>=time) { time_s = 0; //定時(shí)時(shí)間到 } } } } void main() { while(1) { if(time10ms_flag) { time10ms_flag = 0; 按鍵判斷函數(shù) ; //10ms跑一次 } if(time1s_flag) { time1s_flag = 0; if(key_flag) //啟動(dòng) 定時(shí)時(shí)間函數(shù) ; //1s跑一次 else //停止 //可以清除定時(shí)之類的 } } } */ |
先畫個(gè)邏輯框圖,理理思路,而后再寫程序。 |
比較啊== >= <= |
Powered by 單片機(jī)教程網(wǎng)