找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1435|回復(fù): 3
收起左側(cè)

單片機代碼 為什么按第三次K1的時候沒有反應(yīng)?

[復(fù)制鏈接]
回帖獎勵 5 黑幣 回復(fù)本帖可獲得 5 黑幣獎勵! 每人限 1 次
ID:1062897 發(fā)表于 2023-4-22 12:06 | 顯示全部樓層 |閱讀模式
大哥們,幫看下這段代碼,為什么按第三次K1的時候沒有反應(yīng),明明和前兩次是一樣的代碼,是按鍵這里的問題嗎
void key_baihei_scan()
{
        if(!K1)  //如果檢測到低電平,說明按鍵按下
    {
            Delayms(10); //延時去抖,一般10-20ms
        if(!K1)     //再次確認(rèn)按鍵是否按下,沒有按下則退出
            {
                while(!K1)//如果確認(rèn)按下按鍵等待按鍵釋放,沒有則退出
                    {
                                    
                            Delayus(50);        
                                      
                          }
                        moshi = moshi+1;
                        if(moshi == 1) //靜態(tài)動畫模式
                        {        
                                shuzhi=shuzhi+1;                     
                        }
                        if(moshi == 2) //靜態(tài)動畫模式
                        {        
                                shuzhi=shuzhi+1;                     
                        }
                        if(moshi == 3) //靜態(tài)動畫模式
                        {        
                                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();

        }
}


回復(fù)

使用道具 舉報

ID:69038 發(fā)表于 2023-4-22 15:23 | 顯示全部樓層
moshi 的賦值范圍是多少?0-3嗎?那就moshi ++; moshi =moshi %4;
另外moshi =0是什么情況?
回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2023-4-22 16:09 | 顯示全部樓層
void key_baihei_scan()
{
        if(!K1)  //如果檢測到低電平,說明按鍵按下
        {
                Delayms(10); //延時去抖,一般10-20ms
                if(!K1)     //再次確認(rèn)按鍵是否按下,沒有按下則退出
                {
                        while(!K1);//如果確認(rèn)按下按鍵等待按鍵釋放,沒有則退出
                        moshi++;
                        if(moshi>3)
                        {        
                                shuzhi=0;
                        }
                        if(moshi == 0)
                        {        
                                //
                        }
                        if(moshi == 1) //靜態(tài)動畫模式
                        {        
                                shuzhi=shuzhi+1;
                        }
                        if(moshi == 2) //靜態(tài)動畫模式
                        {        
                                shuzhi=shuzhi+1;                     
                        }
                        if(moshi == 3) //靜態(tài)動畫模式
                        {        
                                shuzhi=shuzhi+3;                     
                        }
                }
        }
}
回復(fù)

使用道具 舉報

ID:1073411 發(fā)表于 2023-4-22 18:04 | 顯示全部樓層
程序需要在按下三次按鍵后對moshi初始化,否則三次按鍵后這個程序沒有反應(yīng)。                     if(moshi == 2) //靜態(tài)動畫模式                         {                                         shuzhi=shuzhi+2;                                              }                         if(moshi == 3) //靜態(tài)動畫模式                         {                                         shuzhi=shuzhi+3;                                              }其每次響應(yīng)按鍵后需要加shuzhi==0;或改為         if(moshi == 2) //靜態(tài)動畫模式                         {                                         shuzhi=shuzhi+2;                                              }                         if(moshi == 3) //靜態(tài)動畫模式                         {                                         shuzhi=shuzhi+1;                                              },三次按鍵響應(yīng)后初始化shuzhi==0
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表