keilc程序設(shè)計課程報告_第1頁
keilc程序設(shè)計課程報告_第2頁
keilc程序設(shè)計課程報告_第3頁
keilc程序設(shè)計課程報告_第4頁
keilc程序設(shè)計課程報告_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、成績評定表學生姓名鹿蕾班級學號1303020207專業(yè)測控技術(shù)與儀器課程設(shè)計題目點陣式液晶上滾屏設(shè)計評語組長簽字:成績?nèi)掌?01 年 月 日課程設(shè)計任務(wù)書學 院自動化與電氣工程學院專 業(yè)測控技術(shù)與儀器學生姓名鹿蕾班級學號1303020207課程設(shè)計題目點陣式液晶上滾屏設(shè)計實踐教學要求與任務(wù):1、熟悉所確定的題目,從問題需求、程序結(jié)構(gòu)、難點及關(guān)鍵技術(shù)等方面進行分析,形成系統(tǒng)的設(shè)計方案; 2、根據(jù)方案設(shè)計硬件電路; 3、軟件編程并調(diào)試;4、完成課程設(shè)計報告,打印程序,給出運行結(jié)果。工作計劃與進度安排:第18周(12月28日-12月31日):根據(jù)設(shè)計要求和內(nèi)容查閱參考文獻或資料,提出設(shè)計方案,進行原

2、理設(shè)計。第20周(1月11日-1月15日):根據(jù)設(shè)計方案,完善設(shè)計,并進行硬件及軟件調(diào)試,測試,撰寫課程設(shè)計報告,答辯。指導教師: 201 年 月 日專業(yè)負責人:201 年 月 日學院教學副院長:2015年 月 日目錄一 設(shè)計要求11.1設(shè)計要求11.1.1 功能及技術(shù)指標要求11.1.2設(shè)計內(nèi)容.11.2 設(shè)計目的.1二 系統(tǒng)整體設(shè)計方案.22.1總體方案.22.2系統(tǒng)方框圖22.3 設(shè)計元器件連接說明.2三 點陣式液晶下滾屏的設(shè)計.3四 系統(tǒng)運行結(jié)果及分析.74.1 程序調(diào)試及運行結(jié)果.74.2 結(jié)果分析.94.3 心得體會.9五 參考文獻.9六 附錄106.1 程序代碼.106.2 相應(yīng)

3、漢字的顯示代碼.18一 設(shè)計要求1.1設(shè)計要求1.1.1 功能及技術(shù)指標要求利用51單片機+12864點陣液晶顯示器設(shè)計漢字滾屏(上滾)系統(tǒng),滾動周期小于5秒。1.1.2 設(shè)計內(nèi)容完成以下設(shè)計環(huán)節(jié):1)(可選)使用Altium Desinger開發(fā)工具,設(shè)計電路原理圖與PCB制板圖。2)使用Uvision2開發(fā)平臺,采用C語言或匯編語言設(shè)計軟件程序。3)使用PROTEUS仿真軟件,設(shè)計仿真原理圖并運行軟件程序,完成系統(tǒng)仿真。1.2設(shè)計目的(1)利用51單片機+12864點陣液晶顯示器設(shè)計漢字滾屏(上滾)系統(tǒng),滾動周期小于5秒;(2)熟悉51單片機的內(nèi)部結(jié)構(gòu)和功能,合理使用其內(nèi)部寄存器,能夠完成

4、相關(guān)軟件編程設(shè)計工作;(3)對軟件編程、排錯調(diào)試、相關(guān)軟件的使用技能等方面得到較全面的鍛煉和提高;(4)本次課程設(shè)計從硬件和軟件兩個方面入手,全面具體地掌握設(shè)計思路、方法和過程,使理論與實際相結(jié)合,充分地鍛煉了動手能力和思維擴展能力。二 系統(tǒng)整體設(shè)計方案2.1總體方案點陣式LCD液晶顯示,即在了解122*32A的內(nèi)部結(jié)構(gòu),工作原理,編程方法,SED1250的特性,內(nèi)部結(jié)構(gòu),時序特性,各個管教的功能,以及獲取字模的方法后,編寫一個完整的程序用HK-51仿真系統(tǒng)運行后確保無誤,并要在122*32A液晶顯示屏上顯示所要求顯示的內(nèi)容。2.2系統(tǒng)方框圖圖12.3設(shè)計元器件連接說明:點陣式液晶顯示屏與80

