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