陜西科技大學 顯示器驅動課程設計任務書 電信 學院 電子 專業 141 班級 學生: 曹 帥
題目: 點陣字符LCD靜態數字顯示
課程設計從 2017 年 12月 25 日起到 2018 年 1 月 7 日
1、課程設計的內容和要求(包括原始數據、技術要求、工作要求等):
熟悉51系列(兼容)單片機軟件開發系統Keil C51集成開發環境(u Vison系列編譯器)和Proteus電路分析與實物仿真軟件。
了解點陣字符LCD模塊的內部結構及字符字模,熟悉點陣字符LCD顯示器驅動的基本原理。設計點陣字符LCD顯示器的驅動電路,編寫程序實現在點陣字符LCD顯示器上的靜態數字顯示。
電路方面主要包括以下3部分。(a)設計單片機的最小系統(包括復位電路和外接的晶振電路),并確定相關元器件參數。(b)設計單片機與點陣字符LCD模塊間的控制線,主要包括控制字符LCD顯示器的數據/指令寄存器選擇、讀/寫選擇、使能信號和I/O數據傳輸線等連線。(c)采用直接訪問時單片機P0口的上拉電阻; LCD模塊的電源及偏壓電路。
編寫點陣字符LCD顯示器靜態數字顯示程序,實現數字(0—9)的信息顯示。顯示內容自定,如顯示學號。
2、對課程設計成果的要求〔包括圖表、實物等硬件要求〕:
(1)利用電路設計軟件(Proteus 軟件)繪制陣字符LCD模塊驅動電路的原理圖,并列出元器件清單。原理圖應包括標題欄。
(2)編寫陣字符LCD顯示器靜態數字顯示的匯編語言或C語言源程序,并給出程序流程圖。
(3)在Keil C51與Proteus的聯機調試下完成的陣字符LCD顯示器靜態數字顯示的仿真結果或制作實物。
(4)在課程設計報告中對上述內容作適當說明。
3、課程設計工作進度計劃:
時間 | 設計任務及要求 | 12.25-12.26
| 查閱資料,確定設計方案
| 12.27-12.28
| 熟悉點陣字符LCD模塊的結構及工作原理
| 12.29-12.30
| 熟悉設計軟件(Keil C51和Proteus)
| 12.31
| 設計點陣字符LCD模塊的驅動電路
| 1.1-1.2
| 編寫點陣字符LCD顯示器的靜態數字顯示程序
| 1.3-1.4
| 硬件電路與驅動程序的調試、仿真/實物制作(選作)
| 1.5-1.6
| 撰寫課程設計報告
| 1.7
| 驗收設計成果,交課程設計報告
|
指導教師: 日期:
教研室主任: 日期:
目 錄
1 選題背景
2 方案論證
2.1設計原理
2.2硬件方案
2.3軟件方案
2.4方案特點
3 點陣字符LCD靜態數字顯示設計過程論述
3.1系統硬件框圖設計
3.2系統原理圖設計
3.3系統軟件設計
3.3.1程序流程圖
3.3.2軟件代碼
4 結果分析
5 總結
6 設計體會
參考文獻
1 選題背景本課程設計命題為點陣字符LCD靜態數字顯示,涉及顯示技術、電子技術、單片微型計算機、程序設計等相關課程內容,針對LCD顯示器設計驅動電路,編寫驅動程序。要求學生熟悉51系列(兼容)單片機軟件開發系統Keil C51集成開發環境(u Vison系列編譯器)和Proteus電路分析與實物仿真軟件。了解點陣字符LCD模塊的內部結構及字符字模,熟悉點陣字符LCD顯示器驅動的基本原理。設計點陣字符LCD顯示器的驅動電路,編寫程序實現在點陣字符LCD顯示器上的靜態數字顯示。通過本次課設,使學生運用上述專業知識,進行一次綜合性訓練。既有助于鞏固學生所學專業知識、培養獨立設計能力、工程繪圖能力、編寫技術報告,提高綜合運用知識的能力,也能為畢業設計以及未來工作打下基礎。 2 方案論證2.1設計原理 以AT89C51單片機為核心,編寫相應的軟件程序,設計復位電路以及外界晶振電路、上拉電阻、偏壓電路等使單片機與點陣字符LCD模塊(LM016L)相連接最終實現靜態數字(201412040112)的顯示。 2.2硬件方案硬件電路由三部分組成,即單片機復位電路、外接的晶振電路、LCD顯示電路。各部分實現功能及設計概要如下。 - 單片機復位電路、外接的晶振電路:單片機正常工作需要
- LCD顯示電路:顯示數字字符信息
- 復位電路設計概要:采用手動按鈕復位采用方法是在RST端和正電源Vcc之間 接一個按鍵開關而本設計晶振采用的是1MHz因此起振時間為10ms,由于人的動作再快也會使按鈕保持接通達數十毫秒,所以完全滿足復位的時間要求。
- LCD顯示電路設計概要:本次課設任務是點陣字符靜態數字顯示,因此選擇LM016L具備字符發生器的顯示器件。
表2-1 LM016L引腳功能 編 號 | 符 號 | 引腳說明 | 編 號 | 符 號 | 引腳說明 | 1 | VSS | 電源地 | 9 | D2 | 數據 | 2 | VDD | 電源正極 | 10 | D3 | 數據 | 3 | VEE | 負電壓供電 | 11 | D4 | 數據 | 4 | RS | 數據/命令 | 12 | D5 | 數據 | 5 | R/ W | 讀/寫選擇 | 13 | D6 | 數據 | 6 | E | 使能信號 | 14 | D7 | 數據 | 7 | D0 | 數據 |
|
|
| 8 | D1 | 數據 |
|
|
|
2.3軟件方案本設計軟件部分的主要完成功能是定義1602控制引腳、確定要顯示的數字字符內容即學號、讀指令數據操作、寫指令數據操作、LCD初始化。根據軟件的功能劃分軟件設計模塊結構,如圖2-1所示。
圖2-1 軟件功能模塊結構(見附件)
各個模塊具體任務如下: - LCD初始化模塊:設置顯示模式,開光標和光標閃爍,清屏。
- 讀指令數據操作:判斷是否忙碌
- 寫指令數據操作:完成寫指令和寫數據操作,實現字符的顯示
2.4方案特點該方案軟件方面采用C語言進行編譯,相對于匯編語言其具有更加靈活,可移植性強,庫函數多等特點。硬件方面選用LM016L作為LCD顯示屏是因為,用LCD顯示一個字符時比較復雜,但LM016L內帶字符發生器,顯示字符就變得簡單,讓控制器工作在文本方式,根據在LCD上開始顯示的行列號及每行的列數找出顯示RAM對應的地址,設立光標,在此送上該字符對應的代碼即可。 3 點陣字符LCD靜態數字顯示設計過程論述3.1系統硬件框圖設計根據確定的硬件方案設計系統硬件框圖,包含晶振電路為單片機提供時鐘信號,復位電路保證可以進行復位操作以及LCD顯示電路進行數字顯示。如圖3-1所示。 圖3-1系統硬件框圖(見附件)
3.2系統原理圖設計根據設計要求和硬件框圖設計系統原理圖,如圖3-2所示。 
圖3-2 系統原理圖 單片機的管腳資源分配:其中P0口為作為LCD數據信號口,P3.4口作為使能信號端 P3.5口作為數據/命令選擇端,P3.6口作為讀/寫選擇端,硬件系統元器件清單如下表3-1所示。 表3-1硬件系統元器件清單 編 號 | 符 號 | 屬性 | 1 | R1 | 10K | 2 | R2 | 10K | 3 | C1 | 10uf | 4 | C2 | 30pf | 5 | C3 | 30pf | 6 | U1 | AT89C51 | 7 | LCD1 | LM016L | 8 | RP1 | 10K | 9 | X1 | 4pf |
|
|
| 3.3系統軟件設計3.3.1程序流程圖 該設計流程大致包括液晶屏初始化、清屏、確定顯示字符地址、定位光標位置、字符顯示等具體流程如下圖3-3所示。
      
 
   圖3-3 程序流程圖 3.3.2軟件代碼 1) LCD頭文件功能2) LCD顯示子程序文件功能- 保證LCD處于空閑狀態
