版權(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ù)書(shū)</b></p><p> 學(xué)生姓名: 專業(yè)班級(jí): </p><p> 指導(dǎo)教師:
2、 工作單位: </p><p><b> 題目要求 :</b></p><p> 使用LaunchPad上的板上資源,外接1602液晶,編寫(xiě)程序使字符串在液晶上循環(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)試過(guò)程...................................................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),正在以前所未見(jiàn)的速度被單片機(jī)智能控制系統(tǒng)所代替。單片機(jī)的使用隨處可見(jiàn),而人們的生活也越來(lái)越離不開(kāi)單片機(jī)。</p><p> 液晶是相態(tài)的一種,因?yàn)槠涮厥獾奈锢?、化學(xué)、光學(xué)特性,20世紀(jì)中葉開(kāi)始被廣泛應(yīng)用在輕薄型的顯示技術(shù)上液晶顯示器也被廣泛運(yùn)用,也發(fā)揮著越來(lái)越大的作用。盡年來(lái),液晶顯示技術(shù)飛速發(fā)展,運(yùn)用更加廣泛。</p><p>
16、; 本課程設(shè)計(jì)通過(guò)MSP430G2553單片機(jī)控制LCD1602液晶顯示器實(shí)現(xiàn)一串字符循環(huán)移動(dòng)。</p><p><b> 1 課程設(shè)計(jì)要求</b></p><p> 使用LaunchPad上的板上資源,外接1602液晶,編寫(xiě)程序使“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)的開(kāi)發(fā)板。除了學(xué)生自主創(chuàng)新實(shí)踐外,LaunchPad開(kāi)發(fā)板還可以用于本科低年級(jí)課程,如嵌入式C語(yǔ)言,電子技術(shù)基礎(chǔ),微機(jī)原理,單片機(jī)等課程的自主實(shí)驗(yàn)環(huán)節(jié)以及課程設(shè)計(jì)。該套開(kāi)發(fā)板為單片機(jī)熱愛(ài)者提供了一個(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)開(kāi)發(fā)板:</p><p> 圖1 Launch Pad評(píng)估實(shí)驗(yàn)開(kāi)發(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)行的需要。通過(guò)對(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è)中斷寄存器。寄存器情況可參見(jiàn)表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),讀寫(xiě)選擇端(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、 //寫(xiě)字符時(shí)整體不移動(dòng)</p><p> LcdWriteCommand(0x0c,1); //顯示開(kāi),不開(kāi)游標(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; //將命令字寫(xiě)入數(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ù)寫(xiě)入數(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、的集成開(kāi)發(fā)環(huán)境。CCStudio 包括一套用于開(kāi)發(fā)和調(diào)試嵌入式應(yīng)用程序的工具。它包括用于各種 TI 設(shè)備系列的編譯器、源代碼編輯器、項(xiàng)目生成環(huán)境、調(diào)試程序、探查器、模擬器和其他許多功能。CCStudio提供一個(gè)單一用戶界面,指導(dǎo)用戶完成應(yīng)用程序開(kāi)發(fā)流程的每一步驟。</p><p> 安裝好CCSv5之后,先新建一個(gè)工程,然后在新建的工程里建立.c或.h文件,接下來(lái)便可以在文件里編寫(xiě)程序,并調(diào)試運(yùn)行,Build
69、Project 為編譯,Debug是仿真。</p><p><b> 5.2 調(diào)試過(guò)程</b></p><p> 程序編寫(xiě)完成后,經(jīng)檢查無(wú)誤后,點(diǎn)擊Project->Build Project,進(jìn)行編譯,編譯結(jié)果如圖2所示:</p><p><b> 圖2 程序調(diào)試界面</b></p><p
70、> 在調(diào)試過(guò)程中,開(kāi)始時(shí)LCD1602液晶一直沒(méi)有顯示,認(rèn)為是程序出了問(wèn)題,不過(guò)經(jīng)過(guò)檢查和調(diào)試,發(fā)現(xiàn)程序沒(méi)問(wèn)題。不是程序問(wèn)題,就檢查硬件,最終發(fā)現(xiàn)了問(wèn)題是LCD1602液晶屏的V0口與GND間的滑動(dòng)變阻器沒(méi)有調(diào)節(jié)合適,導(dǎo)致無(wú)法觀察到顯示效果。經(jīng)過(guò)調(diào)節(jié)滑動(dòng)變阻器,就可以觀察到課程設(shè)計(jì)所要求的效果。如圖3所示:</p><p> 圖4 LCD1602液晶顯示</p><p> 在調(diào)
71、試過(guò)程中,有時(shí)候會(huì)出現(xiàn)無(wú)法脫機(jī)運(yùn)行的情況,經(jīng)過(guò)檢查,發(fā)現(xiàn)是因?yàn)樾酒苣_接觸不良導(dǎo)致的,壓緊芯片即可解決問(wèn)題。</p><p><b> 6結(jié)束語(yǔ)</b></p><p> 通過(guò)完成本次課程設(shè)計(jì),我學(xué)到了許許多多的知識(shí),獲得了豐富的經(jīng)驗(yàn)。在完成課程設(shè)計(jì)的過(guò)程中對(duì)MSP430G2553有了初步的了解,掌握了該單片機(jī)的一些使用技巧,例如:I/O口寄存器的設(shè)置及使用,定時(shí)
72、器的使用和中斷的使用等等。掌握并能夠熟練使用CCSv5這個(gè)編程軟件,在該軟件上進(jìn)行編寫(xiě)程序,下載并進(jìn)行調(diào)試,最終完成了本次課程設(shè)計(jì)。在程序設(shè)計(jì)、編寫(xiě)程序到調(diào)試的過(guò)程中,加強(qiáng)了我獨(dú)立發(fā)現(xiàn)問(wèn)題解決問(wèn)題的能力,同時(shí)使得實(shí)踐能力得到進(jìn)一步的提高。</p><p> 在實(shí)踐中,充分將理論知識(shí)用于實(shí)踐,使自身對(duì)知識(shí)的理解更進(jìn)一層,更加能夠熟練的掌握并使用理論知識(shí)。實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),只有通過(guò)實(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); //寫(xiě)字符時(shí)整體不移動(dòng)</p>&
106、lt;p> LcdWriteCommand(0x0c,1); //顯示開(kāi),不開(kāi)游標(biāo),不閃爍</p><p><b> }</b></p><p> /***************************************************</p><p> 函數(shù)名稱:LcdWriteCommand</
107、p><p> 功 能:向液晶模塊寫(xiě)入命令</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; //將命令字寫(xiě)入數(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)前地址寫(xiě)入顯示數(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ù)寫(xiě)入數(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)書(shū)[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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于lcd1602液晶顯示系統(tǒng)課程設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)---字符串動(dòng)畫(huà)顯示
- LCD1602液晶中文資料.pdf
- 課程設(shè)計(jì)--- 字符串排序
- 課程設(shè)計(jì)--字符串類
- LCD1602液晶中文資料.pdf
- LCD1602液晶中文資料.pdf
- 課程設(shè)計(jì)--字符串的操作
- lcd1602
- lcd1602顯示技術(shù)參數(shù)資料
- 字符串處理系統(tǒng)課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)--字符串類
- lcd1602顯示(c語(yǔ)言)簡(jiǎn)單測(cè)試
- 課程設(shè)計(jì)--查找字符串中的指定字符
- 課程設(shè)計(jì)--實(shí)現(xiàn)字符串的多種操作
- c++課程設(shè)計(jì)報(bào)告--字符串處理
- freq - lcd1602
- 微機(jī)課程設(shè)計(jì)--字符串動(dòng)畫(huà)加速減速
- c語(yǔ)言課程設(shè)計(jì)(字符串函數(shù)包)
- 匯編課程設(shè)計(jì)-字符串查找與替換
評(píng)論
0/150
提交評(píng)論