![]() |
除了搶答器之類要求按鍵及時響應外,其它按鍵控制電路沒有這么高要求,20ms響應根本感覺不出來。所以按鍵掃描程序放在主循環中不會有什么問題。給你寫個示例,基本邏輯關系一看就明白。 #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) //開關 { 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(); // 其它任務; } } |
shiwowo 發表于 2020-11-8 10:52 嗯嗯 嗯嗯 |
123456czst 發表于 2020-11-8 00:16 兩個定時器給了串口與PWM |
xqleft 發表于 2020-11-7 13:46 串口通信與PWM |
按鍵掃描中斷 我也是這個建議 |
if(bt0){}//開關 else if(b0){ }//加速 else if(b1){ }//減速 |
if(bt0){} |
使用按鍵掃描中斷 |
還是用中斷的辦法好,畢竟單片機有5個中斷源呢 |
但是查詢的辦法有點不好,會特別耗費單片機的系統內部資源 |
用查詢的辦法,用if語句判斷B0和B1的狀態while(1){if(b0 > 0)......,if(b1>0)....} |
51_users 發表于 2020-11-6 20:34 來來來 ,你告訴我中斷被什么用了? 其他的都不能用中斷? |
delay延時,死等 |
很簡單呀,把加減速按鈕檢測放在主函數中不就一直檢測嗎? |
51 中的 兩個中斷已被占用 |
用中斷唄 |