<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機小白學(xué)步(21) IO口:基本的LED和按鍵操作

單片機小白學(xué)步(21) IO口:基本的LED和按鍵操作

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò ) 收藏
本篇我們先介紹最基礎的幾個(gè)IO口操作。學(xué)完本篇,大家要能自己獨立完成下面幾個(gè)實(shí)驗。

1、點(diǎn)亮LED

本文引用地址:http://dyxdggzs.com/article/201611/318512.htm

2、一個(gè)按鍵控制LED,按下燈亮,釋放燈滅

3、兩個(gè)按鍵控制一個(gè)LED,一個(gè)鍵開(kāi)燈,一個(gè)鍵關(guān)燈

實(shí)驗一

點(diǎn)亮LED的例子前面入門(mén)篇已經(jīng)講過(guò)了,程序寫(xiě)起來(lái)很簡(jiǎn)單,Keil編寫(xiě)程序并編譯生成HEX文件,燒寫(xiě)進(jìn)單片機的過(guò)程,也做了完整詳細的介紹。

點(diǎn)亮LED利用了IO口輸出操作。簡(jiǎn)單復習一下,最核心的兩句代碼是:

sbit LED = P1^0;

LED = 0;

第一句定義LED為sbit型變量,對應了P1.0口的高低電平,具體應該寫(xiě)哪個(gè)IO口,和實(shí)際電路有關(guān)。第二句設置LED對應的P1.0管腳輸出低電平,從而點(diǎn)亮LED。

實(shí)驗二:按鍵開(kāi)關(guān)

講第二個(gè)實(shí)驗前,先簡(jiǎn)單介紹下常用的按鍵開(kāi)關(guān)。下圖就是最常見(jiàn)的按鍵開(kāi)關(guān),有四個(gè)引腳,圖中的1、2連在一起,3、4連接在一起。按下按鍵時(shí),四個(gè)引腳就全部導通了。

實(shí)驗二:搭建電路

根據前面講的IO口原理,我把按鍵開(kāi)關(guān)一端接在P2.0端口了,另一端接到GND。因為P2.0有內部上拉電阻,我就不用自己外接了。最小系統和LED還是之前的電路不變,如下圖所示。

實(shí)驗二:程序實(shí)現

程序首先定義了LED和KEY,分別表示發(fā)光二極管和按鍵開(kāi)關(guān)。如果你用的是成品開(kāi)發(fā)板,或者電路和我的不一樣,就定義你的電路中對應的管腳。開(kāi)發(fā)板可以從電路圖查看獨立按鍵所在的管腳。

主函數剛開(kāi)始時(shí),設置KEY輸出高電平,因為后面要讀取KEY所在端口的電平。在程序的主循環(huán)中,讀取KEY的值,這里我們直接把KEY當做一個(gè)一位變量去判斷就可以了,它有值0和1。如果KEY為1,即KEY==1,說(shuō)明按鍵沒(méi)有按下,設置LED=1即熄滅。注意這里使用兩個(gè)等號表示比較而不能用一個(gè)等號,那樣就成賦值了。在else中,設置LED=0即點(diǎn)亮。于是就能實(shí)現我們需要的效果了。

#include

sbit LED = P1^0;

sbit KEY = P2^0;

void main()

{

KEY = 1;

while(1) {

if(KEY == 1) {

LED = 1;

} else {

LED = 0;

}

}

}

這是我按下按鍵,燈亮時(shí)的情形。

實(shí)驗二:程序分析

注意這里我們讀取按鍵和開(kāi)關(guān)LED的代碼應該放在主循環(huán)里面,也就是不斷的讀取按鍵狀態(tài)并開(kāi)關(guān)燈。如果放在主循環(huán)前面,主函數寫(xiě)成下面這樣,是不能工作的。因為單片機執行速度很快,放在循環(huán)前面只會(huì )讀取按鍵執行一次,執行完了進(jìn)入while(1)主循環(huán),單片機就不會(huì )再讀取按鍵的狀態(tài),這時(shí)無(wú)論如何按鍵,它都不會(huì )幫你開(kāi)關(guān)LED了。

void main()

{

KEY = 1;

if(KEY == 1) {

LED = 1;

} else {

LED = 0;

}

}

程序簡(jiǎn)化

還要說(shuō)的是,這個(gè)程序還能進(jìn)一步簡(jiǎn)化。因為KEY是一個(gè)變量,在C語(yǔ)言中變量有真假值,非零為真,零為假。所以主循環(huán)中可以這樣寫(xiě)(其他部分相同):

if(KEY) {

LED = 1;

} else {

LED = 0;

}

但是還可以繼續簡(jiǎn)化。因為L(cháng)ED和KEY都是變量,可以考慮直接用KEY給LED賦值,寫(xiě)成下面這樣就行了。

LED = KEY;

取反操作的應用

如果要實(shí)現按下按鍵燈滅,釋放按鍵燈亮這樣恰好相反的效果,做個(gè)很小的修改就可以了,如下所示。感嘆號是邏輯取反的意思,如果是0就會(huì )變成1,如果是非0就變成0。

LED = !KEY;

實(shí)驗三

實(shí)驗三我只提供主要代碼片段,具體的分析理解,實(shí)際電路搭建和實(shí)驗,交給大家自己完成。

sbit KEY_ON = P2^0;

sbit KEY_OFF = P2^1;

while(1) {

if(KEY_ON == 0)

LED = 0;

if(KEY_OFF == 0)

LED = 1;

}

再次強調,如果想學(xué)好單片機,大家一定要自己獨立做完這三個(gè)實(shí)驗,切身體驗單片機的工作過(guò)程,提高動(dòng)手能力。如果做實(shí)驗的過(guò)程中感覺(jué)很神奇,感受到動(dòng)手的樂(lè )趣,就更容易學(xué)好單片機。如果你覺(jué)得這只是不想做的任務(wù),或許你對單片機并沒(méi)有什么興趣,那樣的話(huà)想學(xué)好單片機就有些困難了。因為學(xué)習從來(lái)都應該是主動(dòng)的事情。

下一篇會(huì )繼續講IO口相關(guān)的實(shí)驗。

=======================================================



關(guān)鍵詞: 單片機LED按鍵操

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>