液晶顯示廣告牌的設(shè)計-課程設(shè)計_第1頁
已閱讀1頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p><b>  1技術(shù)要求1</b></p><p>  2設(shè)計方案及原理1</p><p><b>  3實現(xiàn)方案3</b></p><p>  3.1LM016L基本資料3</p><

2、;p>  3.2硬件連接圖7</p><p><b>  4源程序代碼8</b></p><p>  5調(diào)式過程及結(jié)果14</p><p>  5.1調(diào)式過程14</p><p><b>  5.2結(jié)果14</b></p><p><b>

3、  6心得體會15</b></p><p><b>  7參考文獻(xiàn)16</b></p><p>  液晶顯示廣告牌的設(shè)計</p><p><b>  技術(shù)要求</b></p><p>  在日常生活中,經(jīng)??梢姼鞣N廣告牌,本設(shè)計要求利用單片機(jī)控制液晶顯示屏顯示相關(guān)的信息,需完成下

4、列任務(wù):</p><p>  利用LCD顯示某一條固定語句;</p><p>  能夠通過按鍵對固定語句的顯示方式進(jìn)行修改,比如按一次按鍵,顯示的字符少一個,一直到最后所有字符完全消失;或者按一次按鍵所有字符顯示的位置左移一格等。</p><p><b>  設(shè)計方案及原理</b></p><p>  讓LCD顯示固定語

5、句在C語言環(huán)境下只需將字符串直接賦給LCD即可,讓LCD顯示的字符方式進(jìn)行修改就得給LCD傳遞相關(guān)指令。</p><p>  第一步利用LCD顯示某一條固定語句。LCD顯示字符的時候,是一個一個字符顯示,顯示一個字符后, 光標(biāo)加一或減一表示下一個字符顯示的位置。因此顯示固定語句的時候,我們可以先將固定語句存在一個字符串?dāng)?shù)組,光標(biāo)操作為當(dāng)寫一個字符后地址指針加一。選擇好初始地址后,利用一個循環(huán)結(jié)構(gòu)程序?qū)⒄麄€字符串?dāng)?shù)

6、組內(nèi)容顯示出來。</p><p>  第二步讓LCD顯示的字符串顯示方式進(jìn)行修改。鑒于LCD自身就能將字符串以不同方式的顯示出來,因此我們只需將對應(yīng)指令語句傳遞給LCD即可,通過外部按鍵產(chǎn)生中斷,讓LCD來響應(yīng)對應(yīng)指令語句。</p><p>  方案流程圖如圖1所示。</p><p><b>  圖1 程序流程圖</b></p>

7、<p><b>  實現(xiàn)方案</b></p><p>  LM016L基本資料</p><p>  3.1.1 引腳說明</p><p>  LM016L為字符型液晶顯示器LCD,其圖形符號、引腳及屬性如圖2所示。</p><p><b>  引腳說明如下:</b></p>

8、<p><b> ?、贁?shù)據(jù)線D7~D0</b></p><p> ?、诳刂凭€(有3根:RS、RW、E)</p><p><b> ?、?根地線Vss</b></p><p>  ④一根電源線(VDD)</p><p>  圖2 LCD圖形符號和引腳</p><p>

9、;  3.1.2 LM016L屬性及RAM地址:</p><p>  LM016L的屬性設(shè)置如下:</p><p> ?、倜啃械淖址麛?shù)為16,行數(shù)為2;</p><p> ?、跁r鐘為250KHz;</p><p> ?、坌?的字符地址為80H~8FH</p><p> ?、苄?的字符地址為C0H~CFH </

10、p><p>  3.1.3 基本操作時序</p><p><b>  其具體時序見表1。</b></p><p>  表1 LM016L信號真值表</p><p>  3.1.4 LCD指令集</p><p><b>  清屏指令</b></p><p>

11、;  功能:<1> 清除液晶顯示器,即將DDRAM的內(nèi)容全部填入“空白”的字符碼20H; <2> 光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方; <3> 將地址計數(shù)器(AC)的值設(shè)為0。</p><p><b>  光標(biāo)歸位指令</b></p><p>  功能:<1> 把光標(biāo)撤回到顯示器的左上方; <2>

