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

下載本文檔

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

文檔簡介

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

2、XD,通過軟件編程它可以作通用異步收發(fā)器用,也可以做同步移位寄存器使用,其幀格式有8位、10位和11位3種,并能設置各種波特率。MCS51串行口有兩個獨立的緩沖器,即發(fā)送緩沖器和接收緩沖器,且共用一個地址99H(SBUF)。同時,MSC51串行口可以用軟件設置成4種不同的工作方式。2.1.1串行口的工作原理通過對特殊功能寄存器串行口控制寄存器中SM0、SM1兩位的操作,MCS51單片機串口通信工作方式有4種,與串行口有關(guān)的特殊功能寄存器有串行口控制寄存器SCON、電源控制寄存器PCON和定時器T1,主要確定了串口通信的工作方式和波特率的計算方法。(1)串行口數(shù)據(jù)緩沖器SBUFSBUF是兩個在物

3、理上相互獨立的接收,發(fā)送緩沖器,可同時發(fā)送,接收數(shù)據(jù),兩個緩沖器共用一個字節(jié)地址,為99H,可字節(jié)尋址,不可位尋址,復位值為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é)尋址,也可以是位尋址,字地址為98H,其復位值為00H。SM0,SM1工作方式控制位,

4、可構(gòu)成4種通信工作方式,分別為:方式0-同步移位寄存器;方式1-10位異步收發(fā);方式2-11位異步收發(fā);方式3-11位異步收發(fā)。SM2多機通信控制位,用于主一從式多機通信控制,因多機通信是在方式2和方式3下進行,因此SM2位主要用于方式2和方式3。若SM2=1,則允許多機通信。若SM2=0,則不屬于多機通信情況,接收到一幀數(shù)據(jù)后,無論第9位(D8)是0還是1,都置中斷標志RI=1,接收到的數(shù)據(jù)裝入接收/發(fā)送緩沖器(SBUF)中。在工作方式1時,若SM2=1,則只有接收到有效停止位時中斷標志RI才置1,以便接收下一幀數(shù)據(jù);在工作方式0時,SM2必須為0。REN允許接收控制位,用軟件置1或清零,R

5、EN=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ù)的奇偶檢驗位。 RB8接收數(shù)據(jù)位8,在工作方式2和工作方式3種,它是接收到的第9位數(shù)據(jù)位,既可以作為約定好的奇偶檢驗位,也可以作為多機通信時的地址幀或數(shù)據(jù)幀標志。在工作方式1中若SM2=0,則RB8是接收到的停止位,在工作方式0種不使用RB8。TI發(fā)送中斷標志位,在工作方式0中,發(fā)送完8位數(shù)據(jù)后,由硬件置1,向CPU申請接收中斷,CPU響應中斷

6、后,必須用軟件清零;在其他方式下,在發(fā)送停止位前,由硬件置位。RI接收中斷標志位。在工作方式0種,接收完8位數(shù)據(jù)后,由硬件置1,向CPU申請發(fā)送中斷,CPU響應中斷后,必須用軟件清零;在其他方式下,在接收到停止位的中間時刻由硬件置1,中斷響應后也必須用軟件清零。串行發(fā)送中斷標志位TI和接受中斷標志位RI是同一個中斷源,在全雙工通信中,必須用軟件來判別是發(fā)送中斷請求還是接收中斷請求。(3)電源控制寄存器PCON PCON主要是為CHMOS型單片機上實現(xiàn)電源控制而設置的專用寄存器,單元地址為87H其中只有一位SMOD與串行口工作有關(guān)。SMOD稱為波特率選擇位。在工作方式1,2,3中若SMOD=1,

7、則波特率提高一倍;若SMOD=0,則波特率不加倍。除了以上3種特殊功能寄存器以外,串口的工作還與定時器T1和中斷允許寄存器IE有關(guān),定時器T1主要在工作方式1,工作方式2中用于計算波特率,而IE主要用于接收/發(fā)送中斷的允許控制,ES=0,禁止串行中斷,ES=1,允許串行中斷。2.1.2串行通信的波特率在使用串口做通訊時,一個很重要的參數(shù)就是波特率,只有上下位機的波特率一樣時才可以進行正常通訊。波特率是指串行端口每秒內(nèi)可以傳輸?shù)牟ㄌ匚粩?shù)。51芯片的串口工作模式0的波特率是固定的,為fosc/12,以一個12M的晶振來計算,那么它的波特率可以達到1M。模式2的波特率是固定在fosc/64或fosc

