2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課 程 設(shè) 計</b></p><p> 學(xué) 號: </p><p><b>  課程設(shè)計任務(wù)書</b></p><p>  學(xué)生姓名: 專業(yè)班級: </p><p>  指導(dǎo)教師:

2、 工作單位: </p><p><b>  題目要求 :</b></p><p>  使用LaunchPad上的板上資源,外接1602液晶,編寫程序使字符串在液晶上循環(huán)移動。 </p><p><b>  時間安排:</b

3、></p><p>  2014年元月1日~2014年元月17日下午17:30</p><p>  指導(dǎo)教師簽名: 年 月 日</p><p>  系主任(或責(zé)任教師)簽名: 年 月 日</p><p><b>  目錄</b>

4、</p><p>  引言................................................................1</p><p>  1 課程設(shè)計要求......................................................2</p><p>  2 硬件電路...............

5、...........................................3</p><p>  2.1 MSP430G2553單片機...........................................3</p><p>  2.1.1 MSP430G2553單片機特點..................................3</p>

6、<p>  2.1.2 MSP430G2553單片機結(jié)構(gòu)..................................3</p><p>  2.1.3 MSP430G2553的時鐘系統(tǒng)..................................4</p><p>  2.1.4 I/O寄存器....................................

7、..........5</p><p>  2.2 LCD1602液晶屏................................................5</p><p>  3 方案設(shè)計..........................................................7</p><p>  3.1 設(shè)計方案....

8、................................................7</p><p>  3.2 方案選擇....................................................7</p><p>  4 程序設(shè)計..........................................................

9、8</p><p>  4.1 程序結(jié)構(gòu)....................................................8</p><p>  4.2 主程序源程序................................................8</p><p>  4.3 子程序源程序....................

10、............................8</p><p>  4.4 子程序頭文件...............................................12</p><p>  5 調(diào)試.............................................................13</p><p&g

11、t;  5.1 CCSv5編譯軟件..............................................13</p><p>  5.2 調(diào)試過程...................................................13</p><p>  6 結(jié)束語...........................................

12、................15</p><p>  附錄1:代碼........................................................16</p><p>  附錄2:實物圖......................................................22</p><p>  參考文獻(xiàn)..

13、.........................................................23</p><p>  本科生課程設(shè)計成績評定表...........................................24</p><p><b>  引言</b></p><p>  本次課程設(shè)計旨在設(shè)計一個基于

