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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上信 息 工 程 學(xué) 院 課 程 設(shè) 計(jì) 報(bào) 告設(shè)計(jì)題目: 節(jié)日彩燈控制器設(shè)計(jì) 名 稱: 電子信息工程專業(yè)綜合課程設(shè)計(jì)(1)班 級(jí): 姓 名: 學(xué) 號(hào): 設(shè)計(jì)時(shí)間: 2016.06.22 指導(dǎo)教師: 評(píng) 語(yǔ): 評(píng)閱成績(jī): 評(píng)閱教師: 專心-專注-專業(yè)目錄一、課程設(shè)計(jì)的性質(zhì)和目的學(xué)習(xí)基本理論在實(shí)踐中綜合運(yùn)用的初步經(jīng)驗(yàn),掌握電路設(shè)計(jì)的基本方法、設(shè)計(jì)步驟,培養(yǎng)綜合設(shè)計(jì)與調(diào)試能力;掌握匯編語(yǔ)言程序設(shè)計(jì)方法;培養(yǎng)實(shí)踐技能,提高分析和解決實(shí)際問(wèn)題的能力。二、課程設(shè)計(jì)的要求2.1 設(shè)計(jì)題目節(jié)日彩燈控制器設(shè)計(jì)。2.2 設(shè)計(jì)要求設(shè)計(jì)一個(gè)16個(gè)LED燈的多樣顯示控制器。1.選擇兩個(gè)I/O端

2、口控制16個(gè)LED流水燈。2.設(shè)置四個(gè)按鍵K1K4,按下K1跑馬燈,K2鴛鴦戲水,K3雙流水燈,K4則循環(huán)三種控制方式。3.跑馬燈:共16個(gè)LED逐次點(diǎn)亮,每隔100ms點(diǎn)亮一個(gè)LED,點(diǎn)亮100ms后關(guān)閉,然后繼續(xù)上次操作。4.鴛鴦戲水燈:第一次單數(shù)燈點(diǎn)亮,延時(shí)100ms,關(guān)閉,然后雙數(shù)燈點(diǎn)亮,延時(shí)100ms,關(guān)閉,然后繼續(xù)上次操作。5.雙流水燈:16個(gè)LED依次向中間點(diǎn)亮,間隔100ms,再依次向兩邊擴(kuò)散點(diǎn)亮,間隔100ms,然后繼續(xù)上次操作。三、主要儀器設(shè)備及軟件計(jì)算機(jī)、KeilC51軟件、Proteus軟件、單片機(jī)AT89C51、LED燈、電阻、撥碼開(kāi)關(guān)、晶振。四、課題分析及設(shè)計(jì)4.1

3、 設(shè)計(jì)任務(wù)彩燈用16個(gè)發(fā)光二極管代替;電路具有控制16個(gè)LED燈逐個(gè)點(diǎn)亮、單數(shù)點(diǎn)亮、雙數(shù)點(diǎn)亮、擴(kuò)散點(diǎn)亮等功能(用4個(gè)按鍵切換LED顯示狀態(tài));彩燈兩燈移動(dòng)時(shí)間間隔為100ms。4.2 設(shè)計(jì)方案本課題使用AT89C51單片機(jī)時(shí)無(wú)須外擴(kuò)存儲(chǔ)器。因此,本流水燈實(shí)際上就是一個(gè)帶有16個(gè)發(fā)光二極管的單片機(jī)最小應(yīng)用系統(tǒng),即為由發(fā)光二極管、晶振、復(fù)位、電源等電路和必要的軟件組成的單個(gè)單片機(jī)。如果要讓接在P0.0口和P2.0口的16個(gè)LED亮起來(lái),那么只要把P0.0口和P2.0口的電平變?yōu)榈碗娖骄涂梢粤耍幌喾?,如果要接在P0.0口的LED熄滅,就要把P0.0口的電平變?yōu)楦唠娖?;同理,接在P0.1P0.7口的其

