<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于AT89S52的串口通信控制LCM顯示

          基于AT89S52的串口通信控制LCM顯示

          作者: 時(shí)間:2012-01-07 來源:網(wǎng)絡(luò) 收藏

          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)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();