<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          1、點亮LED

          本文引用地址:http://www.ex-cimer.com/article/201611/318512.htm

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

          3、兩個按鍵控制一個LED,一個鍵開燈,一個鍵關燈

          實驗一

          點亮LED的例子前面入門篇已經(jīng)講過了,程序寫起來很簡單,Keil編寫程序并編譯生成HEX文件,燒寫進單片機的過程,也做了完整詳細的介紹。

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

          sbit LED = P1^0;

          LED = 0;

          第一句定義LED為sbit型變量,對應了P1.0口的高低電平,具體應該寫哪個IO口,和實際電路有關。第二句設置LED對應的P1.0管腳輸出低電平,從而點亮LED。

          實驗二:按鍵開關

          講第二個實驗前,先簡單介紹下常用的按鍵開關。下圖就是最常見的按鍵開關,有四個引腳,圖中的1、2連在一起,3、4連接在一起。按下按鍵時,四個引腳就全部導通了。

          實驗二:搭建電路

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

          實驗二:程序實現(xiàn)

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

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

          #include

          sbit LED = P1^0;

          sbit KEY = P2^0;

          void main()

          {

          KEY = 1;

          while(1) {

          if(KEY == 1) {

          LED = 1;

          } else {

          LED = 0;

          }

          }

          }

          這是我按下按鍵,燈亮時的情形。

          實驗二:程序分析

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

          void main()

          {

          KEY = 1;

          if(KEY == 1) {

          LED = 1;

          } else {

          LED = 0;

          }

          }

          程序簡化

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

          if(KEY) {

          LED = 1;

          } else {

          LED = 0;

          }

          但是還可以繼續(xù)簡化。因為LED和KEY都是變量,可以考慮直接用KEY給LED賦值,寫成下面這樣就行了。

          LED = KEY;

          取反操作的應用

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

          LED = !KEY;

          實驗三

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

          sbit KEY_ON = P2^0;

          sbit KEY_OFF = P2^1;

          while(1) {

          if(KEY_ON == 0)

          LED = 0;

          if(KEY_OFF == 0)

          LED = 1;

          }

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

          下一篇會繼續(xù)講IO口相關的實驗。

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



          關鍵詞: 單片機LED按鍵操

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();