找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机双开关控制流水灯程序问题

[复制链接]
跳转到指定楼层
楼主
ID:956872 发表于 2021-8-7 11:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
key1 按下的时候 灯还受key控制,导致key1没反应。该怎么修改。
void main()
{
        
        while(!key||!key1)
        {
                if(key==1){delayxms(10);if(key==1)A();while(1){if(key!=1)break;}}//顺时针依次点亮且按键没变化时维持长亮
                if(key==0){delayxms(10);if(key==0)B();while(1){if(key!=0)break;}}//顺时针依次熄灭且按键没变化时维持长灭
        
               
                if(key1==1){delayxms(10);if(key1==1)C();while(1){if(key1!=1)break;}}//逆时针依次点亮且按键没变化时维持长亮
                if(key1==0){delayxms(10);if(key1==0)D();while(1){if(key1!=0)break;}}//逆时针依次熄灭且按键没变化时维持长灭
        }
               
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2021-8-7 23:34 | 只看该作者
不要在大循環內用while(1)


  1. bit Key_O, Key1_O;
  2. void main()
  3. {
  4.     while(1)
  5.     {
  6.         if(key==1 && !Key_O) //上升沿触发
  7.                                 {
  8.             delayxms(10);    //顺时针依次点亮且按键没变化时维持长亮
  9.             if(key==1)A();
  10.         }
  11.         if(key==0 && Key_O) //下降沿触发
复制代码



回复

使用道具 举报

板凳
ID:213173 发表于 2021-8-8 07:36 | 只看该作者
本帖最后由 wulin 于 2021-8-8 14:52 编辑

验证过的旋转编码器示例代码。
#include <reg51.H>
#include <intrins.h>

sbit key_A=P3^0;
sbit key_B=P3^1;

void main()
{
        bit sign_A=0,sign_B=0;//状态标志
        P1=0xfe;
        while(1)
        {
                if(key_A && key_B && !sign_A)
                {
                        P1=_cror_(P1,1);
                }
                sign_A = key_A;               

                if(key_A && key_B && !sign_B)
                {
                        P1=_crol_(P1,1);
                }
                sign_B = key_B;
        }
}
回复

使用道具 举报

地板
ID:956872 发表于 2021-8-8 11:12 | 只看该作者
lkc8210 发表于 2021-8-7 23:34
不要在大循環內用while(1)

因为流水灯P1P2口共16个,用的数组,用while(1)是想让其保持长亮 或长灭。刚玩单片机,还不懂其它方法
回复

使用道具 举报

5#
ID:956872 发表于 2021-8-8 11:14 | 只看该作者
wulin 发表于 2021-8-8 07:36
前面回帖有误,重发经验证过的旋转编码器示例代码。
#include
#include

sign_A = key_A; 这句定义是什么?
回复

使用道具 举报

6#
ID:213173 发表于 2021-8-8 18:10 | 只看该作者
PEB188 发表于 2021-8-8 11:14
sign_A = key_A; 这句定义是什么?

保存当前 key_A 值
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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