日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C51单片机之按键控制LED【02】

發(fā)布時(shí)間:2023/12/29 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C51单片机之按键控制LED【02】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

1.獨(dú)立按鍵


當(dāng)按下時(shí),金屬?gòu)椘聣?#xff0c;使得中間3個(gè)點(diǎn)連接一起。

查看原理圖

#include <REGX52.H> // REGX52有關(guān)于位定義的,而REG52則沒(méi)有,需要自己sbit定義

2.按下K1點(diǎn)亮LED

#include <REGX52.H> // REGX52有關(guān)于位定義的,而REG52則沒(méi)有,需要自己sbit定義 #include <INTRINS.H>// 延時(shí)xms void Delay1ms(unsigned int xms) //@11.0592MHz {unsigned char i, j;while (xms) // while里面是延時(shí)1ms的代碼{_nop_();i = 2;j = 199;do{while (--j);} while (--i);--xms;} } void test1() {while (1){if(P3_1 == 0) // 按下按鍵K1 點(diǎn)亮LED{P2_0 = 0;}else{P2_0 = 1;}} }void main() {test1(); }


利用軟件延時(shí)消抖。

if(P3_1 == 0) {Delay1ms(20); // 軟件延時(shí)消抖while (P3_1 == 0); // 檢測(cè)松手Delay1ms(20); // 延時(shí)消抖 }

3.按鍵控制LED狀態(tài)

#include <REGX52.H> // REGX52有關(guān)于位定義的,而REG52則沒(méi)有,需要自己sbit定義 #include <INTRINS.H>// 延時(shí)xms void Delay1ms(unsigned int xms) //@11.0592MHz {unsigned char i, j;while (xms--) // while里面是延時(shí)1ms的代碼{_nop_();i = 2;j = 199;do{while (--j);} while (--i);} }// 按下按鍵才點(diǎn)亮,再按一次就熄滅 void test2() {while (1){if(P3_1 == 0){Delay1ms(20); // 軟件延時(shí)消抖while (P3_1 == 0); // 檢測(cè)松手Delay1ms(20); // 延時(shí)消抖P2_0 = ~P2_0;}}} void main() {test2(); }

4.按鍵控制LED移位

// 獨(dú)立按鍵控制LED移位 // 所使用開(kāi)發(fā)板D1~D8是從左到右的 // 按下K1右移,按下K2左移 void test4() {unsigned char LEDNum = 0;P2 = 0xFE;// 上電時(shí)要讓D1點(diǎn)亮while (1){if (P3_1 == 0){// 軟件消抖Delay1ms(20);while (P3_1 == 0); // 檢測(cè)松手Delay1ms(20);LEDNum++;if (LEDNum >= 8){LEDNum = 0;}// 0x01 << 1 --> 0000 0010 取反 --> 1111 1101// 0x01 << 2 --> 0000 0100 取反 --> 1111 1011// ...// 0x01 << 7 --> 1000 0000 取反 --> 0111 1111// 0x01 << 8 --> 0000 0000 取反 --> 1111 1111// 因此當(dāng)左移到8位時(shí),需要重新從0開(kāi)始移位P2 = ~(0x01 << LEDNum);}// 按下K2右移if (P3_0 == 0){// 軟件消抖Delay1ms(20);while (P3_0 == 0); // 檢測(cè)松手Delay1ms(20);if(LEDNum == 0){LEDNum = 7; // 0再--就變成255了}else{LEDNum--;}P2 = ~(0x01 << LEDNum);}} } void main() {test4(); }

尾聲

🌹🌹🌹

寫文不易,如果有幫助煩請(qǐng)點(diǎn)個(gè)贊~ 👍👍👍

Thanks?(・ω・)ノ🌹🌹🌹

😘😘😘

👀👀由于筆者水平有限,在今后的博文中難免會(huì)出現(xiàn)錯(cuò)誤之處,本人非常希望您如果發(fā)現(xiàn)錯(cuò)誤,懇請(qǐng)留言批評(píng)斧正,希望和大家一起學(xué)習(xí),一起進(jìn)步ヽ( ̄ω ̄( ̄ω ̄〃)ゝ,期待您的留言評(píng)論。
附GitHub倉(cāng)庫(kù)鏈接

總結(jié)

以上是生活随笔為你收集整理的C51单片机之按键控制LED【02】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。