5、51單片機管腳連接如下:第1腳:GND接地;第2腳:VCC接5v電源;第3腳:DB7DB0接8051芯片的P0.7P0.0口;第4腳:CS1接8051芯片的P2.3;CS3接8051芯片的P2.4口;第5腳:E端為使能端,當 E 端由高電平跳變成低電平時,液晶模塊執(zhí)行令(接8051芯片的P2.0口)第6腳:RS 為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。(接8051芯片的P2.1口)第7腳:R/W 為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當 RS和 R/W共同為低電平時可以寫入指令或者顯示地址,當 RS 為低電平 R/W 為高電平時可以讀忙信號,當 RS 為高

6、電平 R/W為低電平時可以寫入數(shù)據(jù)。接8051芯片的P2.2口;第8腳:/PES為復位信號,V0為可調(diào);三 點陣式液晶下滾屏的設(shè)計如下圖2所示即為判斷當前LCD的狀態(tài),RS=0, 數(shù)據(jù)指令選擇,D/I(RS)="L" ,表示 DB7DB0 為顯示指令數(shù)據(jù),RW=1; R/W="H" ,E="H"數(shù)據(jù)被讀到DB7DB0。EN=1;EN下降源,_nop_(); /一個短延時。一直進行 while循環(huán),直到dat=0x00 。 圖2 判斷當前狀態(tài)的LCD 如圖3 所示即為液晶顯示屏幕的選擇函數(shù),若CSI=0 CS2=0則顯示全部,若CSI=

7、0 CS2=1則顯示左部,若CSI=1 CS2=0則顯示右部,若CSI=1 CS2=1則液晶不顯示。圖3 液晶顯示屏幕的選擇如圖4所示為延遲函數(shù)的顯示過程,外層i<50,內(nèi)層j<110,否則一直循環(huán)。圖4 延遲函數(shù)主函數(shù)的實現(xiàn)過程如下圖5所示,先判斷LCD的當前狀態(tài),進行清屏操作,執(zhí)行循環(huán),每行128列,每個漢字占有32個字節(jié),通過全屏顯示,將字模上輸入的漢字在液晶屏上顯示出來并實現(xiàn)上滾的效果。開始輸入i;LCD()=12864Clear Screen(0)i=0 Ni<128? Yi+SetStartLine(i);Display(2,0,0*16,0);Display(2

8、,0,0*16,1);Display(2,0,0*16,2); Display(2,0,0*16,3);Display(2,0,0*16,4);Display(2,0,0*16,5)delay(50);圖4.4 主函數(shù)四 系統(tǒng)運行結(jié)果及分析4.1程序調(diào)試及運行結(jié)果1打開Keil C51集成開發(fā)環(huán)境,新建工程,文件,輸入代碼保存名為“text1.c”圖6編譯調(diào)試結(jié)果2.右鍵單擊source group1選中add file to group,選中“text1.c”文件單擊add如圖:圖7添加文件到組3.選中文件夾target1右鍵單擊 options for target,選中output勾選c

9、reat hex如圖:圖8生成text1.hex文件4.打開Proteus仿真系統(tǒng),單擊89c51選中program file選擇“text1.hex”文件,單擊ok圖9添加文件 5.單擊運行,結(jié)果如下圖:圖10運行結(jié)果4.2結(jié)果分析經(jīng)過字模提取漢字后,得到各個漢字,將其輸入到代碼中,結(jié)果如圖5.1所示如上圖可看出輸出結(jié)果出現(xiàn)了亂碼現(xiàn)象,可能原因是在運用字模時可能設(shè)置的參數(shù)有問題。經(jīng)過認真檢驗及調(diào)試,發(fā)現(xiàn)字模參數(shù)設(shè)置中字節(jié)倒序沒有選中。經(jīng)過重新設(shè)置字模參數(shù),縱向取模,字節(jié)倒序,保留,任何時候都取0,設(shè)置完成后再進行一次運行,則出現(xiàn)了正確結(jié)果。4.3 心得體會通過這次課程設(shè)計,不僅讓我了解了單片