4、他7個(gè)LED的點(diǎn)亮和熄滅的方法同以上LED。因此,要實(shí)現(xiàn)流水燈功能,我們只要將發(fā)光二極管LED1LED16依次點(diǎn)亮、熄滅,16只LED燈便會(huì)一亮一暗的做流水燈或跑馬燈了。同樣的道理,可以讓16個(gè)燈上移或下移點(diǎn)亮,全亮、全滅。在此我們還應(yīng)注意一點(diǎn),由于人眼的視覺(jué)暫留效應(yīng)以及單片機(jī)執(zhí)行每條指令的時(shí)間很短,我們?cè)诳刂贫O管亮滅的時(shí)候應(yīng)該延時(shí)一段時(shí)間,否則我們就看不到“流水”效果了。4.3 系統(tǒng)硬件設(shè)計(jì)AT89C51是一種帶4K字節(jié)FLASH存儲(chǔ)器(FPEROMFlash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS8位微處理器,俗稱單

5、片機(jī)。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲(chǔ)器的單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃速存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡(jiǎn)版本。AT89C51單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。外形及引腳排列如圖4.1所示。圖4.1 AT89C51單片機(jī)芯片引腳4.3.1 單片機(jī)最小系統(tǒng)(1)P0口介紹P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8TTL門

6、電流。當(dāng)P0口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義4為數(shù)據(jù)/地址的低八位。在FIASH編程時(shí),P0口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須接上拉電阻(2)P1口介紹P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為低八位地址接收。(3)P2口介紹P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2

7、口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。(4)P3口介紹P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這

8、是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口。復(fù)位系統(tǒng)(5)上電復(fù)位電路AT89C51的上電復(fù)位電路如圖4.2所示,只要在RST復(fù)位輸入引腳上接一電容至Vcc端,下接一個(gè)電阻到地即可。對(duì)于CMOS型單片機(jī),由于在RST端內(nèi)部有一個(gè)下拉電阻,故可將外部電阻去掉,而將外接電容減至1F。上電復(fù)位的工作過(guò)程是在加電時(shí),復(fù)位電路通過(guò)電 容加給RST端一個(gè)短暫的高電平信號(hào),此高電平信號(hào)隨著Vcc對(duì)電容的充電過(guò)程而逐漸回落,即RST端的高電平持續(xù)時(shí)間取決于電容的充電時(shí)間。為了保證系統(tǒng)能夠可靠地復(fù)位,RST端的高電平信號(hào)必須維持足夠長(zhǎng)的時(shí)間。上電時(shí),Vcc的上升時(shí)間約為10ms,而振蕩器的起

9、振時(shí)間取決于振蕩頻率,如晶振頻率為10MHz,起振時(shí)間為1ms;晶振頻率為1MHz,起振時(shí)間則為10ms。在如圖的復(fù)位電路中,當(dāng)Vcc掉電時(shí),必然會(huì)使RST端電壓迅速下降到0V以下,但是,由于內(nèi)部電路的限制作用,這個(gè)負(fù)電壓將不會(huì)對(duì)器件產(chǎn)生損害。另外,在復(fù)位期間,端口引腳處于隨機(jī)狀態(tài),復(fù)位后,系統(tǒng)將端口置為全“l(fā)”態(tài)。如果系統(tǒng)在上電時(shí)得不到有效的復(fù)位,則程序計(jì)數(shù)器PC將得不到一個(gè)合適的初值,因此,CPU可能會(huì)從一個(gè)未被定義的位置開(kāi)始執(zhí)行程序。圖4.2 上電復(fù)位電路(6)手動(dòng)復(fù)位電路手動(dòng)按鈕復(fù)位需要人為在復(fù)位輸入端RST上加入高電平。一般采用的辦法是在RST端和正電源Vcc之間接一個(gè)按鈕。如圖4-

10、3所示,當(dāng)人為按下按鈕時(shí),則Vcc的+5V電平就會(huì)直接加到RST端。手動(dòng)按鈕復(fù)位的電路如所示。由于人的動(dòng)作再快也會(huì)使按鈕保持接通達(dá)數(shù)十毫秒,所以,完全能夠滿足復(fù)位的時(shí)間要求。圖4.3 手動(dòng)復(fù)位電路(7)晶振系統(tǒng)晶振是給單片機(jī)提供工作信號(hào)脈沖的.這個(gè)脈沖就是單片機(jī)的工作速度.比如12M晶振.單片機(jī)工作速度就是每秒12M.單片機(jī)內(nèi)部也有晶振,接外部晶振可以或得更穩(wěn)定的頻率。因?yàn)榫д衽c單片機(jī)的腳XTAL0和腳XTAL1構(gòu)成的振蕩電路中會(huì)產(chǎn)生偕波(也就是不希望存在的其他頻率的波),這個(gè)波電路的影響不大,但會(huì)降低電路的時(shí)鐘振蕩器的穩(wěn)定性,如圖4.4所示。80C51型單片機(jī)內(nèi)有一高增益反相放大器,按如圖連

