除了抢答器之类要求按键及时响应外,其它按键控制电路没有这么高要求,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 中的 两个中断已被占用 |
用中断呗 |