8、/32,具體用那一種就取決于PCON寄存器中的SMOD位,如SMOD為0,波特率為focs/64,SMOD為1,波特率為focs/32。模式1和模式3的波特率是可變的,取決于定時器1或2(52芯片)的溢出速率。計算這兩個模式的波特率可以用以下的公式去計算。波特率(2SMOD32)定時器1溢出速率 (1)上式中如設置了PCON寄存器中的SMOD位為1時就可以把波特率提升2倍。通常會使用定時器1工作在定時器工作模式2下,這時定時值中的TL1做為計數(shù),TH1做為自動重裝值,這個定時模式下,定時器溢出后,TH1的值會自動裝載到TL1,再次開始計數(shù),這樣可以不用軟件去干預,使得定時更準確。在這個定時模式

9、2下定時器1溢出速率的計算公式如下:溢出速率(計數(shù)速率)/(256TH1) (2) 上式中的“計數(shù)速率”與所使用的晶體振蕩器頻率有關(guān),在51芯片中定時器啟動后會在每一個機器周期使定時寄存器TH的值增加一,一個機器周期等于十二個振蕩周期,所以可以得知51芯片的計數(shù)速率為晶體振蕩器頻率的1/12,一個12M的晶振用在51芯片上,那么51的計數(shù)速率就為1M。通常用11.0592M晶體是為了得到標準的無誤差的波特率。如我們要得到9600的波特率,晶振為11.0592M和12M,定時器1為模式2,SMOD設為1,分別看看那所要求的TH1為何值。代入公式:11.0592M9600(232)(11.0592

10、M/12)/(256-TH1)TH125012M9600(232)(12M/12)/(256-TH1)TH1249.49上面的計算可以看出使用12M晶體的時候計算出來的TH1不為整數(shù),而TH1的值只能取整數(shù),這樣它就會有一定的誤差存在不能產(chǎn)生精確的9600波特率。本次設計中為了得到精確地波特率,采用的晶振頻率為11.0592MHz,此外定時器工作在方式2,即八位自動重裝載,串口工作在方式1.2.2接收與發(fā)送數(shù)據(jù)顯示下位機發(fā)送的數(shù)據(jù)與上位機接受的數(shù)據(jù)都是通過LCD1602來進行顯示的,其引腳圖如圖1所示。圖1 LCD1602引腳圖下位機發(fā)送的數(shù)據(jù)與上位機接受的數(shù)據(jù)都是通過LCD1602來進行顯示

11、的。1602LCD采用標準的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表1所示: 表1:引腳接口說明表編號符號引腳說明編號符號引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(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為寄存器選

12、擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第714腳:D0D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負極。2.2.1 1602LCD的指令說明及時序1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表2所示:表2:控制命令表序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000

13、000012光標返回000000001*3置輸入模式00000001I/DS4顯示開/關(guān)控制0000001DCB5光標或字符移位000001S/CR/L*6置功能00001DLNF*7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標志或地址01BF計數(shù)器地址10寫數(shù)到CGRAM或DDRAM)10要寫的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)內(nèi)容1602液晶模塊的讀寫操作、屏幕和光標的操作都是通過指令編程來實現(xiàn)的。(說明:1為高電平、0為低電平)指令1:清顯示,指令碼01H,光標復位到地址00H位置。指令2:光標復位,光標返回到地址0

14、0H。指令3:光標和顯示模式設置 I/D:光標移動方向,高電平右移,低電平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。指令4:顯示開關(guān)控制。 D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控制光標的開與關(guān),高電平表示有光標,低電平表示無光標 B:控制光標是否閃爍,高電平閃爍,低電平不閃爍。指令5:光標或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標。指令6:功能設置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。指令7:字

15、符發(fā)生器RAM地址設置。指令8:DDRAM地址設置。指令9:讀忙信號和光標地址 BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。指令10:寫數(shù)據(jù)。指令11:讀數(shù)據(jù)。表3:基本操作時序表讀狀態(tài)輸入RS=L,R/W=H,E=H輸出D0D7=狀態(tài)字寫指令輸入RS=L,R/W=L,D0D7=指令碼,E=高脈沖輸出無讀數(shù)據(jù)輸入RS=H,R/W=H,E=H輸出D0D7=數(shù)據(jù)寫數(shù)據(jù)輸入RS=H,R/W=L,D0D7=數(shù)據(jù),E=高脈沖輸出無對LCD進行些操作時的時序圖如圖2所示圖2 寫操作時序2.2.2 1602LCD的RAM地址映射液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行

16、每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖3是1602的內(nèi)部顯示地址。例如第二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1所以實際寫入的數(shù)據(jù)應該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在對液晶模塊的初始化中要先設置其顯示模式,在液晶模塊顯示字符時光標是自動右移的,無需人工干預。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。圖3 1602LCD內(nèi)

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

