《項目4單片機控制LED燈的設計[共40頁]》由會員分享,可在線閱讀,更多相關《項目4單片機控制LED燈的設計[共40頁](40頁珍藏版)》請在裝配圖網上搜索。
1、電子工業(yè)出版社單片機控制技術單片機控制技術 項目式教程項目式教程 (C C語言版)語言版)電子工業(yè)出版社項目項目4 4 單片機控制單片機控制LEDLED燈的設計燈的設計 l 能了解能了解5151單片機單片機I/OI/O口的結構;口的結構;l 能掌握能掌握5151單片機單片機I/OI/O口的特點及應用;口的特點及應用;l 能掌握能掌握5151單片機控制單片機控制LEDLED燈的硬件設計方法;燈的硬件設計方法;l 能熟練編寫單片機控制能熟練編寫單片機控制LEDLED燈閃爍的程序。燈閃爍的程序。 學習目標學習目標 工作任務工作任務 l 敘述敘述5151單片機單片機I/OI/O口的結構和特點;口的結構
2、和特點;l 設計單片機控制單個設計單片機控制單個LEDLED燈閃爍的電路和工作軟件;燈閃爍的電路和工作軟件;l 設計單片機控制多個循環(huán)設計單片機控制多個循環(huán)LEDLED燈的電路和工作軟件。燈的電路和工作軟件。任務任務4.1 單片機控制單個單片機控制單個LEDLED燈燈 任務任務4.2 單片機控制多個循環(huán)單片機控制多個循環(huán)LEDLED燈燈 項目拓展項目拓展 實驗板彩燈的花式控制實驗板彩燈的花式控制項目小結項目小結思考與訓練思考與訓練項目項目4 單片機控制單片機控制LED燈的設計燈的設計 任務任務4.1 單片機控制單個單片機控制單個LED燈燈 4.1.1 MCS-514.1.1 MCS-51單片機
3、的單片機的I/OI/O口介紹口介紹 MCS-51系列單片機有4個8位的并行I/O接口:P0、P1、P2和P3口。它們是特殊功能寄存器中的4個。這4個口,既可以作輸入,也可以作輸出,既可按8位處理,也可按位方式使用。輸出時具有鎖存能力,輸入時具有緩沖功能。 1P0口口 P0口是一個三態(tài)雙向口,包括一個輸出鎖存器、兩個三態(tài)緩沖器、輸出驅動電路和輸出控制電路組成 ,它的一位結構如圖 :輸出驅動器控制電路控制電路P0口功能口功能1、通用IO接口:不需要外部擴展時,內部控制信號將使MUX開關接通到鎖存器。此時,由于P0口沒有內部上拉電阻,通常要在外部加一個上拉電阻來提高驅動能力。2、地址/數據分時復用:
4、需要進行外部擴展時,內部控制信號將使MUX開關接通到內部地址數據線。此時,P0口在ALE信號的控制下,分時輸出低8位地址和8位數據信號。P0口的工作原理口的工作原理(1)通用)通用I/O口口用作輸入口(端口外數據 內部寄存器)方式1(讀鎖存器): Q 緩沖器2 D 內部總線, 適于“讀修改寫”方式2(讀引腳):P0.x 緩沖器1 D 內部總線。 作為通用I/O使用,是一個準雙向口:“在輸入數據時應先把口置在輸入數據時應先把口置1,使使V1、V2都截止,引腳處于懸浮狀態(tài),都截止,引腳處于懸浮狀態(tài), 可作高阻抗輸入可作高阻抗輸入” 用作輸出口(片內數據 端口) 數據 鎖存 MUX P0.x (2)
5、地址/數據總線口 輸出:地址/數據為1,P0 x 高 地址/數據為0,P0 x 低 輸入:經緩沖器1讀入 (1)P0口既可作地址/數據總線使用,也可作通用I/O口使用。當P0口作地址/數據總線使用時,就不能再作通用I/O口使用了。(2)P0口作輸出口使用時,輸出級屬漏極開路,必須外接上拉電阻,才有高電平輸出。(3)P0口作輸入口讀引腳時,應先向鎖存器寫1,使V1、V2截止,不影響輸入電平。P0口特點口特點2. P1口口P1口是準雙向口,它只能作通用I/O接口使用。結構與P0口不同,它的輸出只由一個場效應管V1與內部上拉電阻組成。 (1)P1口是唯一的單功能口,僅能作為通用I/O口使用。因在其輸
6、出端接有上拉電阻,可以直接輸出而無需外接上拉電阻。(2)同P0口一樣,當作輸入口時,必須先向鎖存器寫“1”,使場效應管V1截止。P1口特點口特點3. P2口口P2口也是準雙向口,它有兩種用途:通用I/O接口和高8位地址線。 l P2口作I/O端口使用時:內部控制信號使MUX開關接通到鎖存器,此時P2口的用法與P1口相同。l P2口作外部地址總線使用時:內部控制信號使MUX開關接通到內部地址線,此時P2口的引腳狀態(tài)由所輸出的地址決定。需要特別指出的是,由于對片外地址的操作是連續(xù)不斷的,只要進行了外部系統(tǒng)擴展,此時P0口和P2口就不能再用作I/ O端口了。4. P3口口 P3口用作通用I/O口時,
7、其工作原理同P1口類似。此外,它的每一根線還具有第二種功能。 在真正的應用電路中,在真正的應用電路中,P3P3口的第二功能顯得更為重要口的第二功能顯得更為重要 。4.1.2 單片機控制單個單片機控制單個LED燈閃爍的設計燈閃爍的設計 1 1任務要求任務要求 設計一個電路,AT89C52單片機的P1.7引腳連接一個LED燈,控制LED閃爍。2任務分析任務分析 以單片機以單片機為核心的為核心的電子設計電子設計 硬件設計硬件設計軟件設計軟件設計單片機最小系統(tǒng)加單片機最小系統(tǒng)加上最簡單的輸出電上最簡單的輸出電路來驅動路來驅動LEDLED編程控制編程控制P1.7P1.7引腳引腳的電平狀態(tài),使其的電平狀態(tài)
8、,使其持續(xù)一段時間的高持續(xù)一段時間的高電平,再持續(xù)一段電平,再持續(xù)一段時間的低電平時間的低電平 3任務設計任務設計(1)器件的選擇發(fā)光二極管l 發(fā)光二極管:單向導電性,通過5mA左右電流即可發(fā)光,電流越大,亮度越強,但若電流過大會燒毀二極管,一般控制在320mA。l 工作電壓: 紅色發(fā)光二極管1.7-2.5V 綠色發(fā)光二極管2.0-2.4V 黃色發(fā)光二極管1.9-2.4V 藍/白色發(fā)光二極管3.0-3.8V 限流電阻l 二極管串聯(lián)電阻的目的是為了防止發(fā)光二極管和P1.7引腳流過的電流過大,燒毀二極管或單片機,所以該電阻也稱為“限流電阻”。l 限流電阻的選擇: 假設電源電壓為VCC,發(fā)光二極管的
9、導通壓降為VDD,導通時流過二極管的電流為I,則限流電阻R為: R = (VCC-VDD)/Il 例如,若二極管的導通壓降為2.2V,導通時流過的電流為5mA,則限流電阻為560。器件清單器件名稱數量(只)AT89C52112MHz晶體122pF瓷片電容222uF電解電容110k電阻1560電阻1發(fā)光二極管LED1(2)硬件原理圖設計再次強調:再次強調:圖中的單片機元件沒有“VCC”和“GND”引腳,這是因為Proteus軟件中,元件模型中的“電源”和“地”已經進行了連接,“VCC”接到了“+5V”電源,“GND”接到了“地”,所以隱藏了這兩個引腳。(3)軟件程序設計#include /宏定義
10、sbit led=P17; / 用sbit 關鍵字定義P1.7引腳 / 延時子函數void Delay(unsigned int t) while(-t); /主函數,控制P1.7引腳的LED燈閃爍void main (void)while (1) /主循環(huán) led=0; /將P1.7引腳置0,對外輸出低電平 Delay(20000); /調用延時程序 led=1; /將P1.7引腳置 1,對外輸出高電平 Delay(20000); /調用延時程序 在軟件編程中,通常使用空循環(huán)來達到延時的效果。延時時間的長短可以在Keil C51的調試狀態(tài)下分析。(4)軟硬件聯(lián)合調試1任務要求任務要求 設計一
11、個電路,AT89C52單片機的P1口連接8只LED燈,按以下順序點亮,形成流水燈的效果: 從P1.0到P1.7連接的8只LED燈逐個點亮; 從P1.0到P1.7連接的8只LED依次全部點亮; 從P1.7到P1.0連接的8只LED燈逐個點亮; 從P1.7到P1.0連接的8只LED依次全部點亮。任務任務4.2 單片機控制多個單片機控制多個LED燈燈 2任務分析任務分析 任務要求單片機控制8個LED燈,當需要對某個I/O口的八位一起操作時,一般采用整體操作的方式,即總線的方式。在軟件設計時可以定義一個變量來給P1口賦值,賦的值不同點亮的LED燈不同。由于8只LED燈要按一定規(guī)律點亮,這就要求對給P1
12、口賦的變量進行移位,移位操作既可以用標準C中的左移、右移運算符來實現,也可以用C51庫自帶的函數來實現。 移位運算符 循環(huán)移位函數 注意:循環(huán)移位函數_crol_( )和_cror_( )包含在intrins.h頭文件中,因此如果在程序中要用到這類函數,就必須在程序的開頭處包含intrins.h這個頭文件。l 由于用到的發(fā)光二極管較多,每個發(fā)光二極管都需要限流電阻,硬件電路會顯得比較復雜,所以這里使用了排阻。l 排阻排阻,就是若干個參數完全相同的電阻,它們的一個引腳都連到一起,作為公共引腳,其余引腳正常引出。如果一個排阻是由n個電阻構成的,那么它就有n+1個引腳,一般來說最左邊的那個是公共引腳
13、。它在排阻上一般用一個色點標出來。 直插式排阻 貼片式排阻排阻一般用在數字電路上,比如作為某個并行口的上拉或者下拉電排阻一般用在數字電路上,比如作為某個并行口的上拉或者下拉電阻用。使用排阻比用若干只固定電阻更方便。阻用。使用排阻比用若干只固定電阻更方便。3 3任務設計任務設計(1)器件的選擇l器件清單器件名稱數量(只)AT89C52112MHz晶體122pF瓷片電容222uF電解電容110k電阻15608排阻1發(fā)光二極管LED8(2)硬件原理圖設計(3)軟件程序設計#include /宏定義,52單片機頭文件#include /包含_crol_、_cror_函數所在的頭文件#define ui
14、nt unsigned int #define uchar unsigned char /延時子函數void Delay(unsigned int t) while(-t);/主函數,循環(huán)點亮LED燈void main() uchar k,recy; while(1) /大循環(huán) recy=0 xfe; for(k=1;k=8;k+) /8只LED燈從P1.0到P1.7逐個點亮 P1=recy; /先點亮P1.0的LED燈 Delay(50000); /延時一段時間 recy=_crol_(recy,1); /將recy循環(huán)左移1位后再賦給recy recy=0 xfe; for(k=1;k=8
15、;k+) /8只LED燈從P1.0到P1.7依次全部點亮 P1=recy; Delay(50000); recy=recy1; /將recy左移1位后再賦給recy P1=0 xff; /全部熄滅 Delay(50000); recy=0 x7f; for(k=1;k=8;k+) /8只LED燈從P1.7到P1.0逐個點亮 P1=recy; /先點亮P1.7的LED燈 Delay(50000); recy=_cror_(recy,1); /將recy循環(huán)右移1位后再賦給recy recy=0 x7f; for(k=1;k1; /將recy右移1位后再賦給recy P1=0 xff; /全部熄滅
16、 Delay(50000); (4)軟硬件聯(lián)合調試 將編寫的程序在Keil C51中編譯成*.hex后調入Proteus硬件電路圖的AT89C52中運行,八只LED燈從P1.0到P1.7逐個點亮,接下來再從P1.0到P1.7依次全部點亮,然后全部熄滅后又從P1.7到P1.0逐個點亮,最后再從P1.7到P1.0依次全部點亮,如此反復形成流水燈。項目拓展項目拓展 實驗板彩燈的花式控制實驗板彩燈的花式控制 在任務4.2中設計的流水燈為八個LED按一個方向循環(huán)點亮,此外我們還可以通過編程控制LED燈,使它以我們想要的各種方式點亮,而且LED燈點亮頻率可以通過改變延時時間來實現。下面編寫程序控制實驗板上
17、的八個LED燈按照不同花式循環(huán)點亮。 (1)實驗板8個LED燈電路如圖所示。RP1為390歐姆排阻;J9為插針,用于連接需要使用的I/O口,此處用杜邦線連接單片機的P1口。(2)編寫程序,控制八個LED燈使其以1s左右的時間間隔按不同形式循環(huán)點亮。 /宏定義 #include #define uint unsigned int #define uchar unsigned char void delay(uint); /聲明延時函數 uint a; /定義循環(huán)用變量 /定義循環(huán)用數據表格 uchar code table= 0 xff, /全滅 0 xfe,0 xfd,0 xfb,0 xf7,
18、0 xef,0 xdf,0 xbf,0 x7f, /從第0位到第7位依次逐個點亮 0 xfe,0 xfc,0 xf8,0 xf0,0 xe0,0 xc0,0 x80,0 x00, /從第0位到第7位/依次全部點亮 0 x80,0 xc0,0 xe0,0 xf0,0 xf8,0 xfc,0 xfe,0 xff, /從第7位到第0位依次全部熄滅 0 x7e,0 xbd,0 xdb,0 xe7,0 xe7,0 xdb,0 xbd,0 x7e, /分別從第7位和第0位向中間靠攏逐個點亮 /然后從中間向兩邊分散逐個點亮 0 x7e,0 x3c,0 x18,0 x00,0 x00,0 x18,0 x3c,
19、0 x7e, /分別從第7位和第0位向中間靠攏全部點亮,/然后從中間向兩邊分散熄滅 0 x00 /全亮 ; /定義循環(huán)用數據表格 /延時子函數,通過time值改變延時時間 void delay(uint time) uint i,j; for(i=time;i0;i-) for(j=110;j0;j-); /* /主函數,循環(huán)點亮LED燈 void main() while(1) for(a=0;a42;a+) P1=tablea; /以a做索引號,從數組中取值送給P1口 delay(1000); /調用延時子程序,晶振頻率12MHz時,延時約1s /* 分析:分析:這個程序中,根據LED燈點
20、亮的方式,將需要送向P1口的數據預先存放到數組中,程序運行中,只要按照順序將這些數組元素送向P1口,就可以實現不同花式的彩燈。數組定義時,寫“code”的含義是告訴單片機,定義的數組要放在ROM(程序存儲區(qū))里面,寫后就不能再更改。程序可以簡單的分為code(程序)區(qū)和data(數據)區(qū),code區(qū)在運行的時候是不可以更改的,data區(qū)放全局變量和臨時變量,是要不斷改變的,CPU從code區(qū)讀取指令,對data區(qū)的數據進行運算處理。由于單片機上的RAM區(qū)很小,而ROM區(qū)相對來說比較大,當需要定義的數據太多時,會存在RAM區(qū)放不下的情況。所以編寫程序時,對于那些在程序運行中一直不變的數據,可在數
21、據類型名和變量名之間加上“code”,這樣數據就會被存放到ROM區(qū),節(jié)省了RAM區(qū)的空間。注意:注意:在單片機編程中,要根據變量的取值范圍,合理的定義變量的數 據類型,節(jié)省RAM區(qū)。(3)將調試通過的程序下載到實驗板觀察效果,實驗板上的單片機為STC89C52,可直接使用STC-ISP下載軟件將程序燒寫到單片機上。STC-ISP的打開界面如圖所示。按照界面中操作步驟,依次選取單片機型號、打開HEX文件、選擇串口、點擊下載就可以將程序下載到單片機中。注意:注意: STCSTC單片機下載時單片機下載時必須進行冷啟動,必須進行冷啟動,即在點擊即在點擊“下載下載”之前實驗板電源之前實驗板電源是關閉的,
22、點擊是關閉的,點擊下載按鈕后,大下載按鈕后,大概概2 2秒鐘,打開實秒鐘,打開實驗板電源,出現驗板電源,出現藍色進展條并有藍色進展條并有提示音表示下載提示音表示下載成功。成功。項目小結項目小結 l 本項目主要介紹了51單片機I/O口結構和應用,通過兩個任務實現了單片機對單個LED燈閃爍和多個循環(huán)LED燈的控制。 l 51單片機有4個8位的并行I/O接口:P0、P1、P2和P3口。對于P0口要注意其內部沒有上拉電阻,所以在硬件設計中要給P0口外接上拉電阻,以保證P0口可以輸出高電平。P1口是唯一一個只有輸入/輸出功能的I/O口。P0口和P2口當有外部擴展存儲器時,作為數據/地址的復用口。P3口每
23、一位都具有第二功能。l 對于單片機的編程,離不開對特殊功能寄存器的操作,所以在程序中一定要有包含對特殊功能寄存器聲明的頭文件。 思考與訓練思考與訓練 (一)知識思考:1P1口與P0口在結構上有何區(qū)別?2P0口P3口的負載能力分別如何?351單片機的P0P3口在結構上有何不同?在使用上有什么特點?用作通用I/O口輸入數據時,應注意什么?4P3口的第二功能是什么?5單片機外部擴展存儲器時,P0口和P2口有什么作用?6在編寫單片機程序時,添加“reg52.h”頭文件的目的是什么? (二)項目訓練:1如圖4.7電路,請修改程序,使P1.7的LED燈大致按1s的時間間隔交替亮與滅。2如圖4.10電路,請將設計稍作修改:控制從P1.0到P1.7連接的8只LED燈依次全部點亮,然后依次熄滅,接下來控制從P1.7到P1.0連接的8只LED燈依次全部點亮再依次熄滅,最后8只LED燈全亮之后再全滅。請編寫程序并調試。