12、 把地址計數(shù)器(AC)的值設(shè)置為0; <3> 保持DDRAM的內(nèi)容不變 </p><p><b>  輸入模式指令設(shè)置</b></p><p>  功能:設(shè)定每次寫入1位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫入的一個字符是否移動。</p><p>  其中:I/D=1:數(shù)據(jù)讀、寫操作后,AC自動增一;</p><

13、p>  I/D=0:數(shù)據(jù)讀、寫操作后,AC自動減一;</p><p>  S=1:數(shù)據(jù)讀、寫操作,畫面平移;</p><p>  S=0:數(shù)據(jù)讀、寫操作,畫面不動。</p><p><b>  顯示開關(guān)控制指令</b></p><p>  功能:控制顯示器開/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃爍。</p>

14、<p>  其中:D表示顯示開關(guān):D=1為開,D=0為關(guān);</p><p>  C表示光標(biāo)開關(guān):C=1為開,C=0為關(guān);</p><p>  B表示閃爍開關(guān);B=1為開,B=0為關(guān)。</p><p>  設(shè)定顯示屏或光標(biāo)移動方向指令</p><p>  功能:使光標(biāo)移位或使整個顯示屏幕移位。</p><p&g

15、t;  其中:S/C=1:畫面平移一個字符位;</p><p>  S/C=0:光標(biāo)平移一個字符位;</p><p><b>  R/L=1:右移;</b></p><p><b>  R/L=0:左移。</b></p><p><b>  功能設(shè)定指令</b></p&g

16、t;<p>  功能:設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。</p><p>  其中:DL=1,8位數(shù)據(jù)接口;DL=0,4位數(shù)據(jù)接口;</p><p>  N=1,兩行顯示;N=0,一行顯示;</p><p>  F=1,5×10點陣字符;F=0,5×7點陣字符。</p><p>  設(shè)定DDRAM地址指令&

17、lt;/p><p>  功能:設(shè)定下一個要存入數(shù)據(jù)的CGRAM的地址。</p><p>  讀取忙信號或AC地址指令</p><p>  功能:<1> 讀取忙碌信號BF的內(nèi)容,BF=1表示液晶顯示器忙,暫時無法接收單片機(jī)送來的數(shù)據(jù)或指令; 當(dāng)BF=0時,液晶顯示器可以接收單片機(jī)送來的數(shù)據(jù)或指令;</p><p>  <2>

18、 讀取地址計數(shù)器(AC)的內(nèi)容。</p><p>  數(shù)據(jù)寫入DDRAM或CGRAM指令</p><p>  功能:<1> 將字符碼寫入DDRAM,以使液晶顯示屏顯示出相對應(yīng)的字符;</p><p>  <2> 將用戶自己設(shè)計的圖形存入CGRAM。</p><p>  從CGRAM或DDRAM讀出數(shù)據(jù)的指令</p

19、><p>  功能:讀取DDRAM或CGRAM中的內(nèi)容。</p><p>  3.1.5 控制器接口時序說明</p><p>  3.1.5.1 讀操作時序</p><p>  圖3 讀操作時序 </p><p>  3.1.5.2 寫操作時序</p><p><b>  圖4 寫操作

20、時序</b></p><p><b>  硬件連接圖</b></p><p>  了解完LM016L基本資料,現(xiàn)在我們可以將LCD與單片機(jī)接在一起。實現(xiàn)方案時,將89C51單片機(jī)的P1口與LCD數(shù)據(jù)口連接起來 ,P3口接液晶控制端口及按鍵。</p><p>  具體的硬件連接圖如圖5所示。</p><p> 

21、 圖5 液晶廣告牌硬件設(shè)計圖</p><p><b>  源程序代碼</b></p><p>  #include <REG51.H></p><p>  #include <INTRINS.H> //庫函數(shù)頭文件,代碼中引用了_nop_()函數(shù)</p><p>  // 定義控制信

22、號端口</p><p>  sbit RS=P3^0; //P3.0</p><p>  sbit RW=P3^1; //P3.1</p><p>  sbit E= P3^2; //P3.2</p><p>  int jishu=0;</

23、p><p><b>  // 聲明調(diào)用函數(shù)</b></p><p>  void lcd_w_cmd(unsigned char com); //寫命令字函數(shù)</p><p>  void lcd_w_dat(unsigned char dat); //寫數(shù)據(jù)函數(shù)</p><p&g