- 根據MODE類型執行寫數據或寫指令操作
- 執行清屏、光標顯示設置等操作
- 確定光標位置,寫字符串數據
最后通過使用keil uvison4軟件將編輯好的程序文件錄入protues軟件中的硬件原理圖的AT89C51單片機中進行仿真,并成功得到學號的顯示,完成設計任務。 4 結果分析該設計最終將軟件程序錄入單片機后進行仿真測試,成功的在液晶顯示屏上進行持續穩定的靜態數字即201412040112學號的顯示。因此可以得出該設計的硬件方案與軟件方案的正確性,更進一步論證了硬件電路原理圖的合理性,包括其中的電容、電阻、晶振等基本元器件參數確定是完全符合設計要求的。同時也驗證了軟件程序的功能性是滿足要求的,可以成功實現所定義的數字顯示功能并且不會出現其他內容的顯示,沒有出現花屏等其他錯誤的顯示效果,足以看出該軟件程序的正確性。進而更加驗證了以AT89C51單片機為核心,編寫相應的軟件程序,設計復位電路以及外界晶振電路、上拉電阻、偏壓電路等使單片機與點陣字符LCD模塊(LM016L)相連接最終實現靜態數字(201412040112)的顯示設計原理的正確性。仿真結果圖如圖4-1所示。 圖4-1 仿真結果圖 5 總結此次課設雖然已經成功完成仿真要求,但其中的關鍵步驟的正確性是該設計能夠成功實現的基礎,最重要的兩點就是,單片機與液晶的接口要滿足液晶的時序要求,軟件編程中是要進行正確的初始化、操作及寫入顯示內容的代碼。因此將這兩個關鍵步驟的設計內容成功確定是本次課設的工作重點,在完成了大體的方案步驟后,接下來便是對硬件方案中的一些細節進行優化,參數進行確定,對軟件程序進行功能性測試等工作,最終成功完成課設設計任務。 6 設計體會本次課設從 2017 年 12月 25 日起到 2018 年 1 月 7 日歷時兩周,從開始的查閱資料,初步確定設計方案,然后學習protues以及keil uvison4軟件的基本功能操作,在具備了一定的軟件使用能力后便開始進行硬件電路的設計以及軟件程序的編寫,最后進行電路與驅動程序的調試與仿真并成功得出結果,整個設計過程中遇到過一些問題,但在老師的兩次課設指導,并且查閱資料以及與同學的交流下都得以解決,而我認為課設得出結果是重要的,但是在這個查閱、學習、交流、集各方面知識為自己所用的這個過程才是我最大的收獲,因為這個過程不單單是學習一定的書本知識那樣簡單,其對于我們以后的生活和工作的是具有巨大的幫助的,此次課設雖然已經完成,但是它所帶給我的啟發與解決問題的思路和方法將會在我以后的工作和生活中一直幫助著我.
參考文獻
[1]作者袁東 周新國.51單片機典型應用30例.清華大學出版社.出版時間2016年7月1日 [2]作者徐愛鈞 徐陽 Keil C51單片機高級語言應用編程與實踐.電子工業出版社.出版時間2013年12月1日
- #include <reg52.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
-
- sbit En = P3^4;
- sbit Rs = P3^5;
- sbit Wr = P3^6; //定義1602控制引腳
- uchar code D[]={"2014120404112"};
-
- /*===========================================================
- 1602需要的函數
- ========================================================== */
- void Read_Busy() //讀1602指令,判斷是否忙碌
- {
- uchar busy;
- P0 = 0xff;
- Rs = 0;
- Wr = 1;
- do
- {
- En = 1;
- busy = P0;
- En = 0;
- }while(busy & 0x80);
- }
-
- void WrOrder_1602(uchar order) //1602寫指令
- {
- Read_Busy();
- Rs = 0;
- Wr = 0;
- P0 = order;
- En = 1;
- En = 0;
- }
- void Init_1602() //液晶初始化
- {
- WrOrder_1602(0x38); //設置顯示模式
- WrOrder_1602(0x0f); // 開光標和光標閃爍
- WrOrder_1602(0x01); //清屏
-
- WrOrder_1602(0x06); //寫一數據后光標自動加一
- }
-
- void WrData_1602(uchar Data) //寫一個數據
- {
- Read_Busy();
- Rs = 1;
- Wr = 0;
- P0 = Data;
- En = 1;
- En = 0;
- }
-
- void WrD_1602(uchar x, uchar n, uchar *D) //第x行第n(取0~15)個位置開始寫一個字符串
- {
- uchar i=0;
- if(x==1)
- {
- WrOrder_1602(0x80|n);//第一行第n個位置開始
- }
- else
- {
- WrOrder_1602(0x80|0x40|n);//第二行第n個位置開始
- }
- while(D[i]!='\0')
- {
- Read_Busy();
- Rs = 1;
- Wr = 0;
- P0 = D[i];
- En = 1;
- En = 0;
- i++;
- }
- }
-
-
- void main(void)
- {
- Init_1602(); //液晶初始化
- WrOrder_1602(0x38); //設置顯示模式
- WrOrder_1602(0x0f); // 開光標和光標閃爍
- WrOrder_1602(0x01); //清屏
- WrOrder_1602(0x06); //寫一數據后光標自動加一
-
-
- …………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png (54.06 KB, 下載次數: 41)
下載附件
2018-1-16 23:16 上傳
0.jpg (26.61 KB, 下載次數: 49)
下載附件
2018-1-16 23:15 上傳
全部資料51hei下載地址:
點陣字符LCD靜態數字顯示.rar
(2.55 MB, 下載次數: 57)
2018-1-16 10:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|