日本ab视频-日本ab在线-日本a黄-日本a黄色片-国产亚洲精品第一综合linode-国产亚洲精品高清在线

新聞資訊
AVR單片機利用按鍵控制發光二極管的亮滅 IO實驗
2010-11-28


2.1 利用按鍵控制發光二極管的亮滅
2.1.1 實例功能
在“點亮發光二極管”和“讓發光二極管動起來”這兩個例子中,都是通過單片機程序來控制發光二極管的亮滅。如果想要控制發光二極管的亮滅,只有通過打開或者關閉電源來實現控制。那么怎樣實現人工參與控制呢?
在有些應用場合,需要單片機對人工的開關信號作出相應的響應和處理,通過控制電源的通斷會影響到單片機系統中的其他功能,所以通過控制電源的方法并不明智。能不能通過按動一個按鍵來實現發光二極管的亮滅呢?
當然可以,前面已經講過,AVR單片機的I/O口都是雙向的,也就是既能當作輸出控制端口,也能當作輸入檢測端口。既然我們可以通過控制端口輸出不同的高低電平使發光二極管實現點亮和熄滅;那么為什么不能通過監測端口輸入電平的狀態來進行相應的處理呢。
在本例中,通過介紹利用按鍵開關控制發光二極管的亮滅來了解AVR單片機的端口檢測外部信號的功能和方法。
本例中有3個功能模塊,描述如下:
● 單片機系統:檢測外界的按鍵開關信號,根據按鍵的開關狀態控制發光二極管的亮滅狀態。
● 外圍電路:首先是產生信號的按鍵電路,包括對按鍵去抖動電路的介紹;然后是發光二極管的控制電路。
● 軟件程序:通過讀取AVR單片機相應端口的狀態,編寫相應的程序控制發光二極管的亮滅。
本例的目的在于希望讀者完成本例后,能完成相關電路的設計和相應程序的編寫,從而掌握以下知識點:
◆ 了解AVR單片機端口輸入功能,掌握使用AVR單片機端口輸入功能檢測外部信號的原理。
◆ 熟悉單片機端口輸入輸出功能的綜合使用。
◆ 掌握AVR單片機按鍵的硬件去抖動的電路設計和原理。
◆ 掌握AVR單片機端口輸入輸出程序的編寫。
◆ 掌握AVR單片機按鍵軟件去抖動功能的實現。

2.1.2  器件和原理
本例主要介紹AVR單片機外圍電路中按鍵去抖電路的設計,分別介紹相應的軟件和硬件解決方案。然后利用C語言編寫通過按鍵控制發光二極管亮滅狀態的程序。
1、按鍵的去抖動電路
(1)按鍵的響應過程
我們日常所說的按鍵,實際上是一個機械開關,本實例所用的按鍵外觀如圖2.1.1所示。理想的按鍵的閉合和斷開時,接觸點的電壓應該立即變高或者變低,但 是由于機械觸點的彈性以及按鍵按動時電壓突變等原因,在觸點閉合或斷開的瞬間會出現電壓抖動現象,如圖2.1.2所示。在發生抖動的時間一般在 5-10ms。
一次按鍵處理過程如下:當按鍵按下之后,相應的按鍵接觸點的電壓以高低電平的方式輸入到單片機的I/O口。按鍵的閉合與斷開是有一定時間的,一般為 0.1-1S。而AVR單片機的機器周期一般為1us甚至更短,在0.1-1S的時間段內,程序會檢測很多次按鍵的輸入電平,這樣單片機可能會認為按鍵被 按下了多次,從而出現誤判。