24、t;  unsigned char lcd_r_start(); //讀狀態(tài)函數(shù)</p><p>  void int1(); //LCD初始化函數(shù)</p><p>  void delay(unsigned char t); //可控延時函數(shù)</p>&

25、lt;p>  void delay1(); //軟件實現(xiàn)延時函數(shù),5個機(jī)器周期</p><p>  void main() //主函數(shù)</p><p><b>  { </b></p><p>  unsigned char lcd[]="i am the best

26、 one mei bang si wei te"; </p><p>  unsigned char lcd1[]="i am yu yang yi from whut";</p><p>  unsigned char i;</p><p>  EA=1; //全局中斷開<

27、/p><p>  EX1=1; //外部中斷0開</p><p>  IT1=1; //邊沿觸發(fā),IT1=0表示電平觸發(fā)</p><p>  P1=0xff; //送全1到P0口</p><

28、;p>  int1(); //初始化LCD</p><p>  delay(255);</p><p>  lcd_w_cmd(0x80); //設(shè)置顯示位置</p><p>  delay(255);</p><p>  for(i=0;i

29、<36;i++) //顯示字符串</p><p>  { </p><p>  lcd_w_dat(lcd[i]);</p><p>  delay(200);</p><p><b>  }</b></p>&l

30、t;p>  lcd_w_cmd(0xc0); // 設(shè)置顯示位置</p><p>  delay(255); </p><p>  for(i=0;i<25;i++) // 顯示字符串</p><p>  { </p>&