14、 MSP430 系列微處理器的LCD1602液晶字符串循環(huán)移動。單片機是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計數(shù)器等功能(可能還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個小而完善的微型計算機系統(tǒng),在工業(yè)控制領(lǐng)域廣泛應(yīng)用。當(dāng)今時代是一個新技術(shù)層出不窮的時代,在電子領(lǐng)域尤其是自動

15、化智能控制領(lǐng)域,傳統(tǒng)的分立元件或數(shù)字邏輯電路構(gòu)成的控制系統(tǒng),正在以前所未見的速度被單片機智能控制系統(tǒng)所代替。單片機的使用隨處可見,而人們的生活也越來越離不開單片機。</p><p>  液晶是相態(tài)的一種,因為其特殊的物理、化學(xué)、光學(xué)特性,20世紀(jì)中葉開始被廣泛應(yīng)用在輕薄型的顯示技術(shù)上液晶顯示器也被廣泛運用,也發(fā)揮著越來越大的作用。盡年來,液晶顯示技術(shù)飛速發(fā)展,運用更加廣泛。</p><p>

16、;  本課程設(shè)計通過MSP430G2553單片機控制LCD1602液晶顯示器實現(xiàn)一串字符循環(huán)移動。</p><p><b>  1 課程設(shè)計要求</b></p><p>  使用LaunchPad上的板上資源,外接1602液晶,編寫程序使“Wuhan Uniwersity of Technology welcome You!”在液晶上循環(huán)移動顯示。</p>

17、<p><b>  2 硬件電路</b></p><p>  2.1 MSP430G2553單片機</p><p>  2.1.1 MSP430G2553單片機特點</p><p>  MSP430G2系列是德州儀器近期推出的一款產(chǎn)品,在秉承MSP430超低功耗,高集成度的優(yōu)點的同時,具有高性價比的特點。該系列被稱為ValueLi

18、ne,旨在以8位單片機的價格實現(xiàn)16位單片機的性能。MSP-EXP430Launchpad是TI推出的又一套用于MSP430和電路實驗的開發(fā)板。除了學(xué)生自主創(chuàng)新實踐外,LaunchPad開發(fā)板還可以用于本科低年級課程,如嵌入式C語言,電子技術(shù)基礎(chǔ),微機原理,單片機等課程的自主實驗環(huán)節(jié)以及課程設(shè)計。該套開發(fā)板為單片機熱愛者提供了一個很好的學(xué)習(xí)平臺。</p><p>  2.1.2 MSP430G2553單片機結(jié)構(gòu)&

19、lt;/p><p>  如圖所示是板載一顆MSP430G2553單片機的Launch Pad評估實驗開發(fā)板:</p><p>  圖1 Launch Pad評估實驗開發(fā)板</p><p><b>  板上額外資源:</b></p><p>  板載 USB 調(diào)試與編程仿真器接口,無驅(qū)動可安裝</p><p

20、>  支持所有采用 DIP14 和 DIP20 封裝 MSP430G2XX 和 MSP430F20 器</p><p>  紅綠兩粒 LED,兩個按鍵</p><p><b>  配套兩款電容觸摸板</b></p><p>  所有管腳在板子兩邊引出</p><p>  2.1.3 MSP430G2553的時鐘系統(tǒng)

21、</p><p>  MSP430G2系列單片機的時鐘系統(tǒng)需要支持系統(tǒng)低功耗運行的需要。通過對三個內(nèi)部時鐘信號的運用,用戶可很容易的選擇功耗最低,效率最高的系統(tǒng)時鐘方案。在軟件的控制下,MSP430G2系列單片機運行時可以不接外接晶振,也可接一只外接電阻或者接一到兩只外接晶振,也可以外接頻率發(fā)生器。</p><p>  基本時鐘模塊包括二至四個時鐘源: </p>&

22、lt;p>  LFXT1CLK:外接低頻或高頻振蕩器,如手表晶振,頻率發(fā)生器,外部時鐘源(400kHz至16MHz).</p><p>  XT2CLK:外接高頻晶振,范圍在400kHz至16MHz </p><p>  DCOCLK:內(nèi)部時鐘震蕩 </p><p>  VLOCLK:內(nèi)部低頻低功耗晶振,標(biāo)準(zhǔn)頻率是12kHz 三種

23、時鐘信號可被CPU和外設(shè)所使用: </p><p>  ACLK:輔助時鐘,ACLK可被軟件配置成從LFXT1CLK或VLOCLK輸入震蕩ACLK可以被1,2,4,8分頻。ACLK可以被選用作為外圍模塊的時鐘輸入。 </p><p>  MCLK:主時鐘,主時鐘可以從LFXT1CLK或VLOCLK,XT2CLK或DCOCLK輸入MCLK用在CPU系統(tǒng)之中。 &

24、lt;/p><p>  SMCLK:輔助主時鐘。SMCLK可被選擇從LFXT1CLK,VLOCLK,XT2CLK或DCOCLK輸入。SMCLK可以被1,2,4,8分頻。SMCLK可被選用為外圍模塊的時鐘。 </p><p>  2.1.4 I/O寄存器</p><p>  和大部分單片機類似,MSP430系列單片機也是將8個IO口編為一組。每個IO口有四個控制

25、寄存器,P1和P2還有額外的3個中斷寄存器。寄存器情況可參見表1。 </p><p><b>  表1 I/O寄存器</b></p><p>  2.2 LCD1602液晶屏</p><p>  LCD1602采用8位并行數(shù)據(jù)傳輸,其操作時序如下圖所示:</p><p>  LCD1602接口由8位數(shù)據(jù)線,電源

26、地電源正,液晶顯示偏壓信號(VL),數(shù)據(jù)命令選擇端(RS),讀寫選擇端(RW)組成。其接口信號說明如下圖所示:</p><p><b>  圖2接口信號說明圖</b></p><p>  可以在1602的液晶顯示偏壓信號端接一個可變電阻,調(diào)節(jié)顯示亮度,初始狀態(tài)時,調(diào)至1602上面一排顯示12個黑塊為止,LCD1602電路圖如下圖所示:</p><p

27、><b>  3 方案設(shè)計</b></p><p><b>  3.1 設(shè)計方案</b></p><p>  方案一:使用MSP430F1612編程控制LCD1602液晶屏實現(xiàn)實現(xiàn)一串字符左右交替整屏移動。</p><p>  方案二:使用MSP430G2553編程控制LCD1602液晶屏實現(xiàn)一串字符左右交替整屏移動

28、。</p><p><b>  3.2 方案選擇</b></p><p>  要完成控制LCD1602液晶屏實現(xiàn)一串字符左右交替整屏移動,MSP430G2553單片機足夠了,而且能夠比MSP430F1612節(jié)省資源,價格低,所以選擇方案二。</p><p><b>  4 程序設(shè)計</b></p><p

29、><b>  4.1 程序結(jié)構(gòu)</b></p><p>  該程序主要由主程序源程序main.c、子程序源程序cry1602.c和子程序頭文件cry1602.h構(gòu)成采用這種程序結(jié)構(gòu),使程序更加清晰,一目了然,減少程序錯誤的機會,增強了程序的可移植性。在程序設(shè)計中MSP430G2553中P1口作為并行數(shù)據(jù)輸出端,P2.0、P2.1、P2.2分別作為LCD1602液晶的RS、RW、E端。&

30、lt;/p><p>  4.2 主程序源程序</p><p>  主程序中使用看門狗定時器進行計時,控制字符串移動的速度。字符串先左移,再右移,之后循環(huán)移動。程序如下:</p><p>  #include <msp430g2533.h></p><p>  #include "cry1602.h"</p&g

31、t;<p>  #define uchar unsigned char</p><p>  uchar *s1 = " Wuhan University of Technology Welcome!";</p><p>  void main(void)</p><p><b>  {<

32、/b></p><p>  WDTCTL = WDT_ADLY_250; //間隔定時器,定時250ms</p><p>  uchar *s2;</p><p>  uchar j,k,l;</p><p>  uchar i = 0;</p><p><b>  s2 = s1;<

33、;/b></p><p>  LcdReset();</p><p>  while(*s1++ != '\0') i++; //計算字符串有效字符個數(shù)</p><p><b>  while(1)</b></p><p><b>  {</b></p>

34、;<p>  for(j = 0;j < i;j++)</p><p><b>  {</b></p><p><b>  l = j;</b></p><p>  for(k = 0;k < 16;k++)</p><p><b>  {</b>&l

35、t;/p><p><b>  if(l < i)</b></p><p>  Disp1Char(k,0,s2[l++]);</p><p><b>  else</b></p><p>  Disp1Char(k,0,' ');</p><p><b

36、>  }</b></p><p>  IFG1 &= ~WDTIFG; //清除中斷失效標(biāo)志</p><p>  while(!(IFG1 & WDTIFG));</p><p>  IFG1 &= ~WDTIFG;</p><p><b>  }</b>&

37、lt;/p><p><b>  }</b></p><p><b>  }</b></p><p>  4.3 子程序源程序</p><p>  子程序中包含一些宏定義,使程序可移植性增強,還包含一些對LCD1602液晶的操作程序及延時程序。程序如下:</p><p>  #in

