單片機課程設計-16個LED燈的多樣顯示控制器_第1頁
單片機課程設計-16個LED燈的多樣顯示控制器_第2頁
單片機課程設計-16個LED燈的多樣顯示控制器_第3頁
單片機課程設計-16個LED燈的多樣顯示控制器_第4頁
單片機課程設計-16個LED燈的多樣顯示控制器_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、信 息 工 程 學 院 課 程 設 計 報 告設計題目: 節(jié)日彩燈控制器設計 名 稱: 電子信息工程專業(yè)綜合課程設計(1)班 級: 姓 名: 學 號: 設計時間: 2016.06.22 指導教師: 評 語: 評閱成績: 評閱教師: 14目錄一、課程設計的性質(zhì)和目的1二、課程設計的要求12.1 設計題目12.2 設計要求1三、主要儀器設備及軟件1四、課題分析及設計24.1 設計任務24.2 設計方案24.3 系統(tǒng)硬件設計24.3.1 單片機最小系統(tǒng)34.3.2 控制電路介紹64.3.3 Proteus電路仿真圖74.4 軟件設計74.4.1 程序流程圖74.4.2 軟件程序及分析8五、組裝調(diào)試1

2、25.1 硬件12六、總結13一、課程設計的性質(zhì)和目的學習基本理論在實踐中綜合運用的初步經(jīng)驗,掌握電路設計的基本方法、設計步驟,培養(yǎng)綜合設計與調(diào)試能力;掌握匯編語言程序設計方法;培養(yǎng)實踐技能,提高分析和解決實際問題的能力。二、課程設計的要求2.1 設計題目節(jié)日彩燈控制器設計。2.2 設計要求設計一個16個LED燈的多樣顯示控制器。1.選擇兩個I/O端口控制16個LED流水燈。2.設置四個按鍵K1K4,按下K1跑馬燈,K2鴛鴦戲水,K3雙流水燈,K4則循環(huán)三種控制方式。3.跑馬燈:共16個LED逐次點亮,每隔100ms點亮一個LED,點亮100ms后關閉,然后繼續(xù)上次操作。4.鴛鴦戲水燈:第一次

3、單數(shù)燈點亮,延時100ms,關閉,然后雙數(shù)燈點亮,延時100ms,關閉,然后繼續(xù)上次操作。5.雙流水燈:16個LED依次向中間點亮,間隔100ms,再依次向兩邊擴散點亮,間隔100ms,然后繼續(xù)上次操作。三、主要儀器設備及軟件計算機、KeilC51軟件、Proteus軟件、單片機AT89C51、LED燈、電阻、撥碼開關、晶振。四、課題分析及設計4.1 設計任務彩燈用16個發(fā)光二極管代替;電路具有控制16個LED燈逐個點亮、單數(shù)點亮、雙數(shù)點亮、擴散點亮等功能(用4個按鍵切換LED顯示狀態(tài));彩燈兩燈移動時間間隔為100ms。4.2 設計方案本課題使用AT89C51單片機時無須外擴存儲器。因此,本

4、流水燈實際上就是一個帶有16個發(fā)光二極管的單片機最小應用系統(tǒng),即為由發(fā)光二極管、晶振、復位、電源等電路和必要的軟件組成的單個單片機。如果要讓接在P0.0口和P2.0口的16個LED亮起來,那么只要把P0.0口和P2.0口的電平變?yōu)榈碗娖骄涂梢粤耍幌喾?,如果要接在P0.0口的LED熄滅,就要把P0.0口的電平變?yōu)楦唠娖?;同理,接在P0.1P0.7口的其他7個LED的點亮和熄滅的方法同以上LED。因此,要實現(xiàn)流水燈功能,我們只要將發(fā)光二極管LED1LED16依次點亮、熄滅,16只LED燈便會一亮一暗的做流水燈或跑馬燈了。同樣的道理,可以讓16個燈上移或下移點亮,全亮、全滅。 在此我們還應