31、lt;p>  lcd_w_dat(lcd1[i]);</p><p>  delay(200);</p><p><b>  }</b></p><p><b>  while(1){</b></p><p>  switch(jishu) {</p><p><

32、b>  case 0 :</b></p><p>  for(i=0;i<1;i++) // 閃爍</p><p>  { </p><p>  lcd_w_cmd(0x08); </p><p>  delay(200);</p>

33、<p>  lcd_w_cmd(0x0d);</p><p>  delay(200);</p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 1: for(i=0;i<1;i++) //左

34、移</p><p>  { </p><p>  lcd_w_cmd(0x1c); </p><p>  delay(200);</p><p><b>  }</b></p><p><b>  break;</b></p

35、><p>  case 2: for(i=0;i<1;i++) //右移</p><p>  { </p><p>  lcd_w_cmd(0x18); </p><p>  delay(200);</p><p><b>  } <

36、/b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void ISR_Key(v

37、oid) interrupt 2 using 1</p><p><b>  {</b></p><p><b>  jishu++;</b></p><p>  jishu=jishu%3 ;</p><p><b>  }</b></p><p> 

38、 //函數(shù)名:delay</p><p>  //函數(shù)功能:采用軟件實現(xiàn)可控延時 </p><p>  //形式參數(shù):延時時間控制參數(shù)存入變量t中</p><p><b>  //返回值:無</b></p><p>  void delay(unsigned char t) </p><p&g

39、t;<b>  {</b></p><p>  unsigned char j,i;</p><p>  for(i=0;i<t;i++)</p><p>  for(j=0;j<50;j++); </p><p><b>  }</b></p><p>  //

40、函數(shù)名:delay1</p><p>  //函數(shù)功能:采用軟件實現(xiàn)延時,5個機(jī)器周期 </p><p><b>  //形式參數(shù):無</b></p><p><b>  //返回值:無</b></p><p>  void delay1() </p><p>&

41、lt;b>  { </b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  }</b></

42、p><p>  //函數(shù)名:int1</p><p>  //函數(shù)功能:lcd初始化 </p><p><b>  //形式參數(shù):無</b></p><p><b>  //返回值:無</b></p><p>  void int1() </p>

43、<p><b>  {</b></p><p>  lcd_w_cmd(0x3c); // 設(shè)置工作方式</p><p>  lcd_w_cmd(0x0d); // 設(shè)置光標(biāo)</p><p>  lcd_w_cmd(0x01); // 清

44、屏</p><p>  lcd_w_cmd(0x06); // 設(shè)置輸入方式</p><p>  lcd_w_cmd(0x80); // 設(shè)置初始顯示位置</p><p><b>  }</b></p><p>  //函數(shù)名:lcd_r_start<

45、/p><p>  //函數(shù)功能:讀狀態(tài)字 </p><p><b>  //形式參數(shù):無</b></p><p>  //返回值:返回狀態(tài)字,最高位D7=0,LCD控制器空閑;D7=1,LCD控制器忙</p><p>  unsigned char lcd_r_start() </p><

46、;p><b>  {</b></p><p>  unsigned char s;</p><p>  RW=1;//RW=1,RS=0,讀LCD狀態(tài)</p><p><b>  delay1();</b></p><p><b>  RS=0;</b><

47、;/p><p><b>  delay1();</b></p><p>  E=1;//E端時序</p><p><b>  delay1();</b></p><p>  s=P1;//從LCD的數(shù)據(jù)口讀狀態(tài)</p><p><b>  d

48、elay1();</b></p><p><b>  E=0;</b></p><p><b>  delay1();</b></p><p><b>  RW=0;</b></p><p>  delay1(); </p><p>  re

49、turn(s); //返回讀取的LCD狀態(tài)字</p><p><b>  }</b></p><p>  //函數(shù)名:lcd_w_cmd</p><p>  //函數(shù)功能:寫命令字</p><p>  //形式參數(shù):命令字已存入com單元中</p><p><b>  /

50、/返回值:無</b></p><p>  void lcd_w_cmd(unsigned char com) </p><p><b>  {</b></p><p>  unsigned char i;</p><p>  do{ // 查LCD忙操

51、作</p><p>  i=lcd_r_start(); // 調(diào)用讀狀態(tài)字函數(shù)</p><p>  i=i&0x80; // 與操作屏蔽掉低7位 </p><p><b>  delay(2);</b></p><p>  }while(i!=0);

52、 // LCD忙,繼續(xù)查詢,否則退出循環(huán)</p><p><b>  RW=0;</b></p><p><b>  delay1();</b></p><p>  RS=0; // RW=1,RS=0,寫LCD命令字</p><p><b>  d

53、elay1();</b></p><p>  E=1; //E端時序</p><p><b>  delay1();</b></p><p>  P1=com; //將com中的命令字寫入LCD數(shù)據(jù)口</p><p><b>  delay1();</

54、b></p><p><b>  E=0;</b></p><p><b>  delay1();</b></p><p><b>  RW=1;</b></p><p>  delay(255);</p><p><b>  }<

55、/b></p><p>  //函數(shù)名:lcd_w_dat</p><p>  //函數(shù)功能:寫數(shù)據(jù)</p><p>  //形式參數(shù):數(shù)據(jù)已存入dat單元中</p><p><b>  //返回值:無</b></p><p>  void lcd_w_dat(unsigned char d

56、at) </p><p>  { unsigned char i;</p><p>  do{ // 查忙操作</p><p>  i=lcd_r_start(); // 調(diào)用讀狀態(tài)字函數(shù)</p><p>  i=i&0x80;

57、// 與操作屏蔽掉低7位 </p><p>  delay(2); </p><p>  }while(i!=0); // LCD忙,繼續(xù)查詢,否則退出循環(huán)</p><p><b>  RW=0;</b></p><p><b>  delay1();&l

58、t;/b></p><p>  RS=1;// RW=1,RS=0,寫LCD命令字</p><p><b>  delay1();</b></p><p>  E=1; // E端時序</p><p><b>  delay1();</b></p&

59、gt;<p>  P1=dat; // 將dat中的顯示數(shù)據(jù)寫入LCD數(shù)據(jù)口</p><p><b>  delay1();</b></p><p><b>  E=0;</b></p><p><b>  delay1();</b></p><

60、p><b>  RW=1;</b></p><p>  delay(255);</p><p><b>  }</b></p><p><b>  調(diào)式過程及結(jié)果</b></p><p><b>  調(diào)式過程</b></p><p

61、>  第一步顯示固定語句,硬件圖連接好,且程序編譯通過沒有錯,生成.hex文件后下載到protues單片機(jī)進(jìn)行仿真,點開始后,液晶屏亮,但是液晶屏只有第一行有顯示,原本設(shè)定的第二行顯示未能如期實現(xiàn)。檢查程序后,發(fā)現(xiàn)初始化時候沒有給第二行設(shè)置顯示的物理地址,設(shè)定好第二行物理地址后第二行便出現(xiàn)了預(yù)期的顯示字符。</p><p>  第二步通過按鍵修改顯示方式,按照預(yù)期想法,在第一次按下按鍵后,字符串便呈閃爍狀態(tài)

62、,在沒有再次按下按鍵之前,LCD應(yīng)該保持之前閃爍狀態(tài),可是實際情況確實再完成一次閃爍后程序自動進(jìn)行下一個模式即循環(huán)左移一次,左移完成之后又進(jìn)入循環(huán)右移,再而回到閃爍狀態(tài),并在這三個狀態(tài)間持續(xù)循環(huán)。分析后認(rèn)為是程序段用了switch循環(huán),這個循環(huán)將每個case語句順序執(zhí)行,于是在每個case語句后加上break語句,重新生成HEX文件執(zhí)行后果真這個問題得到解決,并且沒有新的問題。</p><p><b>

63、  結(jié)果</b></p><p>  調(diào)試完成后,最終仿真運行結(jié)果。</p><p>  第一步,顯示固定內(nèi)容。即仿真開始后,不進(jìn)行任何操作,LCD顯示設(shè)置好的字符并按照默認(rèn)的顯示方式(閃爍)進(jìn)行顯示。如圖6。</p><p>  圖6 顯示固定語句</p><p>  第二步,通過按鍵修改顯示方式。按鍵一次后字符循環(huán)左移,再次

64、按下按鍵后字符串循環(huán)右移,圖7為字符串左移到最右端狀態(tài)。</p><p>  圖7 字符串左移到最右邊狀態(tài)</p><p><b>  心得體會</b></p><p>  在選定課題與液晶顯示器件相關(guān)后便上網(wǎng)搜集了一些芯片的資料,熟悉了一下芯片的使用說明,這次是學(xué)習(xí)單片機(jī)以來第一次接觸字符型LCD,之前實驗課中接觸的都是數(shù)碼管顯示芯片,直接

65、通過芯片管腳電平的賦值便可以顯示出相應(yīng)字符,但這次是要顯示出字符串,請教同學(xué)后,才知道每次輸入字符其實原理跟數(shù)碼管相似,不過每個字符是分別輸入的,即89C51按照順序?qū)⒆址謩e傳送到LCD中,匯編中用查表的方法來實現(xiàn),而C語言直接將字符串賦值就行。</p><p>  在閱讀了液晶芯片的使用手冊后,發(fā)現(xiàn)字符串不同的顯示方式幾經(jīng)內(nèi)置于芯片中,我們所需要做的就是利用89C51來將對應(yīng)實現(xiàn)相關(guān)功能的指令寫入到芯片中,課

66、程的難點不是讓LCD如何顯示字符串而是如何合理巧妙的控制好液晶芯片來實現(xiàn)其自身所原有的顯示功能,并讓系統(tǒng)穩(wěn)定工作。</p><p>  本次課程設(shè)計主要是對液晶的相關(guān)應(yīng)用。在拿到一塊芯片的時候,首先要看它的說明書,操作手冊之類的資料,要從頭到尾都了解清楚了,才能開始運用它。我們需要知道各個引腳的功能,才能正確的與單片機(jī)相連。液晶有讀寫操作時有指令與數(shù)據(jù)之分,了解寫指令時的時序,該怎樣操作才能把指令寫進(jìn)去,什么指令

67、是什么功能。同樣寫數(shù)據(jù)時也一樣。在寫程序是,必須嚴(yán)格按照操作時序圖,先做什么,后做什么。這樣才能設(shè)計出穩(wěn)定運行的系統(tǒng)。</p><p>  通過這次課程設(shè)計,我深刻理解到像單片機(jī)這種課程,如果一味專研課本,盲目記憶指令,這樣得來的知識是表層的,是膚淺的,是不能靈活運用于實際生活中去的。只有在掌握相關(guān)理論只是后,配以相應(yīng)實踐練習(xí),多動手鍛煉自己,不但加深了對理論知識的理解,還讓自己對這門課程產(chǎn)生了濃厚的興趣。而且看

溫馨提示

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

評論

0/150

提交評論