欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機小白誠心向黑友請教幾個程序問題 附程序

[復(fù)制鏈接]
ID:232366 發(fā)表于 2020-12-24 17:47 | 顯示全部樓層 |閱讀模式
誠心向師傅請教幾個問題:程序?qū)崿F(xiàn)的功能是按鍵按一下led樣式切換一個,功能是實現(xiàn)了但是有幾個問題
如下:
1按鍵按下的時候切換時響應(yīng)速度延時較大大概為一秒鐘切換不知道知道這是怎么回事?
2按鍵一直按下的時候如果不加按鍵松開檢測計數(shù)值k會一直  +1 導(dǎo)致led變化變成流水作業(yè)一直循環(huán)如果要加按鍵松開檢測的話要加在哪里呢?
以下為實驗程序歡迎各位師傅來賜教。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define YSHUSL 4         
void delay(uint);
uchar a,b,c,d,e,f,g,k,i;


//*********************************************************************
sbit ANJXZ4=P3^3;
//*************************《按鍵函數(shù)》********************************
void key()
{
        if(ANJXZ4==0)
        {
                delay(2);
                        if(ANJXZ4==0)
                {
                                k++;
                                        if(k>YSHUSL)        
                                                k=1;
                }                                
        }
}
//*******************************************************************************//                          
void main(void)
{        
                i=1;
                k=1;
                a=0x3f;//
                b=0xfc;//
                c=0x3c;//
                d=0xe7;//


                g=0xff;//
                        
        while(i)
                {
                        switch(k)        
                        {
                        case(1):
                                        P2=a;
                                        delay(500);
                                        P2=g;
                                        delay(500);
                                        key();
                                        if(ANJXZ4==0)break;
                                        break;                        
//****************************************************************************//
                        case(2):
                                        P2=b;
                                        delay(500);
                                        P2=0xff;
                                        delay(500);
                                        key();
                                        if(ANJXZ4==0)break;
                                        break;
//***************************************************************************//
                                        case(3):
                                                P2=c;
                                                delay(500);
                                                P2=0xff;
                                                delay(500);
                                                key();
                                                if(ANJXZ4==0)break;
                                                break;
//*******************************************************************************//                        
                                        case(4):
                                                P2=d;
                                                delay(500);
                                                P2=0xff;
                                                delay(500);
                                                key();
                                                if(ANJXZ4==0)break;
                                                break;


//***************************************************************************//
                        }                                                
                }
        }
//********************************************************************//






//**************************《延時子程序》*********************************//                        
void delay(uint xms)
{
        uint k,p;
                for(k=xms;k>0;k--)
                        for(p=114;p>0;p--);


}
//********************************************************************//

相關(guān)帖子

回復(fù)

使用道具 舉報

ID:867238 發(fā)表于 2020-12-24 19:32 來自觸屏版 | 顯示全部樓層
手機不方便寫,具體如圖
IMG_20201224_193052.jpg
IMG_20201224_192808.jpg
回復(fù)

使用道具 舉報

ID:232366 發(fā)表于 2020-12-25 08:53 | 顯示全部樓層
piaoyes 發(fā)表于 2020-12-24 19:32
手機不方便寫,具體如圖

首先非常感謝您在百忙之中抽空來為我問題提供解答看見您在上面按鍵紅色字體解答中小弟有以下不解還請指點迷津!
1:您的意思是按鍵松開檢測放在按鍵確實按下的語句后面    當(dāng)按鍵一直按下時則對按鍵進(jìn)行取反讓while();循環(huán)0被取反為1條件不成立導(dǎo)致程序停在while();里是嗎?
2:按鍵松開后while();循環(huán)判斷條件1被取反為0條件成立而跳出while();循環(huán)  此時則視為按鍵松開?
按鍵松開后跳出循環(huán)執(zhí)行下面語句即:k++;不知道您上面紅色字體意思是不是等按鍵松開后再執(zhí)行k++?還是先判斷k是否溢出后再k++?
3:奇怪了case里面的語句的延時怎么會影響按鍵切換呢?    key();按鍵函數(shù)只是對k就行k+1的操作并不會立即執(zhí)行加完后還是會回到case里面來執(zhí)行第一個break句號前的語句即if(ANJXZ4==0)那么這條語句是只有按鍵按下后才會執(zhí)行第一次退出當(dāng)前執(zhí)行的case  跳出后再遇到break;再跳出到大循環(huán)while里面的的大括號中第一條語句即switch(k)重新匹配新的case是不是可以認(rèn)為按鍵切換的延時來自于這個過程呢?
此時的k也加1了變?yōu)?將跳到第二個case里面執(zhí)行因為k的值并沒有進(jìn)行清零大于4后清零所以會讓第二個case一直循環(huán)執(zhí)行。
回復(fù)

使用道具 舉報

ID:782419 發(fā)表于 2020-12-25 09:35 | 顯示全部樓層
應(yīng)該說是你的按鍵檢測程序的思路不太好。建議去看下其它視頻教程上關(guān)于按鍵檢測的內(nèi)容。延時按鍵檢測的思路會使整個程序的運行效率大大降低。如果通過掃描按鍵狀態(tài)并進(jìn)行判斷的方法會好很多!
回復(fù)

使用道具 舉報

ID:232366 發(fā)表于 2020-12-25 12:26 | 顯示全部樓層
wufeng391 發(fā)表于 2020-12-25 09:35
應(yīng)該說是你的按鍵檢測程序的思路不太好。建議去看下其它視頻教程上關(guān)于按鍵檢測的內(nèi)容。延時按鍵檢測的思路 ...

非常感謝您指出此程序的弊端    而后通過軟件仿真得知是我的按鍵檢測思路有問題目前還在學(xué)習(xí)階段!!!!
回復(fù)

使用道具 舉報

ID:390416 發(fā)表于 2020-12-25 12:48 | 顯示全部樓層
《人人學(xué)會單片機》視頻教程  原子哥網(wǎng)站全部投放
回復(fù)

使用道具 舉報

ID:232366 發(fā)表于 2020-12-25 14:43 | 顯示全部樓層
人人學(xué)會單片機 發(fā)表于 2020-12-25 12:48
《人人學(xué)會單片機》視頻教程  原子哥網(wǎng)站全部投放

非常感謝  我去補補腦去!!!!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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