10、機的仿真設(shè)計和單片機程序設(shè)計,也讓我真正的明白了LCD屏的顯示功能的強大。從剛開始對實驗不知所措,到老師上課認真講解和同學的熱情解答疑問讓我有了大概的了解,當自己動手做的時候碰到很多問題,在老師的和同學的幫助下慢慢的接近答案,最后終于完成這個課設(shè),我感到一種成就感油然而生。這次給我留下了很深刻的印象,因為課設(shè)給我的不單單是編程上的進步,還提升我處理實際問題的能力以及溝通交流能力,總之十分感謝這次課設(shè)。五 參考文獻1謝維成 楊加國主編單片機原理與應(yīng)用及C51程序設(shè)計,清華大學出版社,六 附錄6.1程序代碼#include <reg51.h>#include <intrins.h

11、>#define uint unsigned int#define uchar unsigned char#define DATA P0 /LCD12864數(shù)據(jù)線 sbit RS=P22; / 數(shù)據(jù)指令 選擇 sbit RW=P21; / 讀寫 選擇 sbit EN=P20; / 讀寫使能 sbit cs1=P24; / 片選1 sbit cs2=P23; / 片選2 /*定義中文字庫*/字體取模時的選項設(shè)置為:點陣格式為陰碼,取模方式為列行式,取模走向為逆向,文字大小為寬x高=16x16 uchar code Hzk=/*- 文字: 你 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬

12、x高=16x16 -*/0x04,0x04,0x04,0x04,0x04,0xFC,0x44,0x44,0x44,0x44,0x44,0xC4,0x04,0x04,0x04,0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,/*- 文字: 若-*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x04,0x04,0x74,0x54,0x54,0x54,0x54,0xFF,0x54,0x54,0x54,0x54,0x74,0x04,0x04,0x00,0x0

13、4,0x04,0x15,0x15,0x15,0x55,0x95,0x7F,0x15,0x05,0x15,0x15,0x1F,0x04,0x04,0x00,/*- 文字: 安 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x10,0x10,0xF0,0x1F,0x10,0x10,0xF0,0x00,0x00,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,0x80,0x41,0x22,0x14,0x08,0x16,0x61,0x00,0x00,0x7F,0x20,0x20,0x20,0x7F,0x00,0x00,/*- 文字: 好 -*/*- 宋

14、體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x10,0x10,0x12,0xD2,0x56,0x5A,0x52,0x53,0x52,0x5A,0x56,0xD2,0x12,0x10,0x10,0x00,0x40,0x30,0x00,0x77,0x85,0x85,0x8D,0xB5,0x85,0x85,0x85,0xE7,0x00,0x10,0x60,0x00,/*- 文字: 便 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x40,0x44,0x54,0x65,0xC6,0x64,0x54,0x44,0x00,0xFC,0x44,0x44,0xC4,

15、0x42,0x40,0x00,0x20,0x12,0x4A,0x82,0x7F,0x02,0x0A,0x92,0x60,0x1F,0x00,0x00,0xFF,0x00,0x00,0x00,/*- 文字: 是 - */*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x0