11、接可構(gòu)成自激振蕩電路,振蕩頻率取決于石英晶體的振蕩頻率,范圍可取1.212MHz,C01.C02主要起頻率微調(diào)和穩(wěn)定作用,電容值可取530Pf。圖4.4 晶振電路4.3.2 控制電路介紹(1)按鍵機(jī)械式按鍵再按下或釋放時(shí),由于機(jī)械彈性作用的影響,通常伴隨有一定時(shí)間的觸點(diǎn)機(jī)械抖動(dòng),然后其觸點(diǎn)才穩(wěn)定下來(lái)。抖動(dòng)時(shí)間的長(zhǎng)短與開(kāi)關(guān)的機(jī)械特性有關(guān),一般為510 ms,如圖4.5所示。圖4.5 按鍵控制電路(2)LED電路LED 顯示器具有功耗低,接口控制方便等優(yōu)點(diǎn),能直接與單片機(jī)接口,可方便地實(shí)現(xiàn)各種不同的操作。16個(gè)發(fā)光二極管L1-L16分別接在單片機(jī)P0.0-P0.7,P2.0-P2.7。輸出“0”,

12、發(fā)光二極管亮。圖4.6 LED顯示電路4.3.3 Proteus電路仿真圖圖4.7 電路原理圖4.4 軟件設(shè)計(jì)4.4.1 程序流程圖開(kāi)始讀入四個(gè)開(kāi)關(guān)狀態(tài)判斷開(kāi)關(guān)狀態(tài)燈依次向下移動(dòng)、單、雙數(shù)燈亮向中間亮循環(huán)前面三種無(wú)輸入圖4.9 主程序流程圖在主程序中,應(yīng)該盡量的使得任務(wù)簡(jiǎn)化,不要讓中斷服務(wù)程序作過(guò)多復(fù)雜的任務(wù),而要盡量把這些復(fù)雜的任務(wù)放到主程序中間去完成。中斷流程如圖所示。去抖功能:讀入鍵值,存入地址,然后延遲10ms后,也就是一個(gè)很短的時(shí)間之后,再次讀入一個(gè)鍵值,兩次鍵值相比較,如果一樣則不是因?yàn)橥獠吭蚨秳?dòng)產(chǎn)生按鍵,如果不一樣則說(shuō)明是別的原因產(chǎn)生的按鍵抖動(dòng)。這樣的一個(gè)程序就可以去除因?yàn)槎秳?dòng)

13、產(chǎn)生的錯(cuò)誤輸入信號(hào)。4.4.2 軟件程序及分析(1)主要程序分析:#include /定義8051寄存器的頭文件#include /定義intrins.h函數(shù)#include /定義數(shù)學(xué)函數(shù)#include #define u8 unsigned char /定義無(wú)符號(hào)字符#define s8 signed char#define u16 unsigned short /定義無(wú)符號(hào)整型#define s16 signed short #define u32 unsigned int /定于無(wú)符號(hào)整型#define s32 signed int #define fp32 float /定義浮點(diǎn)數(shù)

14、#define fp64 double /雙倍精度浮點(diǎn)數(shù)#define INT8U unsigned char#define INT16U unsigned intsbit K1 = P10;/按鍵1sbit K2 = P11;/按鍵2sbit K3 = P12;/按鍵3sbit K4 = P13;/按鍵4#define KEY_CHK_TIM 10 /按鍵檢測(cè)時(shí)間 u8 _g_key_value; /獲取到按鍵的值跑馬燈數(shù)組:code u16 dispcode16= 0xfeff,0xfdff,0xfbff,0xf7ff,0xefff,0xdfff,0xbfff,0x7fff,0xfffe,

15、0xfffd,0xfffb,0xfff7,0xffef,0xffdf,0xffbf,0xff7f;雙流水燈數(shù)組:code u16 dispcode116=0xfe7f,0xfc3f,0xf81f,0xf00f,0xe007,0xc003,0x8001,0x0000,0x7ffe,0x3ffc,0x1ff8,0x0ff0,0x07e0,0x03c0,0x0180,0x0000;定時(shí)器初始化函數(shù):void time_init(void) TMOD |= 0x01; TH0 = 0xf8; TL0 = 0x2f; /設(shè)定定時(shí)器初值(65535-63535)大約60ms TR0 = 1; /打開(kāi)定時(shí)器