5、注意一點,由于人眼的視覺暫留效應以及單片機執(zhí)行每條指令的時間很短,我們在控制二極管亮滅的時候應該延時一段時間,否則我們就看不到“流水”效果了。4.3 系統(tǒng)硬件設計AT89C51是一種帶4K字節(jié)FLASH存儲器(FPEROMFlash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。

6、由于將多功能8位CPU和閃速存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C51單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。外形及引腳排列如圖4.1所示。圖4.1 AT89C51單片機芯片引腳4.3.1 單片機最小系統(tǒng)(1)P0口介紹P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義4為數(shù)據(jù)/地址的低八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部

7、必須接上拉電阻(2)P1口介紹P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為低八位地址接收。(3)P2口介紹P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的

8、高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。(4)P3口介紹P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口。復位系統(tǒng)(5)上電復位電路AT89C51的上電復位電路如圖4.2所示,只要在RST復位輸入引腳上接一電容至Vcc端,下接一個電阻到地即可。對于CMO

9、S型單片機,由于在RST端內(nèi)部有一個下拉電阻,故可將外部電阻去掉,而將外接電容減至1µF。上電復位的工作過程是在加電時,復位電路通過電  容加給RST端一個短暫的高電平信號,此高電平信號隨著Vcc對電容的充電過程而逐漸回落,即RST端的高電平持續(xù)時間取決于電容的充電時間。為了保證系統(tǒng)能夠可靠地復位,RST端的高電平信號必須維持足夠長的時間。上電時,Vcc的上升時間約為10ms,而振蕩器的起振時間取決于振蕩頻率,如晶振頻率為10MHz,起振時間為1ms;晶振頻率為1MHz,起振時間則為10ms。在如圖的復位電路中,當Vcc掉電時,必然會使RST端電壓迅速下降到0V以下,但是,

10、由于內(nèi)部電路的限制作用,這個負電壓將不會對器件產(chǎn)生損害。另外,在復位期間,端口引腳處于隨機狀態(tài),復位后,系統(tǒng)將端口置為全“l(fā)”態(tài)。如果系統(tǒng)在上電時得不到有效的復位,則程序計數(shù)器PC將得不到一個合適的初值,因此,CPU可能會從一個未被定義的位置開始執(zhí)行程序。圖4.2 上電復位電路(6)手動復位電路手動按鈕復位需要人為在復位輸入端RST上加入高電平。一般采用的辦法是在RST端和正電源Vcc之間接一個按鈕。如圖4-3所示,當人為按下按鈕時,則Vcc的+5V電平就會直接加到RST端。手動按鈕復位的電路如所示。由于人的動作再快也會使按鈕保持接通達數(shù)十毫秒,所以,完全能夠滿足復位的時間要求。圖4.3 手動

11、復位電路(7)晶振系統(tǒng)晶振是給單片機提供工作信號脈沖的.這個脈沖就是單片機的工作速度.比如12M晶振.單片機工作速度就是每秒12M.單片機內(nèi)部也有晶振,接外部晶振可以或得更穩(wěn)定的頻率。因為晶振與單片機的腳XTAL0和腳XTAL1構成的振蕩電路中會產(chǎn)生偕波(也就是不希望存在的其他頻率的波),這個波電路的影響不大,但會降低電路的時鐘振蕩器的穩(wěn)定性,如圖4.4所示。80C51型單片機內(nèi)有一高增益反相放大器,按如圖連接可構成自激振蕩電路,振蕩頻率取決于石英晶體的振蕩頻率,范圍可取1.212MHz,C01.C02主要起頻率微調(diào)和穩(wěn)定作用,電容值可取530Pf。圖4.4 晶振電路4.3.2 控制電路介紹(

12、1)按鍵機械式按鍵再按下或釋放時,由于機械彈性作用的影響,通常伴隨有一定時間的觸點機械抖動,然后其觸點才穩(wěn)定下來。抖動時間的長短與開關的機械特性有關,一般為510 ms,如圖4.5所示。圖4.5 按鍵控制電路(2)LED電路LED 顯示器具有功耗低,接口控制方便等優(yōu)點,能直接與單片機接口,可方便地實現(xiàn)各種不同的操作。16個發(fā)光二極管L1-L16分別接在單片機P0.0-P0.7,P2.0-P2.7。輸出“0”,發(fā)光二極管亮。圖4.6 LED顯示電路4.3.3 Proteus電路仿真圖圖4.7 電路原理圖4.4 軟件設計4.4.1 程序流程圖開始讀入四個開關狀態(tài)判斷開關狀態(tài)燈依次向下移動、單、雙數(shù)

13、燈亮向中間亮循環(huán)前面三種無輸入圖4.9 主程序流程圖在主程序中,應該盡量的使得任務簡化,不要讓中斷服務程序作過多復雜的任務,而要盡量把這些復雜的任務放到主程序中間去完成。中斷流程如圖所示。去抖功能:讀入鍵值,存入地址,然后延遲10ms后,也就是一個很短的時間之后,再次讀入一個鍵值,兩次鍵值相比較,如果一樣則不是因為外部原因抖動產(chǎn)生按鍵,如果不一樣則說明是別的原因產(chǎn)生的按鍵抖動。這樣的一個程序就可以去除因為抖動產(chǎn)生的錯誤輸入信號。4.4.2 軟件程序及分析(1)主要程序分析:#include <reg51.h> /定義8051寄存器的頭文件#include <intrins.h

14、> /定義intrins.h函數(shù)#include <math.h> /定義數(shù)學函數(shù)#include <stdio.h>#define u8 unsigned char /定義無符號字符#define s8 signed char#define u16 unsigned short /定義無符號整型#define s16 signed short #define u32 unsigned int /定于無符號整型#define s32 signed int #define fp32 float /定義浮點數(shù)#define fp64 double /雙倍精度浮點數(shù)#d

15、efine INT8U unsigned char#define INT16U unsigned intsbit K1 = P10;/按鍵1sbit K2 = P11;/按鍵2sbit K3 = P12;/按鍵3sbit K4 = P13;/按鍵4#define KEY_CHK_TIM 10 /按鍵檢測時間 u8 _g_key_value; /獲取到按鍵的值跑馬燈數(shù)組:code u16 dispcode16= 0xfeff,0xfdff,0xfbff,0xf7ff,0xefff,0xdfff,0xbfff,0x7fff,0xfffe,0xfffd,0xfffb,0xfff7,0xffef,0x

16、ffdf,0xffbf,0xff7f;雙流水燈數(shù)組:code u16 dispcode116=0xfe7f,0xfc3f,0xf81f,0xf00f,0xe007,0xc003,0x8001,0x0000,0x7ffe,0x3ffc,0x1ff8,0x0ff0,0x07e0,0x03c0,0x0180,0x0000;定時器初始化函數(shù):void time_init(void) TMOD |= 0x01; TH0 = 0xf8; TL0 = 0x2f; /設定定時器初值(65535-63535)大約60ms TR0 = 1; /打開定時器 ET0 = 1; /開中斷 EA = 1; ES = 1;

17、 (2)跑馬燈運行方式:void disp0(void) /調(diào)用前面的跑馬燈數(shù)組u8 i; /定義ifor(i = 0 ;i<16;i+) P0 = dispcodei>>8; / P0口運行第二行數(shù)組P2 = dispcodei; /P1口運行第一行數(shù)組delay_ms(100); /延時100ms(3)鴛鴦燈運行方式:void disp1(void) delay_ms(100); /延時100ms P0 = 0xaa; /P0口8個LED單數(shù)亮 P2 = 0xaa; /P0口8個LED燈亮 delay_ms(100); P0 = 0x55; /雙數(shù)燈亮 P2 = 0x55

18、; /雙數(shù)燈亮 delay_ms(100); /延時100ms(4)雙流水燈運行方式:void disp2(void)u8 i;for(i = 0 ;i<8;i+)P0 = dispcode1i>>8; /P0口運行第二行數(shù)組,逐個點亮,向中間P2 = dispcode1i; /P2口運行第一行數(shù)組,逐個點亮,向中間delay_ms(100);for(i = 8 ;i<16;i+)P0 = dispcode1i>>8; /向兩邊亮P2 = dispcode1i; /向兩邊亮delay_ms(100); /延時100ms (5)按鍵掃描函數(shù):void key_

19、scan(void)staticu16 k1_pre_kep_tim = 0; /k1按鍵按下保持時間staticu8k1_press_flag = 0; /k1按鍵按下標志staticu8k1_short_press_flag=0; /k1短按觸發(fā)標志staticu16 k2_pre_kep_tim = 0; /k2按鍵按下保持時間staticu8k2_press_flag = 0; /k2按鍵按下標志staticu8k2_pre_ctn_tim=0; /按鍵連續(xù)觸發(fā)的間隔延時計數(shù)staticu16 k3_pre_kep_tim = 0; /k3按鍵按下保持時間staticu8k3_pres

20、s_flag = 0; /k3按鍵按下標志staticu8k3_pre_ctn_tim=0; /k1短按觸發(fā)標志staticu16 k4_pre_kep_tim = 0; /k4按鍵按下保持時間staticu8k4_press_flag = 0; /k4按鍵按下標志if (K1 = 1) /當按鍵松開為真k1_pre_kep_tim = 0; /k1按鍵按下保持時間清零k1_press_flag = 0; /k1按鍵按下標志清零if (k1_short_press_flag =1 ) /短按標志為1k1_short_press_flag = 0; /短按標志清零_g_key_value = 1

21、; /觸發(fā)1號短按鍵else if (k1_press_flag = 0)k1_pre_kep_tim+; /累加定時中斷次數(shù)if (k1_pre_kep_tim > KEY_CHK_TIM)k1_short_press_flag = 1; /短按標志置1if (k1_pre_kep_tim > 300)k1_pre_kep_tim = 0; /中斷計數(shù)清零k1_short_press_flag = 0;/清除按鍵短按的有效標志k1_press_flag = 1;/自鎖按鍵置位,避免一直觸發(fā)_g_key_value = 11;/觸發(fā)長按(6)主程序:if (con_f = 1)di

22、sp0(); /只運行跑馬燈if (con_f = 2)disp1(); /只運行鴛鴦燈if (con_f = 3)disp2(); /只運行雙流水if (con_f = 4)disp0(); /循環(huán)以上三種disp1();disp2(); 五、組裝調(diào)試5.1 硬件硬件包括MCS-51單片機,LED發(fā)光二極管,晶振,電容,開關,電源,電阻及導線。將所有硬件配齊,按電路原理圖組裝好電路,在電路板上一一對應,所有硬件準備就緒后,接通電源,軟硬結合。首先用燒錄軟件給單片機芯片加載*.hex文件,等待加載完畢,運行電路。當按下K1時,跑馬燈開始,16個LED燈從上到下逐個點亮,第一個燈亮,然后滅,然后每個間隔時間為100ms;當按下K2時,鴛鴦燈

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論