基于AT89S52的串口通信控制LCM顯示
1 引言
計(jì)算機(jī)帶來的革命性進(jìn)步滲透到各個(gè)行業(yè),傳統(tǒng)意義上計(jì)算機(jī)的定義也發(fā)生大的變化.單片機(jī)簡稱Micro-Controller/Embedded -Controller,以其高性價(jià)比,備受工業(yè)控制,電子消費(fèi)領(lǐng)域重視.單片機(jī)串口通信是很多系統(tǒng)集成用到的方式。在一些復(fù)雜的控制系統(tǒng)中,單片機(jī)和 PC機(jī)互聯(lián)成為一種系統(tǒng)解決方案。單片機(jī)和PC機(jī)互聯(lián),利用PC機(jī)的強(qiáng)大運(yùn)算決策能力,單片機(jī)作為特殊環(huán)境的數(shù)據(jù)采集和執(zhí)行單元,越來越多地被利用到工業(yè)控制領(lǐng)域,這樣可以大幅度地節(jié)約系統(tǒng)成本。
2 總體解決方案
單片機(jī)選用Atmel89S52,通過DB9串口線連接到計(jì)算機(jī),串口通信采用RS232標(biāo)準(zhǔn)。單片機(jī)和計(jì)算機(jī)之間通信采用一定的通信協(xié)議。通過計(jì)算機(jī)端的串口通訊軟件控制單片機(jī)上LCM的顯示內(nèi)容和顯示方式。發(fā)送字符串或文本文件到單片機(jī),單片機(jī)驅(qū)動(dòng)LCM,并將接收到的內(nèi)容顯示在LCM上(LCM只能顯示ASCII字符及8個(gè)自定義字符),通過PC端軟件可以控制字符的顯示方式,如滾動(dòng)顯示,換行顯示,換屏顯示,并可以讀取當(dāng)前LCM顯示的內(nèi)容。所以系統(tǒng)的基本組成就是單片機(jī),PC機(jī)端串口通信軟件。
由于PC端計(jì)算功能強(qiáng)于單片機(jī),所以要預(yù)先處理好數(shù)據(jù)再向MCU發(fā)送。MCU提供一個(gè)容量有限的緩沖區(qū),PC機(jī)端軟件把要顯示的內(nèi)容送入緩沖,也可以從緩沖中讀取正在顯示的內(nèi)容。PC端串口通信軟件采用JAVA語言編寫,JAVA語言的特色是高度的可移植性,另外JDK (JAVA Development Kits)提供了豐富的類庫,能夠很方便地構(gòu)造良好圖形用戶接口的(GUI)應(yīng)用程序。
3 系統(tǒng)硬件電路設(shè)計(jì)與實(shí)現(xiàn)
硬件電路主要分成電源電路,單片機(jī)的上電復(fù)位和振蕩電路,單片機(jī)和LCM間的數(shù)據(jù)通路,另外就是單片機(jī)和PC機(jī)間的RS232通信模塊的設(shè)計(jì),采用MAX232系列芯片,負(fù)責(zé)電平信號(hào)的轉(zhuǎn)換。
.3.1 電源部分設(shè)計(jì)
如圖1所示,該電源部分電路,自帶整流橋,所以可以輸入直流或是交流9V電源,然后再通過7805穩(wěn)定到5V供單片機(jī)工作。固定式三端穩(wěn)壓電源 7805是由輸出腳Vo,輸入腳Vi和接地腳GND組成,它的穩(wěn)壓值為+5V,它屬于CW78XX系列的穩(wěn)壓器,輸入端接電容可以進(jìn)一步的濾波,輸出端也要接電容可以改善負(fù)載的瞬間影響,此電路的穩(wěn)定性也比較好,只是采用的電容必須要漏電流要小的鉭電容,如果采用電解電容,則電容量要比其他的數(shù)值要增加 10倍。
圖1 系統(tǒng)電源電路圖
3.2單片機(jī)外圍電路及LCM驅(qū)動(dòng)電路
單片機(jī)的最小系統(tǒng)包括震蕩電路、復(fù)位電路等。該系統(tǒng)的時(shí)鐘部分都是采用晶體振蕩器實(shí)現(xiàn)的??紤]到電源的輸入紋波對(duì)單片機(jī)的影響,在電源的管腳增加一個(gè)電容來實(shí)現(xiàn)濾波,以較小輸入端受到的干擾。在本系統(tǒng)中采用11.0592Mhz的晶振,由10K電阻和10uF電容構(gòu)成上電復(fù)位電路。-EA/Vpp 接VCC,因?yàn)樵L問內(nèi)部存儲(chǔ)器.ALE/-PROG應(yīng)置空。單片機(jī)的P0和P2口和RT1602 LCM連接。采用11.0592MHz的目的是方便串口使用9600bit/s的通信速率。
LCM顯示模塊是一種將液晶顯示器件,連接件,集成電路,PCB線路板,背光源,結(jié)構(gòu)件裝配在一起的組件,實(shí)際上它是一種商品化的部件。本設(shè)計(jì)選用 1602系列液晶點(diǎn)陣字符模塊,每行可以顯示16個(gè)字符,共2行。它是由點(diǎn)陣字符液晶顯示器和專用的行,列驅(qū)動(dòng)器,控制器及必要的連接件,結(jié)構(gòu)件裝配而成的,可以顯示數(shù)字和西文字符。這種點(diǎn)陣字符模塊本身具有字符發(fā)生器,顯示容量大,功能豐富。
圖2 單片機(jī)外圍電路及LCM驅(qū)動(dòng)電路原理圖
3.3 RS232串口通信電路
該系統(tǒng)實(shí)現(xiàn)串口通信模塊主要是與上位機(jī)進(jìn)行通信。單片機(jī)系統(tǒng)將保存在RAM中的數(shù)據(jù)送到上位機(jī)進(jìn)行處理,從而減輕單片機(jī)系統(tǒng)的負(fù)擔(dān)。由于單片機(jī)與上位機(jī)進(jìn)行通信時(shí)接口電平不同,因此需要進(jìn)行接口轉(zhuǎn)化,這里采用MAX232芯片來實(shí)現(xiàn)接口電平的轉(zhuǎn)化。
4 通信協(xié)議的設(shè)計(jì)
單片機(jī)和PC機(jī)端軟件進(jìn)行通信,就必須要遵守一定的通信規(guī)則,比如,MCU主動(dòng)發(fā)送初始化成功代碼到PC端,PC端發(fā)送一個(gè)特定的代碼說明將要向MCU發(fā)送數(shù)據(jù)了,MCU做好接收的準(zhǔn)備.
RS232通信速率最高支持19200bit/s.本軟件采用9600bit/s通信速率。所以通信協(xié)議要盡可能短小,以提高通信效率。
因?yàn)長CM只能顯示192個(gè)英文字符及標(biāo)點(diǎn)符號(hào)。所以握手信號(hào)不能采用此已知的字符,并且要保證握手信號(hào)盡可能地短,所以使用十六進(jìn)制的值來表示。通信協(xié)議的定義如表2所示:
表2 通訊協(xié)議
握手信號(hào)(通信協(xié)議) | |
字節(jié)碼(十六進(jìn)制) | 含義 |
0xff | PC向MCU發(fā)送LCM 顯示信息 |
0xfe | PC發(fā)送LCM信息結(jié)束 |
0xfd | PC請(qǐng)求MCU發(fā)送LCM顯示信息到PC |
5系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)軟件設(shè)計(jì)部分包括單片機(jī)端和PC端兩部分。單片機(jī)端主要是通過串口接收來自上位機(jī)的信息,然后將得到的信息在LCM中顯示。PC端軟件部分主要通過編寫圖形界面,來實(shí)現(xiàn)對(duì)用戶對(duì)整個(gè)系統(tǒng)的操控。單片機(jī)端和軟件端的主流程如圖3所示:
圖3 單片機(jī)端和PC端軟件操作流程圖
5.1單片機(jī)端軟件設(shè)計(jì)
單片機(jī)端軟件采用C51編寫(類C代碼),使用Keil uVision集成開發(fā)環(huán)境。單片機(jī)端主要完成單片機(jī)的初始化、LCM的顯示、串口通信。
單片機(jī)的初始化的主要是單片機(jī)的串口中斷打開和LCM的初始化顯示。要設(shè)置下列寄存器的值:IE,EA,ES,SCON,PCON, TCON等。
LCM的顯示主要完成控制LCM的顯示內(nèi)容和方式,及接收和發(fā)送信息給PC機(jī),并且在顯示時(shí)必須要先讀取其忙狀態(tài)標(biāo)記,以判斷LCM是否可以接受數(shù)據(jù)。
單片機(jī)部分的串口通信模塊只要完成單片機(jī)與上位機(jī)的通信,從而將系統(tǒng)所需的信息傳送給上位機(jī)進(jìn)行處理。由于AT89S52單片機(jī)具有片內(nèi)的 UART,因此實(shí)現(xiàn)串口通信相當(dāng)容易,只需要設(shè)置適當(dāng)?shù)募拇嫫骶涂梢允勾诠ぷ髌饋?。串口通信有循環(huán)(查詢)和中斷兩種方式。就使用效率而言,中斷方式比查詢方式節(jié)約CPU資源。所以此單片機(jī)的串口通訊采用中斷方式接受、發(fā)送數(shù)據(jù)。
5.2 PC端軟件設(shè)計(jì)
PC端軟件主要負(fù)責(zé)提供一個(gè)方便的用戶界面以便發(fā)送和接收,并且處理串口信息。此軟件運(yùn)行后,要使用主線程初始化用戶界面,同時(shí)啟動(dòng)一個(gè)后臺(tái)線程負(fù)責(zé)一直監(jiān)視用戶選擇的串口,接受單片機(jī)發(fā)送來的信息,并及時(shí)地顯示出來。當(dāng)用戶輸入要發(fā)送的字符,點(diǎn)擊發(fā)送時(shí),能夠及時(shí)的向串口發(fā)送數(shù)據(jù),另外,一個(gè)完整的軟件,幫助也是必不可少的,這樣方便用戶使用軟件。
歸納出系統(tǒng)需要的類對(duì)象:用戶界面類MainFrame,串口類PortControl,串口寫數(shù)據(jù)類SerialWriter,串口讀數(shù)據(jù)類SerialReader。
PC端在進(jìn)行串口通信編程時(shí),必須在使用之前首先向操作系統(tǒng)提出資源申請(qǐng)要求(打開串口),然后對(duì)端口進(jìn)行參數(shù)配置,之后才可以同串口進(jìn)行數(shù)據(jù)交換并完成數(shù)據(jù)從串口的發(fā)送與接收。最后,在通信完成時(shí)釋放資源(關(guān)閉串口)。創(chuàng)建串口類PortControl,負(fù)責(zé)串口的列舉,數(shù)據(jù)發(fā)送和數(shù)據(jù)接收。
6 總結(jié)
本文的創(chuàng)新點(diǎn)在于設(shè)計(jì)的串口通信軟件采用JAVA語言編寫,,成功的解決了因?yàn)榇趯儆谙到y(tǒng)底層資源,大多與系統(tǒng)緊密結(jié)合,要想開發(fā)跨平臺(tái)的軟件很難實(shí)現(xiàn)的問題,通過為不同的系統(tǒng)定制不同的JAVA VM并向上提供統(tǒng)一的接口;其次本設(shè)計(jì)選用1602系列液晶點(diǎn)陣字符模塊,這種點(diǎn)陣字符模塊本身具有字符發(fā)生器,顯示容量大,功能豐富;最后通過編程上位機(jī)軟件界面,方便了對(duì)LCM的控制,從而避免了因改變LCM顯示內(nèi)容而改變?cè)创a的功能。該項(xiàng)目實(shí)施一年以來,創(chuàng)造經(jīng)濟(jì)效益68多萬元。
參考文獻(xiàn)
[1]唐俊,許雷,張群瞻,單片機(jī)原理與應(yīng)用 ,冶金工業(yè)出版社,2003
[2]趙亮,候國銳 編著,單片機(jī)C語言編程與實(shí)例 ,人民郵電出版社 2003-7
[3]胡凱,張穎超.生化分析儀的設(shè)計(jì)及與PC機(jī)的通信[J].微計(jì)算機(jī)信息.2006,22(4-1):208-209
[4]馬鴻文.基于AT89C52單片機(jī)的自動(dòng)存取柜的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2006,22(1-2):101-103.
數(shù)字通信相關(guān)文章:數(shù)字通信原理
通信相關(guān)文章:通信原理
評(píng)論