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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用單片機獨立按鍵實現led燈的亮滅程序,重點是實現兩種模式:單次掃描和連續掃描

[復制鏈接]
跳轉到指定樓層
樓主
ID:1053062 發表于 2022-11-21 09:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  我之前跟著開發板學習51單片機,然后學著學著,自己練習只看原理圖和芯片手冊自己寫代碼,最后發現每個人的思路是不一樣的,按照自己的思路可能寫出來比他更簡單的代碼,所以不管看誰的視頻或者怎么學都必須要自己動手打代碼,這樣才能調用自己的思維,自己形成自己的代碼習慣
分享一下我當時自己寫的代碼,最后有整體解釋,每一步有單獨的注釋,希望能對新手入門起到幫助。
  有幾步很微妙,自己第一次想真的是想不到,所以一定要先模仿,然后再自己創新,給同學者一點自己的心得建議,望有幫助!

單片機源程序如下:
//獨立按鍵K1控制D1指示燈亮滅
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit K1=P3^1;
sbit K2=P3^0;
sbit K3=P3^2;
sbit K4=P3^3;

sbit LED1=P2^0;

void delay_10us(u16 time)
{
        while(time--);
}

void key_scan(u8 mode)                                        //模式選擇函數:0表示單次掃描,1表示連續掃描
{                                                                                
        static u8 key=1;                                        //靜態變量第一次賦初值必須要為1,至少要執行一次
        
        if(mode)key=1;                                                //判斷模式,若形參為1,把上一次循環清零的key變成1
        
        if((key==1)&&(K1==0))                                //邏輯運算,如果mode=1且有按鍵按下
        {        
                delay_10us(1000);                                //10ms
                if(K1==0)                                                //二次判斷
                LED1=!LED1;
                key=0;                                                        
        }
        
        else if(K1==1)                                                //沒有按鍵按下,要把key變成1,缺少這一步,按鍵按一次變化之后就不會變了
                key=1;                                                        //else if與最近的if語句相關聯
}


//void key_functions()
//{
//        if(K1==0)
//        {
//                delay_10us(1000);  //10ms
//                if(K1==0)                   //二次判斷
//                LED1=!LED1;                   //LED1即P20口初始為高電平
//
//        }
//}

void main()
{
        while(1)
        {
                key_scan(1);           //實參選擇模式
        }
}
/*整個過程:
第一種情況:mode=0,單次操作
1.key=1
2.key_scan函數里第一個if語句不滿足,直接跳到下一條
3.由于賦初值key=1,有按鍵按下時,執行第二個if語句
4.key清零
5.若前一個操作按鍵按下沒送,第二次循環到來時,由于key已經為0,不滿足第二個if語句,不會執行LED燈狀態翻轉操作
6.直到前一次按鍵松開,K1=1,再把key變成1,等待下次按鍵按下


第二種情況:mode=1,連續操作
1.key=1
2.key_scan函數里第一個if語句滿足,key仍然為1
3.由于賦初值key=1,有按鍵按下時,執行第二個if語句
4.key清零
5.若前一個操作按鍵按下沒送,第二次循環到來時,由于第一個if語句滿足,key再次變成1,滿足第二個if語句,繼續執行LED燈狀態翻轉操作
6.直到前一次按鍵松開,K1=1,再把key變成1,等待下次按鍵按下
*/

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:1076019 發表于 2023-5-8 11:16 | 只看該作者
模式為1,按了就看不出了,亮和滅都是隨機的,無法控制
回復

使用道具 舉報

板凳
ID:1126656 發表于 2024-9-22 20:08 | 只看該作者
優秀,向你學習
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区福利视频 | 欧美情趣视频 | 成人av高清在线观看 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 免费黄色在线观看 | 一区二区精品 | 国产一区二区三区免费观看在线 | 成人小视频在线观看 | 成人精品一区亚洲午夜久久久 | 日韩一区二区三区在线 | 成人黄色电影免费 | 久久国产免费 | 中文字幕国产 | 一级毛片在线播放 | 色婷婷综合久久久中文字幕 | 午夜天堂精品久久久久 | 日日夜夜精品免费视频 | 久久国产综合 | 精品中文字幕一区二区三区 | 免费国产一区二区视频 | 狠狠操在线 | 日韩一区和二区 | 亚洲精品久 | 欧美精品中文字幕久久二区 | 日韩一区二区精品 | 热久久久 | 国产片侵犯亲女视频播放 | 国产精品久久久久久吹潮 | 国产精品久久久久av | 91精品国产乱码久久久久久久久 | 久久精品网 | 亚洲在线| 蜜桃在线视频 | 九九久久这里只有精品 | 欧美在线亚洲 | 在线观看特色大片免费网站 | 日韩中文字幕一区 | 国产精品综合色区在线观看 | 日本三级电影在线看 | 黄色欧美视频 | 免费能直接在线观看黄的视频 |