單片機串口通信及液晶顯示_第1頁
單片機串口通信及液晶顯示_第2頁
單片機串口通信及液晶顯示_第3頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1、CDIO 設(shè)計目的通過虛擬串口實現(xiàn)下位機與上位機之間的相互通信。通過設(shè)計將串口通信的各種方式進行進一步的了解。將接收的數(shù)字與發(fā)送的數(shù)字在 LCD 上進行顯示,從而熟悉液晶顯示屏 LCD1602 的具體操 作。熟練掌握 C 語言在單片機上的編程應(yīng)用。 將各學(xué)科之間的的知識進行綜合運用,并能夠?qū)崿F(xiàn)所需的功能設(shè)計。2、CDIO 設(shè)計正文2.1 串口通信原理串行通信是 CPU 與外界交換信息的一種基本通信方式。 通信時僅需一到兩根傳輸線, 且每次只 能傳送一位,適用于長距離傳輸,但速度較慢。 MCS 51 串行口是一個可編程的全雙工串行通信接 口,其對應(yīng)的引腳為 P3.0(10 腳)和 P3.1(

2、11 腳),分別為 RXD 和 TXD ,通過軟件編程它可以作 通用異步收發(fā)器用,也可以做同步移位寄存器使用,其幀格式有 8位、 10位和 11位 3種,并能設(shè) 置各種波特率。 MCS 51 串行口有兩個獨立的緩沖器,即發(fā)送緩沖器和接收緩沖器,且共用一個地 址99H ( SBUF )。同時,MSC 51串行口可以用軟件設(shè)置成 4種不同的工作方式。串行口的工作原理通過對特殊功能寄存器一串行口控制寄存器中 SMo、SMi兩位的操作,MCS 51單片機串口通 信工作方式有4種,與串行口有關(guān)的特殊功能寄存器有串行口控制寄存器SCON、電源控制寄存器PCON和定時器Ti,主要確定了串口通信的工作方式和波

3、特率的計算方法。( 1 )串行口數(shù)據(jù)緩沖器 SBUFSBUF 是兩個在物理上相互獨立的接收,發(fā)送緩沖器,可同時發(fā)送,接收數(shù)據(jù),兩個緩沖器共用一個字節(jié)地址,為 99H,可字節(jié)尋址,不可位尋址,復(fù)位值為 00H??赏ㄟ^編程對 SBUF的讀寫 來區(qū)別是對接收緩沖器的操作還是對發(fā)送緩沖器的操作。CPU寫SBUF,就是修改發(fā)送緩沖器; CPU讀SBUF,就是讀接收緩沖器,在硬件結(jié)構(gòu)上,串行口對外有兩條獨立的收發(fā)信號線RXD和TXD,因此可以同時發(fā)送,接收數(shù)據(jù),實現(xiàn)全雙工傳送。(2)串行口控制寄存器 SCONSCON 寄存器用于確定串行通信的工作方式、接收和發(fā)送控制、串行口的中斷狀態(tài)標志,它既可以是字節(jié)尋

4、址,也可以是位尋址,字地址為98H,其復(fù)位值為00H。SMo, SMi工作方式控制位,可構(gòu)成 4種通信工作方式,分別為:方式0-同步移位寄存器;方式 1-10位異步收發(fā);方式 2-11 位異步收發(fā);方式 3-11 位異步收發(fā)。SM2多機通信控制位,用于主一從式多機通信控制,因多機通信是在方式2和方式3下進行,因此 SM 2位主要用于方式 2 和方式 3。若 SM 2=1,則允許多機通信。若 SM 2=0,則不屬于多機通信 情況,接收到一幀數(shù)據(jù)后,無論第9位( D 8)是 0 還是 1,都置中斷標志 RI=1 ,接收到的數(shù)據(jù)裝入接收 /發(fā)送緩沖器( SBUF )中。在工作方式 1 時,若 SM

5、2=1,則只有接收到有效停止位時中斷標志RI 才置 1,以便接收下一幀數(shù)據(jù);在工作方式 0時,SM2必須為0。REN 允許接收控制位,用軟件置 1或清零,REN=1,允許接收;REN=0,禁止接收。TB8發(fā)送數(shù)據(jù)位8,在方式2和方式3時,TB8是要發(fā)送的第9位數(shù)據(jù)。在多機通信中,以TB8 位的狀態(tài)表示主機發(fā)送的是地址還是數(shù)據(jù):TB8=0為數(shù)據(jù),TB8=1為地址,該位由軟件置位或清零,此外,該位還可以作為數(shù)據(jù)的奇偶檢驗位。RB 8接收數(shù)據(jù)位 8,在工作方式 2 和工作方式 3 種,它是接收到的第 9 位數(shù)據(jù)位,既可以作為 約定好的奇偶檢驗位,也可以作為多機通信時的地址幀或數(shù)據(jù)幀標志。在工作方式1

