久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2352|回復: 6
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
誠心向師傅請教幾個問題:程序實現的功能是按鍵按一下led樣式切換一個,功能是實現了但是有幾個問題
如下:
1按鍵按下的時候切換時響應速度延時較大大概為一秒鐘切換不知道知道這是怎么回事?
2按鍵一直按下的時候如果不加按鍵松開檢測計數值k會一直  +1 導致led變化變成流水作業一直循環如果要加按鍵松開檢測的話要加在哪里呢?
以下為實驗程序歡迎各位師傅來賜教。
#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;
//*************************《按鍵函數》********************************
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--);


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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:867238 發表于 2020-12-24 19:32 來自觸屏版 | 只看該作者
手機不方便寫,具體如圖

IMG_20201224_193052.jpg (244.61 KB, 下載次數: 69)

IMG_20201224_193052.jpg

IMG_20201224_192808.jpg (180.95 KB, 下載次數: 61)

IMG_20201224_192808.jpg
回復

使用道具 舉報

板凳
ID:232366 發表于 2020-12-25 08:53 | 只看該作者
piaoyes 發表于 2020-12-24 19:32
手機不方便寫,具體如圖

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

使用道具 舉報

地板
ID:782419 發表于 2020-12-25 09:35 | 只看該作者
應該說是你的按鍵檢測程序的思路不太好。建議去看下其它視頻教程上關于按鍵檢測的內容。延時按鍵檢測的思路會使整個程序的運行效率大大降低。如果通過掃描按鍵狀態并進行判斷的方法會好很多!
回復

使用道具 舉報

5#
ID:232366 發表于 2020-12-25 12:26 | 只看該作者
wufeng391 發表于 2020-12-25 09:35
應該說是你的按鍵檢測程序的思路不太好。建議去看下其它視頻教程上關于按鍵檢測的內容。延時按鍵檢測的思路 ...

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

使用道具 舉報

6#
ID:390416 發表于 2020-12-25 12:48 | 只看該作者
《人人學會單片機》視頻教程  原子哥網站全部投放
回復

使用道具 舉報

7#
ID:232366 發表于 2020-12-25 14:43 | 只看該作者
人人學會單片機 發表于 2020-12-25 12:48
《人人學會單片機》視頻教程  原子哥網站全部投放

非常感謝  我去補補腦去!!!!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级黄片毛片 | 在线看的av | 天天看天天干 | 偷偷操不一样 | 99视频+国产日韩欧美 | 欧美日韩精品 | 国产精品一区在线播放 | 天天射影院 | 中文字幕不卡在线 | 一区二区在线视频 | 二区三区在线观看 | 欧美日韩精品在线 | 久久人人视频 | 中国黄色1级片 | 欧美日韩免费在线观看 | 这里只有精品视频在线观看 | 欧美黑人猛交 | 一区二区三区在线播放 | 一区二区国产在线 | 三上悠亚激情av一区二区三区 | 亚洲在线一区二区 | 国产精品日日摸天天碰 | 国产精品久久久一区二区 | 四虎影视av| 少妇av | 亚洲天堂欧美 | 国产成人在线观看免费网站 | 亚洲综合视频在线观看 | 网站av| 日韩一级免费 | 96视频在线 | 国产一区二区三区在线视频 | h片在线| 色综合色综合 | 国产一级自拍 | 亚洲一级二级 | 国产视频一区二区在线 | 天天综合久久 | 亚洲精品久久久久久久久久久 | 亚洲男人天堂av | 中文字幕国产视频 |