圖2.1.1 按鍵開關             圖2.1.2  按鍵閉合斷開時的電壓波動示意圖
(2)按鍵去抖動的方法和原理
為了去除按鍵的抖動,保證單片機對按鍵的一次輸入只響應一次,可以采用硬件和軟件兩種方法:硬件電路去抖動是在外圍電路中加入去抖動電路(如R-S觸發 器);軟件去抖動是在程序中加入延時程序以跳過抖動時間,等待信號穩定后再次判斷按鍵的輸入電平,如果信號電平保持不變,則可以確認一次按鍵按下。
●硬件去抖動電路的原理
用R-S觸發器形成去抖電路是單片機外圍電路設計中常用的方法,這種方法可以減少單片機軟件對按鍵動作的延時和計算。
先來了解一下R-S觸發器的基本工作原理和工作特點。R-S觸發器的基本構成如圖2.1.3所示,這個電路有兩個與非門交叉耦合而成,/S、/R是信號輸入端,低電平有效。Q和/Q既表示觸發器狀態,又是觸發器的輸出端。

圖2.1.3  R-S觸發器的基本原理
在啟動過程中,/S端一旦下降到開門電平,Q端電平就會上升,反饋到門B的輸入端,此時門B在/R的低電平作用下處于導通狀態,/Q輸出高電平反饋到A的 輸入端,如果這時/S端電壓有一個高的跳動,則A門截止,Q段輸出低電平,這個低電平反饋到A的輸入端,使A門導通,Q端電平為高,這樣就保證了Q端電平 的穩定,從而消除按鍵的抖動。
典型的硬件去抖動電路如圖2.1.4,74LS02按鍵輸出端口通過/Q端接入單片機的I/O口,74LS02構成一個R-S觸發器電路實現按鍵的消抖。
●軟件消抖的原理和實現
軟件消抖的基本原理是在軟件中對按鍵進行兩次檢測確認,記載第一次檢測到按鍵按下后,間隔10ms左右再次檢測按鍵是否按下,只有在兩次都檢測到按鍵按下時才最終確認有鍵按下,這樣就避開了按鍵的抖動時間,從而消除了抖動的影響。
圖2.1.4 74LS02實現的硬件消抖電路
在按鍵接口軟件的設計中,除了要考慮按鍵消抖外,一般還要判別按鍵的釋放,只有檢測到按鍵釋放后,才能確定為一次完整的按鍵動作。
通用的案件檢測程序如下:

[code="c"]
Keyscan()
{
if(!key)       //判斷按鍵是否按下,key=0表示按鍵按下
{
delayms(20);  //延時20ms。避開按鍵抖動時間
if(!key)     //再次判斷按鍵是否按下,
{
…     //按鍵按下的處理程序
}
}
While(!key);    //判斷按鍵是否放開,key=1表示按鍵釋放,退出按鍵處理函數
}
[/code]

2.1.3 電路
本例中的電路如圖2.1.5和2.1.6所示。
1、電路原理
圖2.1.5是按鍵檢測電路,兩個按鍵分別連接到單片機的PD6、PD7管腳,AVR單片機在程序里把PD6、PD7設置為帶上拉的端口,這樣按鍵沒有按 下時,PD6、PD7處于高電平狀態,當按鍵按下時PD6、PD7被連接到地,電平狀態變為低電平,程序中檢測到PD6、PD7的電平為低電平時,就可以 認為按鍵被按下了。
圖2.1.6為LED顯示電路,當按鍵K3被按下時,D1、D3、D5、D7點亮,D2、D4、D6、D8熄滅。當按鍵K4被按下時,D1、D3、D5、D7熄滅,D2、D4、D6、D8點亮。
2、元器件選擇
在這里列出和本例相關的、關鍵部分的器件名稱及其在電路中的作用。
● ATmega16:單片機,檢測按鍵按下情況并控制發光二極管的亮滅。
● D1-D8:發光二極管,指示按鍵狀態。
● RP1:阻值為330Ω的排阻,限流電阻。
● K3、K4:按鍵,當按鍵按下時,與按鍵連接的單片機端口的電平發生變化。

