目錄
1 選題背景1
2 方案論證1
2.1 課程設(shè)計(jì)的內(nèi)容和要求1
2.2 設(shè)計(jì)方案2
3 設(shè)計(jì)過(guò)程3
3.1 系統(tǒng)框圖3
3.2 控制單元設(shè)計(jì)3
3.3 行驅(qū)動(dòng)單元設(shè)計(jì)3
3.4 列驅(qū)動(dòng)單元設(shè)計(jì)4
3.5 元器件清單5
3.6系統(tǒng)軟件設(shè)計(jì)5
3.6.1程序框圖簡(jiǎn)介5
3.6.2 程序分析5
4 結(jié)果分析13
4.1程序調(diào)試與仿真13
4.2仿真結(jié)果13
5 設(shè)計(jì)總結(jié)14
參考文獻(xiàn)15
4 結(jié)果分析 4.1 程序調(diào)試與仿真 軟件程序編寫后,將KEIL軟件中輸出文件載入PROTEUS軟件進(jìn)行仿真。按照顯示的結(jié)果進(jìn)行程序調(diào)試。多次調(diào)試后,不再出現(xiàn)錯(cuò)誤顯示,并且顯示穩(wěn)定清晰。說(shuō)明此方案可行。 4.2 仿真結(jié)果 運(yùn)行程序,在16×16點(diǎn)陣顯示屏上依次顯示0-9十個(gè)字符,并且循環(huán)顯示。運(yùn)行結(jié)果如圖4-1、圖4-2所示。 
圖4-1 仿真圖1 圖4-2 仿真圖2
5 設(shè)計(jì)總結(jié) 經(jīng)過(guò)一段時(shí)間的工作,終于完成了基于51單片機(jī)的LED顯示系統(tǒng)的設(shè)計(jì),項(xiàng)目所要求的功能全部達(dá)到。通過(guò)這次設(shè)計(jì)收獲頗多,不僅是所作題目涉及到的軟硬件知識(shí)還有更為重要的實(shí)際經(jīng)驗(yàn)和過(guò)程中所發(fā)現(xiàn)的問(wèn)題。 接手題目之后從互聯(lián)網(wǎng)上對(duì)LED進(jìn)行了詳細(xì)的資料收集,從技術(shù)和產(chǎn)業(yè)的兩方面對(duì)LED進(jìn)行了了解。通過(guò)了解我認(rèn)識(shí)到LED是一門當(dāng)今應(yīng)用非常廣泛的技術(shù),整個(gè)產(chǎn)業(yè)每年都會(huì)有巨大的產(chǎn)值而且技術(shù)還在不斷發(fā)展和創(chuàng)新。 從設(shè)計(jì)之初就確定了參照大屏幕顯示屏的實(shí)現(xiàn)方法和實(shí)際情況設(shè)計(jì)一款小屏幕的LED點(diǎn)陣顯示屏。在查閱了大量的大屏幕顯示屏資料后確定了題目的設(shè)計(jì)方案。整個(gè)設(shè)計(jì)采用AT89C51做核心控制器,74HC138和74HC595組成譯碼電路。在實(shí)現(xiàn)這一設(shè)計(jì)的過(guò)程中所遇到的問(wèn)題和困難給我留下了寶貴的經(jīng)驗(yàn)和深刻教訓(xùn)。 隨著課程設(shè)計(jì)的進(jìn)行,對(duì)LED的了解也越來(lái)越深入。認(rèn)為L(zhǎng)ED技術(shù)也會(huì)進(jìn)一步發(fā)展,LED應(yīng)用將會(huì)更加廣泛。 設(shè)計(jì)結(jié)束了,但學(xué)習(xí)還在繼續(xù)。我相信通過(guò)此次設(shè)計(jì)所得到的知識(shí)、心得、經(jīng)驗(yàn)?zāi)酥粮惺芏紩?huì)讓我在以后的日子里受益匪淺。
1選題背景 LED顯示屏是一種通過(guò)控制半導(dǎo)體發(fā)光二極管的顯示方式, 用來(lái)顯示文字、 圖形、圖像、動(dòng)畫、行情、視頻、錄像信號(hào)等各種信息的顯示屏幕。圖文顯示屏可與計(jì)算機(jī)同步顯示漢字、英文文本和圖形;視頻顯示屏采用微型計(jì)算機(jī)進(jìn)行控制,圖文、圖像并茂,以實(shí)時(shí)、同步、清晰的信息傳播方式播放各種信息,還可顯示二維、三維動(dòng)畫、錄像、電視、 VCD節(jié)目以及現(xiàn)場(chǎng)實(shí)況。 LED顯示屏顯示畫面色彩鮮艷,立體感強(qiáng),靜如油畫,動(dòng)如電影,廣泛應(yīng)用于車站、碼頭、機(jī)場(chǎng)、商場(chǎng)、醫(yī)院、賓館、銀行、證券市場(chǎng)、建筑市場(chǎng)、拍賣行、工業(yè)企業(yè)管理和其它公共場(chǎng)所。在實(shí)際應(yīng)用中的顯示屏由于成本和可靠性的因素常采用一種稱為動(dòng)態(tài)掃描的顯示方法[1]。 2 方案論證 2.1 課題要求 了解點(diǎn)陣LED顯示器結(jié)構(gòu)及字符字模(字符代碼),熟悉點(diǎn)陣LED顯示器驅(qū)動(dòng)的基本原理。設(shè)計(jì)16×16點(diǎn)陣LED顯示器的驅(qū)動(dòng)電路,并編寫程序?qū)崿F(xiàn)在16×16點(diǎn)陣LED顯示器上的字符滾動(dòng)顯示。16×16點(diǎn)陣LED顯示器可由4塊8×8點(diǎn)陣LED顯示器構(gòu)成。 電路方面主要包括以下3部分。設(shè)計(jì)單片機(jī)的最小系統(tǒng)(包括復(fù)位電路和外接的晶振電路),并確定相關(guān)元器件參數(shù)。采用動(dòng)態(tài)驅(qū)動(dòng)的方式,設(shè)計(jì)單片機(jī)并行端口、移位寄存器、譯碼器或鎖存器等與16×16點(diǎn)陣LED顯示器的驅(qū)動(dòng)電路,主要包括控制點(diǎn)陣LED行和列的連線。采用移位寄存器、譯碼器或鎖存器驅(qū)動(dòng)點(diǎn)陣LED顯示器時(shí),設(shè)計(jì)單片機(jī)與移位寄存器、譯碼器或鎖存器間的控制連線。 編寫16×16點(diǎn)陣LED顯示器字符(串)滾動(dòng)顯示程序,實(shí)現(xiàn)數(shù)字(0—9)或英文字符的滾動(dòng)顯示。 2.2 設(shè)計(jì)方案 2.2.1硬件設(shè)計(jì)方案 以PC機(jī)作為上位機(jī)存儲(chǔ)和處理顯示內(nèi)容用串行通信的方式將顯示內(nèi)容和控制指令傳輸?shù)絾纹瑱C(jī)系統(tǒng),單片機(jī)根據(jù)上位機(jī)傳輸來(lái)的內(nèi)容和指令通過(guò)端口譯碼擴(kuò)展后驅(qū)動(dòng)4塊8×8LED點(diǎn)陣模塊構(gòu)成的16×16的LED點(diǎn)陣顯示屏。題目將以此方案為指導(dǎo)思想展開(kāi)具體的硬件電路設(shè)計(jì)。 
圖2-1 硬件設(shè)計(jì)方案2.2.1軟件設(shè)計(jì)方案 (1)單片機(jī)編程語(yǔ)言選擇現(xiàn)在主要運(yùn)用的單片機(jī)編程語(yǔ)言為匯編語(yǔ)言和C語(yǔ)言。 兩種語(yǔ)言相比較各有優(yōu)點(diǎn)。匯編語(yǔ)言是面向機(jī)器的程序設(shè)計(jì)語(yǔ)言,是一種功能很強(qiáng)的程序設(shè)計(jì)語(yǔ)言,也是利用計(jì)算機(jī)所有硬件特性并能直接控制硬件的語(yǔ)言。其具有執(zhí)行速度快,占內(nèi)存空間少等優(yōu)點(diǎn),但在編寫復(fù)雜程序時(shí)具有明顯的局限性,匯編語(yǔ)言依賴于具體的機(jī)型,不能通用,也不能在不同機(jī)型之間移植。 C語(yǔ)言是一種源于編寫UNIX操作系統(tǒng)的語(yǔ)言,它是一種結(jié)構(gòu)化語(yǔ)言,可產(chǎn)生壓縮代碼。C語(yǔ)言結(jié)構(gòu)是以括號(hào){ }而不是子和特殊符號(hào)的語(yǔ)言。C可以進(jìn)行許多機(jī)器級(jí)函數(shù)控制而不用匯編語(yǔ)言。與匯編相比,有如下優(yōu)點(diǎn):對(duì)單片機(jī)的指令系統(tǒng)不要求了解,僅要求對(duì)51的存儲(chǔ)器結(jié)構(gòu)有初步了解;寄存器分配、不同存儲(chǔ)器的尋址及數(shù)據(jù)類型等細(xì)節(jié)可由編譯器管理;程序有規(guī)范的結(jié)構(gòu),可分為不同的函數(shù)。這種方式可使程序結(jié)構(gòu)化;將可變的選擇與特殊操作組合在一起的能力,改善了程序的可讀性;編程及程序調(diào)試時(shí)間顯著縮短,從而提高效率;提供的庫(kù)包含許多標(biāo)準(zhǔn)子程序,具有較強(qiáng)的數(shù)據(jù)處理能力;寄存器分配、不同存儲(chǔ)器的尋址及數(shù)據(jù)類型等細(xì)節(jié)可由編譯器管理;已編好程序可容易的植入新程序,因?yàn)樗哂蟹奖愕哪K化編程技術(shù)。C語(yǔ)言作為一種非常方便的語(yǔ)言而得到廣泛的支持,C語(yǔ)言程序本身并不依賴于機(jī)器硬件系統(tǒng),基本上不做修改就可根據(jù)單片機(jī)的不同較快地移植過(guò)來(lái)。 基于以上理由決定采用C語(yǔ)言為該顯示系統(tǒng)的編程語(yǔ)言。 (2)系統(tǒng)軟件編譯工具選擇C語(yǔ)言編寫的程序并不能被單片機(jī)直接執(zhí)行還需要編譯為單片機(jī)可執(zhí)行的機(jī)器語(yǔ)言。因此在系統(tǒng)軟件設(shè)計(jì)中,編譯器必不可少。支持MCS-51用C語(yǔ)言編程的編譯器主要有兩種:Franklin C51編譯器和KEILC51編譯器。目前在單片機(jī)開(kāi)發(fā)中普遍都是使用KEIL C51來(lái)進(jìn)行編譯。 因此軟件設(shè)計(jì)最終方案為采用C語(yǔ)言為程序語(yǔ)言,KELC為編譯工具按照控制、通信、顯示等幾個(gè)功能模塊來(lái)編寫程序。 3 設(shè)計(jì)過(guò)程 3.1 系統(tǒng)框圖 圖3-1 硬件原理圖 3.2 控制單元設(shè)計(jì)控制電路設(shè)計(jì)中采用的是單片機(jī)系統(tǒng),該系統(tǒng)必須要是工作在一個(gè)最小系統(tǒng)(指單片機(jī)的可以的最小配置系統(tǒng))。根據(jù)功能選擇一定的單片機(jī)端口添加外圍的器件。在該系統(tǒng)中,P1各口主要用作LED顯示數(shù)據(jù)的列控制輸出。具體接法為:P1.0,P1.1,P1.2,P1.3分別接74HC138的A端,B端,C端,D端。C端向74HC138送入串行數(shù)據(jù)經(jīng)過(guò)其轉(zhuǎn)換后并行輸出;P2各口主要用作LED顯示數(shù)據(jù)的行控制輸出,P2.1,P2.2接595的SH_CP端,ST_CP端,P2.0接DS端控件系統(tǒng)的行輸入。 
圖3-2 控制部分電路圖 3.3 行驅(qū)動(dòng)單元設(shè)計(jì)行驅(qū)動(dòng)電路由74HC595構(gòu)成,它可以實(shí)現(xiàn)在顯示本列各行數(shù)據(jù)的同時(shí),傳送下一列的行數(shù)據(jù)。數(shù)據(jù)在SH_CP的上升沿輸入,在ST_CP的上升沿進(jìn)入的存儲(chǔ)寄存器中去。如果兩個(gè)時(shí)鐘連在一起,則移位寄存器總是比存儲(chǔ)寄存器早一個(gè)脈沖。移位寄存器有一個(gè)串行移位輸入(DS),和一個(gè)串行輸出(Q7),和一個(gè)異步的低電平復(fù)位,存儲(chǔ)寄存器有一個(gè)并行8位的,具備三態(tài)的總線輸出,當(dāng)使能OE時(shí)(為低電平),存儲(chǔ)寄存器的數(shù)據(jù)輸出到總線。 
圖3-3 行驅(qū)動(dòng)部分電路圖3.4. 列驅(qū)動(dòng)單元設(shè)計(jì) 譯碼電路的功能是為了解決單片機(jī)I/O端口不足。列譯碼所用器件為串并轉(zhuǎn)換器74HC138。如果不采用譯碼電路完全依靠單片機(jī)的端口輸出來(lái)控制16×16的LED點(diǎn)陣屏顯示,需要32個(gè)端口。而采用了譯碼電路后僅僅需要7~9個(gè)端口便可實(shí)現(xiàn)控制顯示。大大減少了I/O口的占用數(shù)目,為單片機(jī)擴(kuò)展其他功能預(yù)留下來(lái)了空間。兩個(gè)74HC138聯(lián)成4線-16線譯碼器,三級(jí)管接顯示屏可以解決顯示屏供電不足的問(wèn)題。鎖存器74HC595接74HC138的使能端,實(shí)現(xiàn)對(duì)74HC138的使能控制,達(dá)到鎖存功能,A,B,C為138譯碼器的三個(gè)地址輸入。 
圖3-4 列驅(qū)動(dòng)部分電路圖 3.5 元器件清單電路設(shè)計(jì)需要的元器件包括電阻、電容、單片機(jī)、8×8點(diǎn)陣LED、74HC138、74HC595等,具體元器件數(shù)量及規(guī)格如下表所示。 表3-1 元器件清單 | | | 電阻 電容 電容 單片機(jī) 8×8點(diǎn)陣LED 74HC138 74HC595 | | 1個(gè) 1個(gè) 2個(gè) 1個(gè) 4個(gè) 2個(gè) 2個(gè) |
3.6 系統(tǒng)軟件設(shè)計(jì) 3.6.1 程序框圖簡(jiǎn)介 程序主要由頭文件、端口定義、字模定義、函數(shù)等組成。根據(jù)程序的設(shè)計(jì)原理,主函數(shù)流程如圖3-5所示。 圖3-5 流程圖(見(jiàn)附件) 3.6.2 程序分析 程序主要由頭文件、端口定義、字模定義、函數(shù)、循環(huán)等組成,實(shí)現(xiàn)數(shù)字0到9的左移循環(huán)顯示。
單片機(jī)源程序如下:
- #include <reg51.h> //頭文件//
- #define u8 unsigned char //定義無(wú)符號(hào)字符型變量//
- #define u16 unsigned int //定義無(wú)符號(hào)整數(shù)型變量//
- #define SPEED 10
- //端口定義//
- sbit DS=P2^0;
- sbit SH=P2^1;
- sbit ST=P2^2;
-
- u8 code table1[]={ //定義高八位數(shù)組//
-
- //字模定義//
- /*-- 文字: --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-
- …………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
-
- /*-- 文字: --*/
- /*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
-
- void senddata(u8,u8); //定義函數(shù)//
- void delay(u8);
-
- void main()
- {
- u8 i,j,k,m,n=0; //定義無(wú)符號(hào)字符型變量//
- while(1)
- {
- for(i=0;i<168;i++) //i確定16列的起點(diǎn),一共2323*8-16=168//
- {
- for(j=0;j<SPEED;j++) //控制顯示速度,每一幅循環(huán)顯示幾次,達(dá)到穩(wěn)定作用//
- {
- for(k=0;k<16;k++) //K確定列,控制每個(gè)屏幕//
- {
- m=i+k;
- P1=k; //控制ABCD端口//
- senddata(table1[m],table2[m]); //發(fā)送數(shù)據(jù),第一行高8 位,低8位全部移入595//
- delay(70);
- senddata(0,0); //清屏//
- }
- }
- }
- }
- }
-
- //* 將每行數(shù)據(jù)送至74HC595
- * m為高8位,n為低8位
- * SH為移位時(shí)鐘,ST為鎖存時(shí)鐘 *//
- void senddata(u8 m,u8 n)
- {
- u8 i;
- ST=0;
- for(i=0;i<16;i++) // i=0到15,循環(huán)16次,16位數(shù)據(jù)全部移入芯片//
- {
- SH=0;
- if(i<8)
- {
- DS=0X80&(m<<i); //16進(jìn)制10000000進(jìn)行位與運(yùn)算//
- }
- else
- DS=0X80&(n<<(i-8)); //16進(jìn)制10000000進(jìn)行位與運(yùn)算//
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
http://www.zg4o1577.cn/bbs/dpj-105745-1.html
|