6、 中若 SM2=0,則RB8是接收到的停止位,在工作方式 0種不使用RB8。TI 發(fā)送中斷標志位,在工作方式0中,發(fā)送完8位數(shù)據(jù)后,由硬件置 1,向CPU申請接收中斷, CPU 響應(yīng)中斷后,必須用軟件清零;在其他方式下,在發(fā)送停止位前,由硬件置位。RI 接收中斷標志位。在工作方式 0種,接收完8位數(shù)據(jù)后,由硬件置1,向CPU申請發(fā)送中 斷, CPU 響應(yīng)中斷后,必須用軟件清零;在其他方式下,在接收到停止位的中間時刻由硬件置1,中斷響應(yīng)后也必須用軟件清零。串行發(fā)送中斷標志位 TI 和接受中斷標志位 RI 是同一個中斷源,在全雙工通信中,必須用軟件 來判別是發(fā)送中斷請求還是接收中斷請求。( 3)電

7、源控制寄存器 PCONPCON 主要是為 CHMOS 型單片機上實現(xiàn)電源控制而設(shè)置的專用寄存器,單元地址為87H 其中只有一位 SMOD 與串行口工作有關(guān)。 SMOD 稱為波特率選擇位。 在工作方式 1, 2, 3中若 SMOD=1 , 則波特率提高一倍;若 SMOD=0 ,則波特率不加倍。除了以上3種特殊功能寄存器以外,串口的工作還與定時器 Ti和中斷允許寄存器IE有關(guān),定 時器Ti主要在工作方式1, 工作方式2中用于計算波特率,而 IE主要用于接收/發(fā)送中斷的允許控 制,ES=0,禁止串行中斷,ES=1,允許串行中斷。串行通信的波特率在使用串口做通訊時,一個很重要的參數(shù)就是波特率,只有上下

8、位機的波特率一樣時才可以進行正常通訊。波特率是指串行端口每秒可以傳輸?shù)牟ㄌ匚粩?shù)。51 芯片的串口工作模式 0的波特率是固定的,為fosc/12,以一個12M的晶振來計算,那么它的波特率可以達到 1M。模式2的波特率是固定在fosc/64 或fosc/32,具體用那一種就取決于PCOt寄存器中的 SMOD位,女口 SMO場0,波特率為 focs/64,SMOD 為 1,波特率為 focs/32 。模式 1 和模式 3 的波特率是可變的,取決于定時器 1 或 2( 52 芯片)的溢出速率。計算這兩個模式的波特率可以用以下的公式去計算。波特率=(2SMO32)X定時器1溢出速率(1)上式中如設(shè)置了

9、PCON寄存器中的SMOD位為1時就可以把波特率提升 2倍。通常會使用定時器1工作在定時器工作模式 2下,這時定時值中的 TL1做為計數(shù),TH1做為自動重裝值,這個定時模式下,定時器溢出后,TH1的值會自動裝載到 TL1,再次開始計數(shù),這樣可以不用軟件去干預(yù),使得定 時更準確。在這個定時模式 2 下定時器 1 溢出速率的計算公式如下:溢出速率=(計數(shù)速率)/(256 TH1)(2)上式中的“計數(shù)速率”與所使用的晶體振蕩器頻率有關(guān),在51 芯片中定時器啟動后會在每一個機器周期使定時寄存器 TH的值增加一,一個機器周期等于十二個振蕩周期,所以可以得知51芯片的計數(shù)速率為晶體振蕩器頻率的1/12,一

10、個12M的晶振用在51芯片上,那么51的計數(shù)速率就為1M。通常用 11.0592M 晶體是為了得到標準的無誤差的波特率。如我們要得到 9600的波特率,晶振為 11.0592M和12M,定時器1為模式2, SMO毆為1,分別看看那所要求的 TH1為何值。代入公式:11.0592M9600 = (2 - 32) X (11.0592M/12)/(256-TH1)TH1= 25012M9600 = (2 - 32) X (12M/12)/(256-TH1)TH仁 249.49上面的計算可以看出使用12M晶體的時候計算出來的TH1不為整數(shù),而 TH1的值只能取整數(shù),這樣它就會有一定的誤差存在不能產(chǎn)生

11、精確的 9600 波特率。本次設(shè)計中為了得到精確地波特率,采用的晶振頻率為11.0592MHz,此外定時器工作在方式 2,即八位自動重裝載,串口工作在方式 1.2.2接收與發(fā)送數(shù)據(jù)顯示示。下位機發(fā)送的數(shù)據(jù)與上位機接受的數(shù)據(jù)都是通過LCD1602 來進行顯示的,其引腳圖如圖 1 所圖1LCD1602引腳圖下位機發(fā)送的數(shù)據(jù)與上位機接受的數(shù)據(jù)都是通過LCD1602來進行顯示的。1602LCD采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表1所示:表1:引腳接口說明表編號符號引腳說明編號符號引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4

