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

下載本文檔

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

文檔簡(jiǎn)介

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

2、 工作單位: </p><p><b>  題目要求 :</b></p><p>  使用LaunchPad上的板上資源,外接1602液晶,編寫程序使字符串在液晶上循環(huán)移動(dòng)。 </p><p><b>  時(shí)間安排:</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è)計(jì)要求......................................................2</p><p>  2 硬件電路...............

5、...........................................3</p><p>  2.1 MSP430G2553單片機(jī)...........................................3</p><p>  2.1.1 MSP430G2553單片機(jī)特點(diǎn)..................................3</p>

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

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

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

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é)束語(yǔ)...........................................

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

13、.........................................................23</p><p>  本科生課程設(shè)計(jì)成績(jī)?cè)u(píng)定表...........................................24</p><p><b>  引言</b></p><p>  本次課程設(shè)計(jì)旨在設(shè)計(jì)一個(gè)基于

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

30、lt;/p><p>  4.2 主程序源程序</p><p>  主程序中使用看門狗定時(shí)器進(jìn)行計(jì)時(shí),控制字符串移動(dòng)的速度。字符串先左移,再右移,之后循環(huán)移動(dòng)。程序如下:</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; //間隔定時(shí)器,定時(shí)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++; //計(jì)算字符串有效字符個(gè)數(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>  子程序中包含一些宏定義,使程序可移植性增強(qiáng),還包含一些對(duì)LCD1602液晶的操作程序及延時(shí)程序。程序如下:</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++; //計(jì)算字符串有效字符個(gè)數(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、 //寫字符時(shí)整體不移動(dòng)</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(); //檢測(cè)忙信號(hào)?</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)生使能脈沖信號(hào)</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)生使能脈沖信號(hào)</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); //檢測(cè)忙標(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、>  該頭文件中是對(duì)子程序進(jìn)行程序說(shuō)明,方便主程序的調(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 是一種針對(duì)TI的DSP、微控制器和應(yīng)用處理器

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

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

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

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

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

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; //間隔定時(shí)器,定時(shí)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++; //計(jì)算字符串有效字符個(gè)數(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>  功 能:讓液晶從某個(gè)位置起連續(xù)顯示一個(gè)字符串</p><p>  參 數(shù):x--位置的列坐標(biāo)</p><p><b>  y--位置的行坐標(biāo)</b></p><p> 

86、 ptr--指向字符串存放位置的指針</p><p><b>  返回值 :無(wú)</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++; //計(jì)算字符串有效字符個(gè)數(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>  功 能:讓液晶從某個(gè)位置起連續(xù)顯示一個(gè)字符串</p><p>  參 數(shù):x--位置的列坐標(biāo)</p><p><

91、b>  y--位置的行坐標(biāo)</b></p><p><b>  n--顯示字符個(gè)數(shù)</b></p><p>  ptr--指向字符串存放位置的指針</p><p><b>  返回值 :無(wú)</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>  返回值 :無(wú)</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>  功 能:在某個(gè)位置顯示一個(gè)字符

99、</p><p>  參 數(shù):x--位置的列坐標(biāo)</p><p><b>  y--位置的行坐標(biāo)</b></p><p>  data--顯示的字符數(shù)據(jù)</p><p><b>  返回值 :無(wú)</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>  功 能:對(duì)1602液晶模塊進(jìn)行復(fù)位操作</p><p><

102、;b>  參 數(shù):無(wú)</b></p><p><b>  返回值 :無(wú)</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); //寫字符時(shí)整體不移動(dòng)</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>  返回值 :無(wú)</b></p><p>  *******************************

108、********************/</p><p>  void LcdWriteCommand(uchar cmd,uchar chk)</p><p><b>  {</b></p><p>  if(chk) WaitForEnable(); //檢測(cè)忙信號(hào)?</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)生使能脈沖信號(hào)</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>  返回值 :無(wú)</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)生使能脈沖信號(hào)</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ù):無(wú)</b></p><p><b>  返回值 :無(wú)</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); //檢測(cè)忙標(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>  功 能:延時(shí)約5ms</p><p><b>  參

121、 數(shù):無(wú)</b></p><p><b>  返回值 :無(wú)</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 實(shí)物</b></p>

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論