18、/寫數(shù)據(jù)操作均需要檢測忙信號寫指令38H:顯示模式設置寫指令08H:顯示關(guān)閉寫指令01H:顯示清屏寫指令06H:顯示光標移動設置寫指令0CH:顯示開及光標設置2.3軟件設計本次設計過程中當接收到數(shù)據(jù)后CPU響應中斷,對接接收到得數(shù)據(jù)進行顯示后退出中斷,主函數(shù)以及中斷函數(shù)的流程圖如圖4與圖5所示。是開始初始化液晶初始化串口將下位機發(fā)送的數(shù)轉(zhuǎn)換為ASCII,并送入LCD顯示將要發(fā)送的數(shù),送入單片機的SBUFTI是否為1?否將原來發(fā)送的數(shù)加1將TI置0進入中斷將SBUF的值賦給temp將temp轉(zhuǎn)換為ASCII并送LCD顯示將RI清0退出中斷圖4 主函數(shù)流程圖 圖5中斷流程圖2.4硬件仿真及調(diào)試圖6

19、硬件設計總體仿真電路圖由于本次設計只是仿真,并沒有進行硬件電路的搭建,因此仿真時采用的是虛擬串口,通過軟件增加了一對虛擬串口COM1,COM4,其設置界面如圖7所示。圖7 虛擬串口調(diào)試設置界面當仿真開始后下位機發(fā)送的數(shù)進過虛擬串口發(fā)送上位機通過串口調(diào)試助手進行數(shù)據(jù)的發(fā)送與接收,其,仿真時下位機與上位機的波特率均設置為9600,串口調(diào)試助手工作時界面如圖8所示。圖8 串口調(diào)試助手仿真界面3、CDIO設計總結(jié)本次設計住實現(xiàn)了上位機與下位機之間簡單的通信,上位機通過串口調(diào)試助手發(fā)送一個十六進制的數(shù)經(jīng)過虛擬串口,可以被下位機接收,并在LCD進行顯示。在老師講述單片機課程的時候,對單片機的串口通信知識進

20、行了原理上的簡單了解,對實際應用過程中應考慮的一些問題并沒有過多的了解,通過本次設計,對單片機串口通信這部分的內(nèi)容進行了更深層次的學習,知道了很多可是跟你學不到的東西。另外本次設計中,對收發(fā)的數(shù)據(jù)進行顯示時用到了LCD液晶1602,剛開始學習是覺得液晶顯示很神奇,再設計過程中,通過自己看教學視頻進行學習,對液晶的原理,以及操作命令等有了比較詳細的了解。一開始進行操作時由于對液晶顯示的時序不是很清楚,知識把液晶顯示的代碼簡單的堆在了一起,結(jié)果運行時,液晶不能顯示。后來,自己仔細對1602的時序圖進行學習后,才發(fā)現(xiàn)液晶初始化時,每條命令都是有先后順序的??傊?,通過本次設計鍛煉了我查找錯誤時的耐力,

21、也是我對與C語言在單片機上的編程變得更加熟練,為以后進一步學習打下了堅實的基礎。4、參考文獻1 康華光主編,電子技術(shù)基礎(數(shù)字部分)M北京:高等教育出版社,2000.62 謝自美主編,電子線路設計/實驗/測試M武漢:華中科技大學出版社,2000.73胡漢才單片機原理與其接口技術(shù)(第二版)M北京:清華大學出版社,20044彭偉,單片機C語言程序設計實例100例.電子工業(yè)出版社.2009,06CDIO設計評 語課程設計成 績指導教師(簽字) 年 月 日代碼:#include#define uchar unsigned char#define uint unsigned intuchar table

22、10=send data:;uchar table113=receive data:;sbit lcden=P22;sbit lcdrs=P20;sbit lcdrw=P21;uchar num,flag;uchar c;void delay(uint z)uint x,y;for(x=z;x0;x-) for(y=110;y0;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 wr

23、ite_data(uchar dataa) lcdrs=1; P0=dataa;/lcdrw=0; delay(5); lcden=1; delay(5); lcden=0; /液晶初始化 void init() lcden=0; write_cmd(0x38);/ 設置16*2顯示,5*7的點陣,8位數(shù)據(jù)口 write_cmd(0x0c);/開顯示,不顯示光標 write_cmd(0x06); write_cmd(0x01);/清屏 write_cmd(0x80);/初始化數(shù)據(jù)指針 for(num=0;num10;num+) write_data(tablenum);delay(5); write_cmd(0x80+0x40); for(num=0;num14;num+) write_data(table

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論