找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1624|回复: 16
收起左侧

求助 两个判断,需要一直检测,不用定时器可以实现吗?

[复制链接]
ID:595380 发表于 2020-11-6 17:37 | 显示全部楼层 |阅读模式
该怎么写程序?想实现按下开/关按钮后,之后进行一直判断加减速按钮的检测。谢啦!



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

使用道具 举报

ID:466505 发表于 2020-11-6 18:50 | 显示全部楼层
用中断呗
回复

使用道具 举报

ID:595380 发表于 2020-11-6 20:34 | 显示全部楼层

51 中的 两个中断已被占用
回复

使用道具 举报

ID:68468 发表于 2020-11-6 20:40 | 显示全部楼层
很简单呀,把加减速按钮检测放在主函数中不就一直检测吗?
回复

使用道具 举报

ID:654028 发表于 2020-11-6 20:49 | 显示全部楼层
delay延时,死等
回复

使用道具 举报

ID:548551 发表于 2020-11-7 13:46 | 显示全部楼层
51_users 发表于 2020-11-6 20:34
51 中的 两个中断已被占用

来来来 ,你告诉我中断被什么用了? 其他的都不能用中断?
回复

使用道具 举报

ID:836364 发表于 2020-11-8 00:15 | 显示全部楼层
用查询的办法,用if语句判断B0和B1的状态while(1){if(b0 > 0)......,if(b1>0)....}
回复

使用道具 举报

ID:836364 发表于 2020-11-8 00:15 | 显示全部楼层
但是查询的办法有点不好,会特别耗费单片机的系统内部资源
回复

使用道具 举报

ID:836364 发表于 2020-11-8 00:16 | 显示全部楼层
还是用中断的办法好,毕竟单片机有5个中断源呢
回复

使用道具 举报

ID:420836 发表于 2020-11-8 09:24 | 显示全部楼层
使用按键扫描中断
回复

使用道具 举报

ID:278179 发表于 2020-11-8 10:48 | 显示全部楼层
if(bt0){}
回复

使用道具 举报

ID:278179 发表于 2020-11-8 10:51 | 显示全部楼层
if(bt0){}//开关
else if(b0){ }//加速
else if(b1){ }//减速
回复

使用道具 举报

ID:840485 发表于 2020-11-8 10:52 | 显示全部楼层
按键扫描中断  我也是这个建议
回复

使用道具 举报

ID:595380 发表于 2020-11-8 11:09 | 显示全部楼层
xqleft 发表于 2020-11-7 13:46
来来来 ,你告诉我中断被什么用了? 其他的都不能用中断?

串口通信与PWM
回复

使用道具 举报

ID:595380 发表于 2020-11-8 11:10 | 显示全部楼层
123456czst 发表于 2020-11-8 00:16
还是用中断的办法好,毕竟单片机有5个中断源呢

两个定时器给了串口与PWM
回复

使用道具 举报

ID:595380 发表于 2020-11-8 11:13 | 显示全部楼层
shiwowo 发表于 2020-11-8 10:52
按键扫描中断  我也是这个建议

嗯嗯  嗯嗯
回复

使用道具 举报

ID:213173 发表于 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();
//                其它任务;
        }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表