标题: 求助 两个判断,需要一直检测,不用定时器可以实现吗? [打印本页]

作者: 51_users    时间: 2020-11-6 17:37
标题: 求助 两个判断,需要一直检测,不用定时器可以实现吗?
该怎么写程序?想实现按下开/关按钮后,之后进行一直判断加减速按钮的检测。谢啦!



%0P37X2DER29]ZYHQ%8O$LI.png (4.68 KB, 下载次数: 60)

%0P37X2DER29]ZYHQ%8O$LI.png

作者: hcfat51h    时间: 2020-11-6 18:50
用中断呗
作者: 51_users    时间: 2020-11-6 20:34
hcfat51h 发表于 2020-11-6 18:50
用中断呗

51 中的 两个中断已被占用
作者: wysh_2004    时间: 2020-11-6 20:40
很简单呀,把加减速按钮检测放在主函数中不就一直检测吗?
作者: 心有浮生    时间: 2020-11-6 20:49
delay延时,死等
作者: xqleft    时间: 2020-11-7 13:46
51_users 发表于 2020-11-6 20:34
51 中的 两个中断已被占用

来来来 ,你告诉我中断被什么用了? 其他的都不能用中断?
作者: 123456czst    时间: 2020-11-8 00:15
用查询的办法,用if语句判断B0和B1的状态while(1){if(b0 > 0)......,if(b1>0)....}
作者: 123456czst    时间: 2020-11-8 00:15
但是查询的办法有点不好,会特别耗费单片机的系统内部资源
作者: 123456czst    时间: 2020-11-8 00:16
还是用中断的办法好,毕竟单片机有5个中断源呢
作者: TTQ001    时间: 2020-11-8 09:24
使用按键扫描中断
作者: huwqly    时间: 2020-11-8 10:48
if(bt0){}
作者: huwqly    时间: 2020-11-8 10:51
if(bt0){}//开关
else if(b0){ }//加速
else if(b1){ }//减速
作者: shiwowo    时间: 2020-11-8 10:52
按键扫描中断  我也是这个建议

作者: 51_users    时间: 2020-11-8 11:09
xqleft 发表于 2020-11-7 13:46
来来来 ,你告诉我中断被什么用了? 其他的都不能用中断?

串口通信与PWM
作者: 51_users    时间: 2020-11-8 11:10
123456czst 发表于 2020-11-8 00:16
还是用中断的办法好,毕竟单片机有5个中断源呢

两个定时器给了串口与PWM
作者: 51_users    时间: 2020-11-8 11:13
shiwowo 发表于 2020-11-8 10:52
按键扫描中断  我也是这个建议

嗯嗯  嗯嗯
作者: wulin    时间: 2020-11-8 13:04
除了抢答器之类要求按键及时响应外,其它按键控制电路没有这么高要求,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();
//                其它任务;
        }
}





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1