16、0,/*- 文字: 晴 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x00,0xE0,0x00,0xFF,0x10,0x20,0x08,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0x00,0x00,0x01,0x00,0x00,0xFF,0x00,0x81,0x41,0x31,0x0D,0x03,0x0D,0x31,0x41,0x81,0x81,0x00,/*- 文字: 天 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x00,0x00,0xE0,0x9C,0x84,0x84,0x84,0xF4,0x82,0

17、x82,0x83,0x82,0x80,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x06,0x40,0x80,0x7F,0x00,0x00,0x02,0x04,0x08,0x30,0x00,0x00,;/*狀態(tài)檢查,LCD是否忙*/voidCheckState()Uchar dat;/狀態(tài)信息(判斷是否忙) RS=0; / 數(shù)據(jù)指令選擇,D/I(RS)="L" ,表示 DB7DB0 為顯示指令數(shù)據(jù) RW=1; /R/W="H" ,E="H"數(shù)據(jù)被讀到DB7DB0 do DATA=0x00; EN=1;/EN

18、下降源 _nop_(); /一個短延時 dat=DATA; EN=0;dat=0x80 &dat; /僅當?shù)?位為0時才可操作(判別busy信號) while(!(dat=0x00); /*寫命令到LCD中*/SendCommandToLCD(uchar com)CheckState();/狀態(tài)檢查,LCD是否忙 RS=0; /向LCD發(fā)送命令。RS=0寫指令,RS=1寫數(shù)據(jù) RW=0;/R/W="L" ,E="HL"數(shù)據(jù)被寫到 IR 或 DR DATA=com; /com :命令 EN=1; _nop_(); _nop_(); EN=0; /E

19、N下降源 /*設(shè)置頁 0xb8是頁的首地址*/Void SetLine(uchar page)page=0xb8|page; /1011 1xxx 0<=page<=7 設(shè)定頁地址-X 0-7,8行為一頁64/8=8,共8頁 SendCommandToLCD(page); /*設(shè)定顯示開始行,0xc0是行的首地址*/ Void SetStartLine(uchar startline) startline=0xc0|startline; /1100 0000 SendCommandToLCD(startline); /設(shè)置從哪行開始:0-63,一般從0 行開始顯示 /*設(shè)定列地址-

20、Y 0-63 ,0x40是列的首地址*/ Void SetColumn(uchar column) column=column &0x3f; /column最大值為64,越出 0=<column<=63 column= 0x40|column; /01xx xxxxSendCommandToLCD(column); /*開關(guān)顯示,0x3f是開顯示,0x3e是關(guān)顯示*/Void SetOnOff(ucharonoff)onoff=0x3e|onoff; /0011 111x,onoff只能為0或者1 SendCommandToLCD(onoff);/*寫顯示數(shù)據(jù) */Void

21、 WriteByte(uchardat)CheckState();/狀態(tài)檢查,LCD是否忙 RS=1; /RS=0寫指令,RS=1寫數(shù)據(jù) RW=0;/R/W="L" ,E="HL"數(shù)據(jù)被寫到 IR 或 DR DATA=dat;/dat:顯示數(shù)據(jù) EN=1; _nop_(); _nop_(); EN=0;/EN下降源/*選擇屏幕screen: 0-全屏,1-左屏,2-右屏*/Void SelectScreen(uchar screen) switch(screen) case 0: cs1=0;/全屏顯示 _nop_(); _nop_(); _nop_()

22、; cs2=0; _nop_(); _nop_(); _nop_(); break; case 1: cs1=0;/左顯示屏 _nop_(); _nop_(); _nop_(); cs2=1; _nop_(); _nop_(); _nop_(); break; case 2: cs1=1;/右顯示屏 _nop_(); _nop_(); _nop_(); cs2=0; _nop_(); _nop_(); _nop_(); break; /*清屏screen: 0-全屏,1-左屏,2-右*/ Void ClearScreen(uchar screen) uchari,j;SelectScreen(

23、screen); for SetLine(i);SetColumn(0); for(j=0;j<64;j+) /控制列數(shù)0-63,共64列 WriteByte(0x00); /寫點內(nèi)容,列地址自動加1 /*延時程序*/voiddelay(uint z)uinti,j;for(i=0; i<z; i+)for(j = 0; j < 110; j+);/*初始化LCD*/Void InitLCD() CheckState();SelectScreen(0);SetOnOff(0); /關(guān)顯示 SelectScreen(0);SetOnOff(1); /開顯示 SelectScre

24、en(0); ClearScreen(0);/清屏 SetStartLine(0); /開始行:0 /*顯示全角漢字*/ void Display(ucharss,ucharpage,ucharcolumn,uchar number) (i=0;i<16;i+) /控制頁數(shù)0-7,共8頁 int i;/選屏參數(shù),pagr選頁參數(shù),column選列參數(shù),number選第幾漢字輸出 SelectScreen(ss);column=column&0x3f;SetLine(page);/寫上半頁 SetColumn(column); /控制列 for(i=0;i<16;i+) /控

25、制16列的數(shù)據(jù)輸出 WriteByte(Hzki+32*number); /i+32*number漢字的前16個數(shù)據(jù)輸出 SetLine(page+1); /寫下半頁 SetColumn(column); /控制列 for(i=0;i<16;i+) /控制16列的數(shù)據(jù)輸出 WriteByte(Hzki+32*number+16);/i+32*number+16漢字的后16個數(shù)據(jù)輸出 /*主函數(shù)*/void main() uint i;InitLCD();/初始12864 ClearScreen(0);/清屏 while(1) for(i=128;i>1;i-) /12864有128

26、列,顯示開始行從0128切換,因此可以實現(xiàn)循環(huán)顯示 SetStartLine(i);/顯示開始行 Display(2,0,0*16,0);/顯示第一個字Display(2,0,1*16,1);/ 顯示第二個字int i;/選屏參數(shù),pagr選頁參數(shù),column選列參數(shù),number選第幾漢字輸出 SelectScreen(ss);column=column&0x3f;SetLine(page);/寫上半頁 SetColumn(column); /控制列 for(i=0;i<16;i+) /控制16列的數(shù)據(jù)輸出 WriteByte(Hzki+32*number); /i+32*n

27、umber漢字的前16個數(shù)據(jù)輸出 SetLine(page+1); /寫下半頁 SetColumn(column); /控制列 for(i=0;i<16;i+) /控制16列的數(shù)據(jù)輸出 WriteByte(Hzki+32*number+16);/i+32*number+16漢字的后16個數(shù)據(jù)輸出 /*主函數(shù)*/void main() uint i;InitLCD();/初始12864 ClearScreen(0);/清屏 while(1) for(i=128;i>1;i-) /12864有128列,顯示開始行從0128切換,因此可以實現(xiàn)循環(huán)顯示 SetStartLine(i);/顯

28、示開始行 Display(2,0,0*16,0);/顯示第一個字Display(2,0,1*16,1);/ 顯示第二個字Display(2,0,2*16,2);/ 顯示第三個字Display(2,0,3*16,3);/ 顯示第四個字 Display(1,0,4*16,4);/ 顯示第五個字Display(1,0,5*16,5);/ 顯示第六個Display(1,0,6*16,6);/ 顯示第七個Display(1,0,7*16,7);/ 顯示第八個SelectScreen(0);/選擇全屏顯示 delay(50); /延時 .6.2相應(yīng)漢字的顯示代碼課設(shè)的幾個漢字顯示代碼如下:/*- 文字:

29、你 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x04,0x04,0x04,0x04,0x04,0xFC,0x44,0x44,0x44,0x44,0x44,0xC4,0x04,0x04,0x04,0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,/*- 文字: 若 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x04,0x04,0x74,0x54,0x54,0x54,0x54,0xFF,0x54,0x54,0x54,0

30、x54,0x74,0x04,0x04,0x00,0x04,0x04,0x15,0x15,0x15,0x55,0x95,0x7F,0x15,0x05,0x15,0x15,0x1F,0x04,0x04,0x00,/*- 文字: 安 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x10,0x10,0xF0,0x1F,0x10,0x10,0xF0,0x00,0x00,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,0x80,0x41,0x22,0x14,0x08,0x16,0x61,0x00,0x00,0x7F,0x20,0x20,0x20,0x7F,0x00,0x00,/*- 文字: 好 -*/*- 宋體12; 此字體下對

溫馨提示

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

評論

0/150

提交評論