熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2020-11-6 17:37
正文摘要:該怎么寫程序?想實(shí)現(xiàn)按下開/關(guān)按鈕后,之后進(jìn)行一直判斷加減速按鈕的檢測(cè)。謝啦! |
|
除了搶答器之類要求按鍵及時(shí)響應(yīng)外,其它按鍵控制電路沒有這么高要求,20ms響應(yīng)根本感覺不出來(lái)。所以按鍵掃描程序放在主循環(huán)中不會(huì)有什么問題。給你寫個(gè)示例,基本邏輯關(guān)系一看就明白。 #include <reg51.H> #define uchar unsigned char #define uint unsigned int sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; uchar PWM=0; void key_scan() { static uchar count=0; static bit key_sign=0; static bit flag=0; if(!key1||!key2||!key3) { if(++count>=10 && key_sign==0)//消抖 { key_sign=1; if(!key1) //開關(guān) { flag=~flag; if(flag==1) PWM=50; //初速 else PWM=0; //停止 } if(!key2 && flag==1)//加速 { if(PWM<100) PWM++; } if(!key3 && flag==1)//減速 { if(PWM>10) PWM--; } } } else { count=1; key_sign=0; } } void main() { while(1) { key_scan(); // 其它任務(wù); } } |
shiwowo 發(fā)表于 2020-11-8 10:52 嗯嗯 嗯嗯 |
123456czst 發(fā)表于 2020-11-8 00:16 兩個(gè)定時(shí)器給了串口與PWM |
xqleft 發(fā)表于 2020-11-7 13:46 串口通信與PWM |
|
按鍵掃描中斷 我也是這個(gè)建議 |
|
if(bt0){}//開關(guān) else if(b0){ }//加速 else if(b1){ }//減速 |
| if(bt0){} |
| 使用按鍵掃描中斷 |
| 還是用中斷的辦法好,畢竟單片機(jī)有5個(gè)中斷源呢 |
| 但是查詢的辦法有點(diǎn)不好,會(huì)特別耗費(fèi)單片機(jī)的系統(tǒng)內(nèi)部資源 |
| 用查詢的辦法,用if語(yǔ)句判斷B0和B1的狀態(tài)while(1){if(b0 > 0)......,if(b1>0)....} |
51_users 發(fā)表于 2020-11-6 20:34 來(lái)來(lái)來(lái) ,你告訴我中斷被什么用了? 其他的都不能用中斷? |
| delay延時(shí),死等 |
| 很簡(jiǎn)單呀,把加減速按鈕檢測(cè)放在主函數(shù)中不就一直檢測(cè)嗎? |
|
51 中的 兩個(gè)中斷已被占用 |
| 用中斷唄 |
Powered by 單片機(jī)教程網(wǎng)