12、RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負極第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度 過高時會產(chǎn)生 鬼影”使用時可以通過一個 10K的電位器調(diào)整對比度。第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當 RS為低電平R/W為高電平時可以讀忙信號,當 RS為

13、 高電平R/W為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第714腳:D0D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負極。2.2.1 1602LCD的指令說明及時序1602液晶模塊部的控制器共有 11條控制指令,如表 2所示:表2 :控制命令表序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標返回000000001*3置輸入模式00000001I/DS4顯示開/關(guān)控制0000001DCB5光標或字符移位000001S/CR/L*6置功能00001DLNF*7置字符發(fā)生存貯器地址0001字符發(fā)生

14、存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標志或地址01BF計數(shù)器地址10寫數(shù)到CGRAM 或DDRAM )10要寫的數(shù)據(jù)容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)容1602液晶模塊的讀寫操作、屏幕和光標的操作都是通過指令編程來實現(xiàn)的。(說明:1為高電平、0為低電平)指令1 :清顯示,指令碼 01H,光標復(fù)位到地址 00H位置。指令2 :光標復(fù)位,光標返回到地址00H。指令3 :光標和顯示模式設(shè)置I/D :光標移動方向,高電平右移,低電平左移S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。指令4 :顯示開關(guān)控制。 D :控制整體顯示的開與關(guān), 高電平表示

15、開顯示,低電平表示關(guān)顯示 C : 控制光標的開與關(guān),高電平表示有光標,低電平表示無光標B:控制光標是否閃爍,高電平閃爍,低電平不閃爍。指令5 :光標或顯示移位 S/C :高電平時移動顯示的文字,低電平時移動光標。指令6 :功能設(shè)置命令 DL :高電平時為4位總線,低電平時為 8位總線N :低電平時為單行 顯示,高電平時雙行顯示F:低電平時顯示5x7的點陣字符,高電平時顯示 5x10的點陣字符。指令7 :字符發(fā)生器 RAM地址設(shè)置。指令8: DDRAM地址設(shè)置。指令9 :讀忙信號和光標地址 BF :為忙標志位,高電平表示忙,此時模塊不能接收命令或者數(shù) 據(jù),如果為低電平表示不忙。指令10 :寫數(shù)據(jù)

16、。指令11 :讀數(shù)據(jù)。表3:基本操作時序表讀狀態(tài)輸入RS=L,R/W=H,E=H輸出D0 D7=狀態(tài)字寫指令輸入RS=L, R/W=L,D0 D7=指令碼,E=高脈沖輸出無讀數(shù)據(jù)輸入RS=H,R/W=H,E=H輸出D0 D7=數(shù)據(jù)寫數(shù)據(jù)輸入RS=H,R/W=L,D0 D7=數(shù)據(jù),E=高脈沖輸出無對LCD進行些操作時的時序圖如圖2所示圖2寫操作時序2.2.2 1602LCD 的RAM地址映射液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字 符,圖3是1602的部顯示地址。例如