16、 ET0 = 1; /開(kāi)中斷 EA = 1; ES = 1; (2)跑馬燈運(yùn)行方式:void disp0(void) /調(diào)用前面的跑馬燈數(shù)組u8 i; /定義ifor(i = 0 ;i8; / P0口運(yùn)行第二行數(shù)組P2 = dispcodei; /P1口運(yùn)行第一行數(shù)組delay_ms(100); /延時(shí)100ms(3)鴛鴦燈運(yùn)行方式:void disp1(void) delay_ms(100); /延時(shí)100ms P0 = 0xaa; /P0口8個(gè)LED單數(shù)亮 P2 = 0xaa; /P0口8個(gè)LED燈亮 delay_ms(100); P0 = 0x55; /雙數(shù)燈亮 P2 = 0x55; /

17、雙數(shù)燈亮 delay_ms(100); /延時(shí)100ms(4)雙流水燈運(yùn)行方式:void disp2(void)u8 i;for(i = 0 ;i8; /P0口運(yùn)行第二行數(shù)組,逐個(gè)點(diǎn)亮,向中間P2 = dispcode1i; /P2口運(yùn)行第一行數(shù)組,逐個(gè)點(diǎn)亮,向中間delay_ms(100);for(i = 8 ;i8; /向兩邊亮P2 = dispcode1i; /向兩邊亮delay_ms(100); /延時(shí)100ms (5)按鍵掃描函數(shù):void key_scan(void)staticu16 k1_pre_kep_tim = 0; /k1按鍵按下保持時(shí)間staticu8k1_press_

18、flag = 0; /k1按鍵按下標(biāo)志staticu8k1_short_press_flag=0; /k1短按觸發(fā)標(biāo)志staticu16 k2_pre_kep_tim = 0; /k2按鍵按下保持時(shí)間staticu8k2_press_flag = 0; /k2按鍵按下標(biāo)志staticu8k2_pre_ctn_tim=0; /按鍵連續(xù)觸發(fā)的間隔延時(shí)計(jì)數(shù)staticu16 k3_pre_kep_tim = 0; /k3按鍵按下保持時(shí)間staticu8k3_press_flag = 0; /k3按鍵按下標(biāo)志staticu8k3_pre_ctn_tim=0; /k1短按觸發(fā)標(biāo)志staticu16 k4

19、_pre_kep_tim = 0; /k4按鍵按下保持時(shí)間staticu8k4_press_flag = 0; /k4按鍵按下標(biāo)志if (K1 = 1) /當(dāng)按鍵松開(kāi)為真k1_pre_kep_tim = 0; /k1按鍵按下保持時(shí)間清零k1_press_flag = 0; /k1按鍵按下標(biāo)志清零if (k1_short_press_flag =1 ) /短按標(biāo)志為1k1_short_press_flag = 0; /短按標(biāo)志清零_g_key_value = 1; /觸發(fā)1號(hào)短按鍵else if (k1_press_flag = 0)k1_pre_kep_tim+; /累加定時(shí)中斷次數(shù)if (k

20、1_pre_kep_tim KEY_CHK_TIM)k1_short_press_flag = 1; /短按標(biāo)志置1if (k1_pre_kep_tim 300)k1_pre_kep_tim = 0; /中斷計(jì)數(shù)清零k1_short_press_flag = 0;/清除按鍵短按的有效標(biāo)志k1_press_flag = 1;/自鎖按鍵置位,避免一直觸發(fā)_g_key_value = 11;/觸發(fā)長(zhǎng)按(6)主程序:if (con_f = 1)disp0(); /只運(yùn)行跑馬燈if (con_f = 2)disp1(); /只運(yùn)行鴛鴦燈if (con_f = 3)disp2(); /只運(yùn)行雙流水if (con_f = 4)disp0(); /循環(huán)以上三種disp1();disp2(); 五、組裝調(diào)試5.1 硬件硬件包括MCS-51單片機(jī),LED發(fā)光二極管,晶振,電容,開(kāi)關(guān),電源,電阻及導(dǎo)線。將所有硬件配齊,按電路原理圖組裝好電路,在電路板上一一對(duì)應(yīng),所有硬件準(zhǔn)備就緒后,接通電源,軟硬結(jié)合。首先用燒錄軟件給單片機(jī)芯片加載*.hex文件,等待加載完畢,運(yùn)行電路。當(dāng)按下K1時(shí),跑馬燈開(kāi)始,16個(gè)LED燈從上到下逐個(gè)點(diǎn)亮,第一個(gè)燈亮,然后滅,然后每個(gè)間隔時(shí)間為100ms;當(dāng)按下K2時(shí),鴛鴦燈開(kāi)始,16個(gè)LED燈先單數(shù)亮,然后雙數(shù)亮,間隔時(shí)間也是100ms;當(dāng)K3按下

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論