38、clude <msp430g2533.h></p><p>  #include "cry1602.h"</p><p>  #define datadir P1DIR</p><p>  #define dataport P1OUT</p><p>  #define busy 0x80</p

39、><p>  #define ctrldir P2DIR</p><p>  #define CLR_RS P2OUT &= ~BIT0; //RS = P2.0</p><p>  #define SET_RS P2OUT |= BIT0;</p><p>  #define CLR_RW P2OUT &= ~BIT

40、1; //RW = P2.1</p><p>  #define SET_RW P2OUT |= BIT1;</p><p>  #define CLR_EN P2OUT &= ~BIT2; //EN = P2.2</p><p>  #define SET_EN P2OUT |= BIT2;</p><p>  

41、void DispStr(uchar x,uchar y,uchar *ptr)</p><p><b>  {</b></p><p>  uchar *temp;</p><p>  uchar i,n = 0;</p><p>  temp = ptr;</p><p>  while(*p

42、tr++ != '\0') n++; //計算字符串有效字符個數(shù)</p><p>  for(i = 0; i < n; i++)</p><p><b>  {</b></p><p>  Disp1Char(x++,y,temp[i]);</p><p>  if(x == 0x0

43、f)</p><p><b>  {</b></p><p><b>  x = 0;</b></p><p><b>  y ^= 1;</b></p><p><b>  }</b></p><p><b>  }&l

