找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机代码 为什么按第三次K1的时候没有反应?

[复制链接]
回帖奖励 5 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:1062897 发表于 2023-4-22 12:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大哥们,帮看下这段代码,为什么按第三次K1的时候没有反应,明明和前两次是一样的代码,是按键这里的问题吗
void key_baihei_scan()
{
        if(!K1)  //如果检测到低电平,说明按键按下
    {
            Delayms(10); //延时去抖,一般10-20ms
        if(!K1)     //再次确认按键是否按下,没有按下则退出
            {
                while(!K1)//如果确认按下按键等待按键释放,没有则退出
                    {
                                    
                            Delayus(50);        
                                      
                          }
                        moshi = moshi+1;
                        if(moshi == 1) //静态动画模式
                        {        
                                shuzhi=shuzhi+1;                     
                        }
                        if(moshi == 2) //静态动画模式
                        {        
                                shuzhi=shuzhi+1;                     
                        }
                        if(moshi == 3) //静态动画模式
                        {        
                                shuzhi=shuzhi+3;                     
                        }

                        
                }
        }
}
void shuchu()
{
                if(K1)
                {        
                        if(shuzhi==1)
                        {
                        for(layer=0;layer<8;layer++)
                        {
                        lie(~shuzua[layer*8+1],~shuzua[layer*8+3],~shuzua[layer*8+5],~shuzua[layer*8+7]);
                        lie(~shuzua[layer*8+0],~shuzua[layer*8+2],~shuzua[layer*8+4],~shuzua[layer*8+6]);

                        RCLK=0;                        //模拟锁存信号端口      
                        nop_();
                        RCLK=1;        
                        hansao(7-layer);                     
                        Delayus(10);                        
                 }
                }
                        if(shuzhi==2)
                        {
                        for(layer=0;layer<8;layer++)
                        {
                        lie(~shuzub[layer*8+1],~shuzub[layer*8+3],~shuzub[layer*8+5],~shuzub[layer*8+7]);
                        lie(~shuzub[layer*8+0],~shuzub[layer*8+2],~shuzub[layer*8+4],~shuzub[layer*8+6]);

                        RCLK=0;                        //模拟锁存信号端口      
                        nop_();
                        RCLK=1;        
                        hansao(7-layer);                     
                        Delayus(10);                        
                 }
                }
                        if(shuzhi==3)
                        {
                        for(layer=0;layer<8;layer++)
                        {
                        lie(~shuzuc[layer*8+1],~shuzuc[layer*8+3],~shuzuc[layer*8+5],~shuzuc[layer*8+7]);
                        lie(~shuzuc[layer*8+0],~shuzuc[layer*8+2],~shuzuc[layer*8+4],~shuzuc[layer*8+6]);

                        RCLK=0;                        //模拟锁存信号端口      
                        nop_();
                        RCLK=1;        
                        hansao(7-layer);                     
                        Delayus(10);                        
                 }
                }
               
                }
}        
        
void main()
{
        while(1)
        {key_baihei_scan();
                shuchu();

        }
}


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

使用道具 举报

沙发
ID:69038 发表于 2023-4-22 15:23 | 只看该作者
moshi 的赋值范围是多少?0-3吗?那就moshi ++; moshi =moshi %4;
另外moshi =0是什么情况?
回复

使用道具 举报

板凳
ID:213173 发表于 2023-4-22 16:09 | 只看该作者
void key_baihei_scan()
{
        if(!K1)  //如果检测到低电平,说明按键按下
        {
                Delayms(10); //延时去抖,一般10-20ms
                if(!K1)     //再次确认按键是否按下,没有按下则退出
                {
                        while(!K1);//如果确认按下按键等待按键释放,没有则退出
                        moshi++;
                        if(moshi>3)
                        {        
                                shuzhi=0;
                        }
                        if(moshi == 0)
                        {        
                                //
                        }
                        if(moshi == 1) //静态动画模式
                        {        
                                shuzhi=shuzhi+1;
                        }
                        if(moshi == 2) //静态动画模式
                        {        
                                shuzhi=shuzhi+1;                     
                        }
                        if(moshi == 3) //静态动画模式
                        {        
                                shuzhi=shuzhi+3;                     
                        }
                }
        }
}
回复

使用道具 举报

地板
ID:1073411 发表于 2023-4-22 18:04 | 只看该作者
程序需要在按下三次按键后对moshi初始化,否则三次按键后这个程序没有反应。                     if(moshi == 2) //静态动画模式                         {                                         shuzhi=shuzhi+2;                                              }                         if(moshi == 3) //静态动画模式                         {                                         shuzhi=shuzhi+3;                                              }其每次响应按键后需要加shuzhi==0;或改为         if(moshi == 2) //静态动画模式                         {                                         shuzhi=shuzhi+2;                                              }                         if(moshi == 3) //静态动画模式                         {                                         shuzhi=shuzhi+1;                                              },三次按键响应后初始化shuzhi==0
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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