17、第二行第一個字符的地址是40H ,那么是否直接寫入40H就可以將光標定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1所以實際寫入的數(shù)據(jù)應(yīng)該是 01000000B (40H)+10000000B(80H)=11000000B(C0H)。在對液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時光標是自動右移的,無需人工干預(yù)。每次輸入指令前 都要判斷液晶模塊是否處于忙的狀態(tài)。LCD16字)(2行000102030405060708090A0B0C0D0E0F027404142434445464748494A4B4D4E4F5067圖31602LCD部顯示

18、地址例如第二行第一個字符的地址是 40H ,那么是否直接寫入40H就可以將光標定位在第二行第一 個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1所以實際寫入的數(shù)據(jù)應(yīng)該是 01000000B( 40H)+10000000B(80H)=11000000B(C0H)。在對液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時光標是自動右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。2.2.3 1602LCD的一般初始化過程延時15mS寫指令38H (不檢測忙信號)延時5mS寫指令38H (不檢測忙信號)延時5mS寫指令38H (不檢測忙信號)以后每次

19、寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號寫指令38H :顯示模式設(shè)置寫指令08H :顯示關(guān)閉寫指令01H :顯示清屏寫指令06H :顯示光標移動設(shè)置寫指令0CH :顯示開及光標設(shè)置2.3軟件設(shè)計本次設(shè)計過程中當接收到數(shù)據(jù)后CPU響應(yīng)中斷,對接接收到得數(shù)據(jù)進行顯示后退出中斷,主函數(shù)以及中斷函數(shù)的流程圖如圖4與圖5所示。開始進入中斷將TI置0將RI清0退出中斷圖5中斷流程圖圖4主函數(shù)流程圖2.4硬件仿真及調(diào)試lend datug : 03 rsee i ue data! 1 1li bXTJMJXa XTiU=asf11-fJ-l RI4 U*P? 1/jiS P7 ?i"Air>

20、p Ji'JL11 中鼻幅衛(wèi)-P?.JA14 ! aJ / /A ! IPg 心 r iP3.ll/DtpPl hCTIff1 ! i FS HEP3 r-=gF I'J -'IJL-圖6硬件設(shè)計總體仿真電路圖由于本次設(shè)計只是仿真,并沒有進行硬件電路的搭建,因此仿真時采用的是虛擬串口,通過軟件增加了一對虛擬串口 COM1,COM4,其設(shè)置界面如圖 7所示。圖7虛擬串口調(diào)試設(shè)置界面8所示。圖8串口調(diào)試助手仿真界面當仿真開始后下位機發(fā)送的數(shù)進過虛擬串口發(fā)送上位機通過串口調(diào)試助手進行數(shù)據(jù)的發(fā)送與接收,其,仿真時下位機與上位機的波特率均設(shè)置為9600,串口調(diào)試助手工作時界面如圖

21、3、CDIO設(shè)計總結(jié)本次設(shè)計住實現(xiàn)了上位機與下位機之間簡單的通信,上位機通過串口調(diào)試助手發(fā)送一個十六進制的數(shù)經(jīng)過虛擬串口,可以被下位機接收,并在LCD進行顯示。在老師講述單片機課程的時候,對單片機的串口通信知識進行了原理上的簡單了解,對實際應(yīng)用過程中應(yīng)考慮的一些問題并沒有過多 的了解,通過本次設(shè)計,對單片機串口通信這部分的容進行了更深層次的學(xué)習,知道了很多可是跟 你學(xué)不到的東西。另外本次設(shè)計中,對收發(fā)的數(shù)據(jù)進行顯示時用到了LCD液晶1602,剛開始學(xué)習是覺得液晶顯示很神奇,再設(shè)計過程中,通過自己看教學(xué)視頻進行學(xué)習,對液晶的原理,以及操作 命令等有了比較詳細的了解。一開始進行操作時由于對液晶顯示

22、的時序不是很清楚,知識把液晶顯示的代碼簡單的堆在了一起,結(jié)果運行時,液晶不能顯示。后來,自己仔細對1602的時序圖進行學(xué)習后,才發(fā)現(xiàn)液晶初始化時,每條命令都是有先后順序的。總之,通過本次設(shè)計鍛煉了我查找錯誤時的耐力,也是我對與C語言在單片機上的編程變得更加熟練,為以后進一步學(xué)習打下了堅實的基礎(chǔ)。4、參考文獻1 康華光主編,電子技術(shù)基礎(chǔ)(數(shù)字部分)M:高等教育,2000.62 自美主編,電子線路設(shè)計/實驗/測試M:華中科技大學(xué),2000.73 胡漢才單片機原理與其接口技術(shù)(第二版)M.:清華大學(xué),2004.4 偉,單片機C語言程序設(shè)計實例100例.電子工業(yè).2009 , 06CDIO設(shè)計評語課程

23、設(shè)計成績指導(dǎo)教師(簽字)年月日代碼:#in clude<reg51.h>#defi ne uchar un sig ned char #defi ne uint un sig ned int uchar table10="se nd data:" uchar table113="receive data:" sbit Icde n=P2A2;sbit Icdrs=P2A0;sbit lcdrw=P2A1;uchar num,flag;uchar c;void delay(uint z) uint x,y;for(x=z;x>0;x-)

24、for(y=110;y>0;y-);/ 寫命令子函數(shù)void write_cmd(uchar cmd)lcdrs=0;lcden=0;P0=cmd;lcdrw=0;delay(5);lcden=1;delay(5);lcden=0;delay(5);/寫數(shù)據(jù)子函數(shù)void write_data(uchar dataa) lcdrs=1;P0=dataa;/lcdrw=0;delay(5);lcden=1;delay(5);lcden=0;/液晶初始化void init()8 位數(shù)據(jù)口lcden=0;write_cmd(0x38);/ 設(shè)置 16*2 顯示, 5*7 的點陣,write_cmd(0x0c);/ 開顯示,不顯示光標write_cmd(0x06);write_cmd(0x01);/ 清屏write_cmd(0x80);/ 初始化數(shù)據(jù)指針for(num=0;num<10;num+)write_data(tablenum);delay(5);write_cmd(0x80

溫馨提示

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

評論

0/150

提交評論