44、t;/b></p><p><b>  }</b></p><p>  void DispNChar(uchar x,uchar y,uchar n,uchar *ptr)</p><p><b>  {</b></p><p><b>  uchar i;</b><

45、;/p><p>  for(i = 0; i < n; i++)</p><p><b>  {</b></p><p>  Disp1Char(x++,y,ptr[i]);</p><p>  if(x == 0x0f)</p><p><b>  {</b></p

46、><p><b>  x = 0;</b></p><p><b>  y ^= 1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b>

47、</p><p>  void LocateXY(uchar x,uchar y)</p><p><b>  {</b></p><p>  uchar temp;</p><p>  temp = x&0x0f;</p><p>  y &= 0x01;</p>

48、<p>  if(y) temp |= 0x40;//如果在第2行</p><p>  temp |= 0x80;</p><p>  LcdWriteCommand(temp,1);</p><p><b>  }</b></p><p>  void Disp1Char(uchar x,uchar y,

49、uchar data)</p><p><b>  {</b></p><p>  LocateXY(x,y);</p><p>  LcdWriteData(data);</p><p><b>  }</b></p><p>  void LcdReset(void)&l

50、t;/p><p><b>  {</b></p><p>  ctrldir |= 0x07; //控制線端口設(shè)為輸出狀態(tài)</p><p>  datadir = 0xff; //數(shù)據(jù)端口設(shè)為輸出狀態(tài)</p><p>  LcdWriteCommand(0x38,0);

51、 //規(guī)定的復(fù)位操作</p><p>  Delay5ms();</p><p>  LcdWriteCommand(0x38,0);</p><p>  Delay5ms();</p><p>  LcdWriteCommand(0x38,0);</p><p>  Delay5ms();</p>

52、<p>  LcdWriteCommand(0x38,1); //顯示模式設(shè)置</p><p>  LcdWriteCommand(0x08,1); //顯示關(guān)閉</p><p>  LcdWriteCommand(0x01,1); //顯示清屏</p><p>  LcdWriteCommand(0x06,1);

53、 //寫字符時整體不移動</p><p>  LcdWriteCommand(0x0c,1); //顯示開,不開游標(biāo),不閃爍</p><p><b>  }</b></p><p>  void LcdWriteCommand(uchar cmd,uchar chk)</p><p><b>  {

54、</b></p><p>  if(chk) WaitForEnable(); //檢測忙信號?</p><p><b>  CLR_RS;</b></p><p><b>  CLR_RW;</b></p><p><b>  _NOP();</b>

55、</p><p>  dataport = cmd; //將命令字寫入數(shù)據(jù)端口</p><p><b>  _NOP();</b></p><p>  SET_EN; //產(chǎn)生使能脈沖信號</p><p><b>  _NOP();</b

56、></p><p><b>  _NOP();</b></p><p><b>  CLR_EN;</b></p><p><b>  }</b></p><p>  void LcdWriteData(uchar data)</p><p>&l

57、t;b>  {</b></p><p>  WaitForEnable(); //等待液晶不忙</p><p><b>  SET_RS;</b></p><p><b>  CLR_RW;</b></p><p><b>  _NOP();</b&g

58、t;</p><p>  dataport = data; //將四顯示數(shù)據(jù)寫入數(shù)據(jù)端口</p><p><b>  _NOP();</b></p><p>  SET_EN; //產(chǎn)生使能脈沖信號</p><p><b>  _NOP();</b>&l

59、t;/p><p><b>  _NOP();</b></p><p><b>  CLR_EN;</b></p><p><b>  }</b></p><p>  void WaitForEnable(void)</p><p><b>  {&

60、lt;/b></p><p>  P1DIR &= 0X00; //將P1口切換為輸入狀態(tài)</p><p><b>  CLR_RS;</b></p><p><b>  SET_RW;</b></p><p><b>  _NOP();</b>

61、</p><p><b>  SET_EN;</b></p><p><b>  _NOP();</b></p><p><b>  _NOP();</b></p><p>  while((P1IN & busy) != 0); //檢測忙標(biāo)志</p>

62、;<p><b>  CLR_EN;</b></p><p>  P1DIR |= 0xff; //將P1口切換為輸出狀態(tài)</p><p><b>  }</b></p><p>  void Delay5ms(void)</p><p><b>  {</b

63、></p><p>  uint i = 40000;</p><p>  while(i != 0)</p><p><b>  { i--;}</b></p><p><b>  }</b></p><p>  4.4 子程序頭文件</p><p

64、>  該頭文件中是對子程序進行程序說明,方便主程序的調(diào)用。程序如下:</p><p>  #ifndef _CRY1602_H</p><p>  #define _CRY1602_H</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int<

65、;/p><p>  void DispStr(uchar x,uchar y,uchar *ptr);</p><p>  void DispNChar(uchar x,uchar y,uchar n,uchar *ptr);</p><p>  void LocateXY(uchar x,uchar y);</p><p>  void Dis

66、p1Char(uchar x,uchar y,uchar data);</p><p>  void LcdReset(void);</p><p>  void LcdWriteCommand(uchar cmd,uchar chk);</p><p>  void LcdWriteData(uchar data);</p><p>  v

67、oid WaitForEnable(void);</p><p>  void Delay5ms(void);#endif</p><p><b>  5調(diào)試</b></p><p>  5.1 CCSv5編譯軟件</p><p>  Code Composer Studio 是一種針對TI的DSP、微控制器和應(yīng)用處理器

68、的集成開發(fā)環(huán)境。CCStudio 包括一套用于開發(fā)和調(diào)試嵌入式應(yīng)用程序的工具。它包括用于各種 TI 設(shè)備系列的編譯器、源代碼編輯器、項目生成環(huán)境、調(diào)試程序、探查器、模擬器和其他許多功能。CCStudio提供一個單一用戶界面,指導(dǎo)用戶完成應(yīng)用程序開發(fā)流程的每一步驟。</p><p>  安裝好CCSv5之后,先新建一個工程,然后在新建的工程里建立.c或.h文件,接下來便可以在文件里編寫程序,并調(diào)試運行,Build

69、Project 為編譯,Debug是仿真。</p><p><b>  5.2 調(diào)試過程</b></p><p>  程序編寫完成后,經(jīng)檢查無誤后,點擊Project->Build Project,進行編譯,編譯結(jié)果如圖2所示:</p><p><b>  圖2 程序調(diào)試界面</b></p><p

70、>  在調(diào)試過程中,開始時LCD1602液晶一直沒有顯示,認(rèn)為是程序出了問題,不過經(jīng)過檢查和調(diào)試,發(fā)現(xiàn)程序沒問題。不是程序問題,就檢查硬件,最終發(fā)現(xiàn)了問題是LCD1602液晶屏的V0口與GND間的滑動變阻器沒有調(diào)節(jié)合適,導(dǎo)致無法觀察到顯示效果。經(jīng)過調(diào)節(jié)滑動變阻器,就可以觀察到課程設(shè)計所要求的效果。如圖3所示:</p><p>  圖4 LCD1602液晶顯示</p><p>  在調(diào)

71、試過程中,有時候會出現(xiàn)無法脫機運行的情況,經(jīng)過檢查,發(fā)現(xiàn)是因為芯片管腳接觸不良導(dǎo)致的,壓緊芯片即可解決問題。</p><p><b>  6結(jié)束語</b></p><p>  通過完成本次課程設(shè)計,我學(xué)到了許許多多的知識,獲得了豐富的經(jīng)驗。在完成課程設(shè)計的過程中對MSP430G2553有了初步的了解,掌握了該單片機的一些使用技巧,例如:I/O口寄存器的設(shè)置及使用,定時

72、器的使用和中斷的使用等等。掌握并能夠熟練使用CCSv5這個編程軟件,在該軟件上進行編寫程序,下載并進行調(diào)試,最終完成了本次課程設(shè)計。在程序設(shè)計、編寫程序到調(diào)試的過程中,加強了我獨立發(fā)現(xiàn)問題解決問題的能力,同時使得實踐能力得到進一步的提高。</p><p>  在實踐中,充分將理論知識用于實踐,使自身對知識的理解更進一層,更加能夠熟練的掌握并使用理論知識。實踐是檢驗真理的唯一標(biāo)準(zhǔn),只有通過實踐才能體現(xiàn)出理論知識的價

73、值。</p><p><b>  附錄1</b></p><p><b>  1 主程序</b></p><p>  /*********************************************************</p><p>  程序功能:循環(huán)顯示字符串</p>

74、<p>  ********************************************************/</p><p>  #include <msp430g2533.h></p><p>  #include "cry1602.h"</p><p>  #define uchar unsigne

75、d char</p><p>  uchar *s1 = " Wuhan University of Technology Welcome!";</p><p>  void main(void)</p><p><b>  {</b></p><p>  WDTCTL

76、= WDT_ADLY_250; //間隔定時器,定時250ms</p><p>  uchar *s2;</p><p>  uchar j,k,l;</p><p>  uchar i = 0;</p><p><b>  s2 = s1;</b></p><p>  LcdRes

77、et();</p><p>  while(*s1++ != '\0') i++; //計算字符串有效字符個數(shù)</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  for(j = 0;j < i;j++

78、)</p><p><b>  {</b></p><p><b>  l = j;</b></p><p>  for(k = 0;k < 16;k++)</p><p><b>  {</b></p><p><b>  if(l &

79、lt; i)</b></p><p>  Disp1Char(k,0,s2[l++]);</p><p><b>  else</b></p><p>  Disp1Char(k,0,' ');</p><p><b>  }</b></p><p&g

80、t;  IFG1 &= ~WDTIFG; //清除中斷失效標(biāo)志</p><p>  while(!(IFG1 & WDTIFG));</p><p>  IFG1 &= ~WDTIFG;</p><p><b>  }</b></p><p><b>  }<

81、/b></p><p><b>  }</b></p><p><b>  2 子程序源程序</b></p><p>  #include <msp430g2533.h></p><p>  #include "cry1602.h"</p><

82、;p>  /*****************宏定義***********************/</p><p>  #define datadir P1DIR</p><p>  #define dataport P1OUT</p><p>  #define busy 0x80</p><p>  #define ct

83、rldir P2DIR</p><p>  #define CLR_RS P2OUT &= ~BIT0; //RS = P2.0</p><p>  #define SET_RS P2OUT |= BIT0;</p><p>  #define CLR_RW P2OUT &= ~BIT1; //RW = P2.1</p&g

84、t;<p>  #define SET_RW P2OUT |= BIT1;</p><p>  #define CLR_EN P2OUT &= ~BIT2; //EN = P2.2</p><p>  #define SET_EN P2OUT |= BIT2;</p><p>  /**************************

85、*************************</p><p>  函數(shù)名稱:Dispstr</p><p>  功 能:讓液晶從某個位置起連續(xù)顯示一個字符串</p><p>  參 數(shù):x--位置的列坐標(biāo)</p><p><b>  y--位置的行坐標(biāo)</b></p><p> 

86、 ptr--指向字符串存放位置的指針</p><p><b>  返回值 :無</b></p><p>  ***************************************************/</p><p>  void DispStr(uchar x,uchar y,uchar *ptr)</p><

87、;p><b>  {</b></p><p>  uchar *temp;</p><p>  uchar i,n = 0;</p><p>  temp = ptr;</p><p>  while(*ptr++ != '\0') n++; //計算字符串有效字符個數(shù)</p&g

88、t;<p>  for(i = 0; i < n; i++)</p><p><b>  {</b></p><p>  Disp1Char(x++,y,temp[i]);</p><p>  if(x == 0x0f)</p><p><b>  {</b></p>

89、<p><b>  x = 0;</b></p><p><b>  y ^= 1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b><

90、/p><p>  /***************************************************</p><p>  函數(shù)名稱:DispNChar</p><p>  功 能:讓液晶從某個位置起連續(xù)顯示一個字符串</p><p>  參 數(shù):x--位置的列坐標(biāo)</p><p><

91、b>  y--位置的行坐標(biāo)</b></p><p><b>  n--顯示字符個數(shù)</b></p><p>  ptr--指向字符串存放位置的指針</p><p><b>  返回值 :無</b></p><p>  *******************************

92、********************/</p><p>  void DispNChar(uchar x,uchar y,uchar n,uchar *ptr)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  for(i = 0;

93、 i < n; i++)</p><p><b>  {</b></p><p>  Disp1Char(x++,y,ptr[i]);</p><p>  if(x == 0x0f)</p><p><b>  {</b></p><p><b>  x =

94、0;</b></p><p><b>  y ^= 1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /******

95、*********************************************</p><p>  函數(shù)名稱:LocateXY</p><p>  功 能:向液晶輸入顯示字符位置的坐標(biāo)信息</p><p>  參 數(shù):x--位置的列坐標(biāo)</p><p><b>  y--位置的行坐標(biāo)</b><

96、;/p><p><b>  返回值 :無</b></p><p>  ***************************************************/</p><p>  void LocateXY(uchar x,uchar y)</p><p><b>  {</b><

97、;/p><p>  uchar temp;</p><p>  temp = x&0x0f;</p><p>  y &= 0x01;</p><p>  if(y) temp |= 0x40;//如果在第2行</p><p>  temp |= 0x80;</p><p>  

98、LcdWriteCommand(temp,1);</p><p><b>  }</b></p><p>  /***************************************************</p><p>  函數(shù)名稱:Disp1Char</p><p>  功 能:在某個位置顯示一個字符

99、</p><p>  參 數(shù):x--位置的列坐標(biāo)</p><p><b>  y--位置的行坐標(biāo)</b></p><p>  data--顯示的字符數(shù)據(jù)</p><p><b>  返回值 :無</b></p><p>  **********************

100、*****************************/</p><p>  void Disp1Char(uchar x,uchar y,uchar data)</p><p><b>  {</b></p><p>  LocateXY(x,y);</p><p>  LcdWriteData(data);<

101、;/p><p><b>  }</b></p><p>  /***************************************************</p><p>  函數(shù)名稱:LcdReset</p><p>  功 能:對1602液晶模塊進行復(fù)位操作</p><p><

102、;b>  參 數(shù):無</b></p><p><b>  返回值 :無</b></p><p>  ***************************************************/</p><p>  void LcdReset(void)</p><p><b&g

103、t;  {</b></p><p>  ctrldir |= 0x07; //控制線端口設(shè)為輸出狀態(tài)</p><p>  datadir = 0xff; //數(shù)據(jù)端口設(shè)為輸出狀態(tài)</p><p>  LcdWriteCommand(0x38,0); //規(guī)定的復(fù)位操作</p>

104、<p>  Delay5ms();</p><p>  LcdWriteCommand(0x38,0);</p><p>  Delay5ms();</p><p>  LcdWriteCommand(0x38,0);</p><p>  Delay5ms();</p><p>  LcdWriteComma

105、nd(0x38,1); //顯示模式設(shè)置</p><p>  LcdWriteCommand(0x08,1); //顯示關(guān)閉</p><p>  LcdWriteCommand(0x01,1); //顯示清屏</p><p>  LcdWriteCommand(0x06,1); //寫字符時整體不移動</p>&

106、lt;p>  LcdWriteCommand(0x0c,1); //顯示開,不開游標(biāo),不閃爍</p><p><b>  }</b></p><p>  /***************************************************</p><p>  函數(shù)名稱:LcdWriteCommand</

107、p><p>  功 能:向液晶模塊寫入命令</p><p>  參 數(shù):cmd--命令,</p><p>  chk--是否判忙的標(biāo)志,1:判忙,0:不判</p><p><b>  返回值 :無</b></p><p>  *******************************

108、********************/</p><p>  void LcdWriteCommand(uchar cmd,uchar chk)</p><p><b>  {</b></p><p>  if(chk) WaitForEnable(); //檢測忙信號?</p><p><b>

109、;  CLR_RS;</b></p><p><b>  CLR_RW;</b></p><p><b>  _NOP();</b></p><p>  dataport = cmd; //將命令字寫入數(shù)據(jù)端口</p><p><b>  _NOP(

110、);</b></p><p>  SET_EN; //產(chǎn)生使能脈沖信號</p><p><b>  _NOP();</b></p><p><b>  _NOP();</b></p><p><b>  CLR_EN;</b>

111、</p><p><b>  }</b></p><p>  /***************************************************</p><p>  函數(shù)名稱:LcdWriteData</p><p>  功 能:向液晶顯示的當(dāng)前地址寫入顯示數(shù)據(jù)</p><

112、p>  參 數(shù):data--顯示字符數(shù)據(jù)</p><p><b>  返回值 :無</b></p><p>  ***************************************************/</p><p>  void LcdWriteData(uchar data)</p><p&

113、gt;<b>  {</b></p><p>  WaitForEnable(); //等待液晶不忙</p><p><b>  SET_RS;</b></p><p><b>  CLR_RW;</b></p><p><b>  _NOP();<

114、;/b></p><p>  dataport = data; //將四顯示數(shù)據(jù)寫入數(shù)據(jù)端口</p><p><b>  _NOP();</b></p><p>  SET_EN; //產(chǎn)生使能脈沖信號</p><p><b>  _NOP();</b&

115、gt;</p><p><b>  _NOP();</b></p><p><b>  CLR_EN;</b></p><p><b>  }</b></p><p>  /***************************************************&

116、lt;/p><p>  函數(shù)名稱:WaitForEnable</p><p>  功 能:等待1602液晶完成內(nèi)部操作</p><p><b>  參 數(shù):無</b></p><p><b>  返回值 :無</b></p><p>  **************

117、*************************************/</p><p>  void WaitForEnable(void)</p><p><b>  {</b></p><p>  P1DIR &= 0X00; //將P1口切換為輸入狀態(tài)</p><p><b&g

118、t;  CLR_RS;</b></p><p><b>  SET_RW;</b></p><p><b>  _NOP();</b></p><p><b>  SET_EN;</b></p><p><b>  _NOP();</b><

119、;/p><p><b>  _NOP();</b></p><p>  while((P1IN & busy) != 0); //檢測忙標(biāo)志</p><p><b>  CLR_EN;</b></p><p>  P1DIR |= 0xff; //將P4口切換為輸出狀態(tài)</

120、p><p><b>  }</b></p><p>  /***************************************************</p><p>  函數(shù)名稱:Delay5ms</p><p>  功 能:延時約5ms</p><p><b>  參

121、 數(shù):無</b></p><p><b>  返回值 :無</b></p><p>  ***************************************************/</p><p>  void Delay5ms(void)</p><p><b>  {</b

122、></p><p>  uint i = 40000;</p><p>  while(i != 0)</p><p><b>  {</b></p><p><b>  i--;</b></p><p><b>  }</b></p>

123、<p><b>  }</b></p><p><b>  3 子程序頭文件</b></p><p>  #ifndef _CRY1602_H</p><p>  #define _CRY1602_H</p><p>  #define uchar unsigned char</

124、p><p>  #define uint unsigned int</p><p>  void DispStr(uchar x,uchar y,uchar *ptr);</p><p>  void DispNChar(uchar x,uchar y,uchar n,uchar *ptr);</p><p>  void LocateXY(uc

125、har x,uchar y);</p><p>  void Disp1Char(uchar x,uchar y,uchar data);</p><p>  void LcdReset(void);</p><p>  void LcdWriteCommand(uchar cmd,uchar chk);</p><p>  void Lcd

126、WriteData(uchar data);</p><p>  void WaitForEnable(void);</p><p>  void Delay5ms(void);#endi</p><p><b>  附錄2</b></p><p><b>  圖5 實物</b></p>

127、<p><b>  參考文獻(xiàn)</b></p><p>  [1]曹磊.MSP430單片機C程序設(shè)計與實踐[M].北航大學(xué)出版社,2007-7.</p><p>  [2]李建忠.MSP430單片機原理與實踐教程[M].西安電子科技大學(xué)出版社,2002.</p><p>  [3]皮大能,南光群,劉金華.單片機課程設(shè)計指導(dǎo)書[M].

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論