找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1587|回复: 16
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
该怎么写程序?想实现按下开/关按钮后,之后进行一直判断加减速按钮的检测。谢啦!



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

%0P37X2DER29]ZYHQ%8O$LI.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:466505 发表于 2020-11-6 18:50 | 只看该作者
用中断呗
回复

使用道具 举报

板凳
ID:595380 发表于 2020-11-6 20:34 | 只看该作者

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

使用道具 举报

地板
ID:68468 发表于 2020-11-6 20:40 | 只看该作者
很简单呀,把加减速按钮检测放在主函数中不就一直检测吗?
回复

使用道具 举报

5#
ID:654028 发表于 2020-11-6 20:49 | 只看该作者
delay延时,死等
回复

使用道具 举报

6#
ID:548551 发表于 2020-11-7 13:46 | 只看该作者
51_users 发表于 2020-11-6 20:34
51 中的 两个中断已被占用

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

使用道具 举报

7#
ID:836364 发表于 2020-11-8 00:15 | 只看该作者
用查询的办法,用if语句判断B0和B1的状态while(1){if(b0 > 0)......,if(b1>0)....}
回复

使用道具 举报

8#
ID:836364 发表于 2020-11-8 00:15 | 只看该作者
但是查询的办法有点不好,会特别耗费单片机的系统内部资源
回复

使用道具 举报

9#
ID:836364 发表于 2020-11-8 00:16 | 只看该作者
还是用中断的办法好,毕竟单片机有5个中断源呢
回复

使用道具 举报

10#
ID:420836 发表于 2020-11-8 09:24 | 只看该作者
使用按键扫描中断
回复

使用道具 举报

11#
ID:278179 发表于 2020-11-8 10:48 | 只看该作者
if(bt0){}
回复

使用道具 举报

12#
ID:278179 发表于 2020-11-8 10:51 | 只看该作者
if(bt0){}//开关
else if(b0){ }//加速
else if(b1){ }//减速
回复

使用道具 举报

13#
ID:840485 发表于 2020-11-8 10:52 | 只看该作者
按键扫描中断  我也是这个建议
回复

使用道具 举报

14#
ID:595380 发表于 2020-11-8 11:09 | 只看该作者
xqleft 发表于 2020-11-7 13:46
来来来 ,你告诉我中断被什么用了? 其他的都不能用中断?

串口通信与PWM
回复

使用道具 举报

15#
ID:595380 发表于 2020-11-8 11:10 | 只看该作者
123456czst 发表于 2020-11-8 00:16
还是用中断的办法好,毕竟单片机有5个中断源呢

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

使用道具 举报

16#
ID:595380 发表于 2020-11-8 11:13 | 只看该作者
shiwowo 发表于 2020-11-8 10:52
按键扫描中断  我也是这个建议

嗯嗯  嗯嗯
回复

使用道具 举报

17#
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 单片机教程网

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