3、管腳連接
在這里列出和本例相關的、關鍵部分的單片機端口與外圍電路的連接。
● PB0-PB7:連接8個發光二極管LED1-LED8,控制發光二極管的亮滅。
● PD6、PD7:連接按鍵K3、K4,檢測兩個按鍵的狀態。
2.1.4 程序設計
1、程序功能
● 按鍵軟件消抖
本例中采用軟件消抖的方法,在程序中加入軟件延時,去除按鍵的抖動。
● 按鍵檢測
通過將單片機的PD6、PD7口設置為輸入狀態,同時使能這兩個口的內部上拉電阻(因為這兩個口在按鍵沒有按下時處于懸空狀態,易受外界干擾,所以必須將其內部上來電阻使能,使其平時處于高電平狀態),檢測按鍵是否按下。

  1. LED的亮滅控制

     通過將單片機的PB0-PB7口設置為輸出狀態,根據K3、K4兩個按鍵的按下情況,控制不同的發光二極管點亮或熄滅。
● AVR單片機端口輸入狀態的讀取
AVR單片機端口配備有3個寄存器,分別是方向控制寄存器DDRx,數據寄存器PORTx,和輸入引腳寄存器PINx(x=A\B\C\D)。當I/O工作在輸入方式,要讀取外部引腳上的電平時,應讀取PINxn的值,而不是PORTxn的值。
2、主要變量和函數說明

3、使用WINAVR開發環境,makefile文件同前面的例子,直接復制到本實例程序的文件夾中即可。
4、程序代碼
[code="c"] #include <avr/io.h>    
#include <util/delay.h>

int main(void)         
{           
PORTB = 0X00;      //輸出低,LED全部熄滅
DDRB = 0Xff;      //PB端口置為輸出
PORTD = 0Xc0;     //一定要使能上拉電阻,否則會有干擾
DDRD = 0X3F;      //K3、K4按鍵(PD6、PD7)設置為輸入端口

while(1)
{
if(!(PIND & (1 <<  PD6)))     //判斷按鍵是否按下
{
_delay_ms(20);    //判斷按鍵按下,延時一會再判斷是否按下, 以消除干擾
if(!(PIND & (1 <<  PD6)))    // 按鍵真正按下后,進行相應處理
{
PORTB = 0X55;              //          按鍵按下,燈亮   
while(!(PIND & (1 <<  PD6)));//等待按鍵釋放
//PORTB = 0X55;  //  把這句話從上面移到這里,按鍵釋放后,燈才點亮
}
}

if(!(PIND & (1 <<  PD7)))     //判斷按鍵是否按下
{
_delay_ms(20);     //判斷按鍵按下,延時一會再判斷是否按下, 以消除干擾
if(!(PIND & (1 <<  PD7)))    // 按鍵真正按下后,進行相應處理
{
PORTB = 0Xaa;                  //
while(!(PIND & (1 <<  PD7)));  //
//PORTB = 0Xaa;                        //
}
}
}
}

[/code]

關注有人微信公眾號
了解更多信息

主站蜘蛛池模板: 日日噜噜大屁股熟妇| 亚洲人妖ts资源在线观看| 日本三级成人午夜视频网| 伊人一本之道| 真人实干一级毛片aa免费 | 男人桶女人j的视频在线观看| 亚洲精品久久久久久偷窥| 亚洲性人人天天夜夜摸| 色综合久久中文| 亚洲国产小视频| 国产午夜伦伦伦午夜伦| 一个人在线观看的视频| 欧美一级网| 色综合 成人| WWW亚洲精品久久久乳| 免费视频亚洲| 亚洲天堂最新网址| 日本不卡免费高清视频| 亚洲天堂免费观看| 中文字幕aⅴ资源网| 强奷乱码欧妇女中文字幕熟女| 欧美福利视频导航| 天天干夜夜笙歌| 性欧洲女人18| 国产欧美日韩综合精品一区二区 | 一个人视频在线观看免费观看 | 精品亚洲大全| 午夜精品在线免费观看| 日日夜夜骑| 亚洲欧美激情日韩在线| 精品国产在线国语视频| 性夜影院爽黄a爽免费视| 日本高清视频在线www色下载| 太紧太深了受不了黑人| 18岁男人女人插孔| 色婷婷国产精品视频一区二区三区| 亚洲精品m在线观看| 天干夜天干天干国产| 亚洲综合视频网| 秘密影院久久综合亚洲综合| 亚洲欧美日本国产综合在线|