![《單片機(jī)原理與應(yīng)用》課件第10章_第1頁(yè)](http://file4.renrendoc.com/view12/M0A/00/23/wKhkGWd3aGeAZi6RAAOS28Ys9b4598.jpg)
![《單片機(jī)原理與應(yīng)用》課件第10章_第2頁(yè)](http://file4.renrendoc.com/view12/M0A/00/23/wKhkGWd3aGeAZi6RAAOS28Ys9b45982.jpg)
![《單片機(jī)原理與應(yīng)用》課件第10章_第3頁(yè)](http://file4.renrendoc.com/view12/M0A/00/23/wKhkGWd3aGeAZi6RAAOS28Ys9b45983.jpg)
![《單片機(jī)原理與應(yīng)用》課件第10章_第4頁(yè)](http://file4.renrendoc.com/view12/M0A/00/23/wKhkGWd3aGeAZi6RAAOS28Ys9b45984.jpg)
![《單片機(jī)原理與應(yīng)用》課件第10章_第5頁(yè)](http://file4.renrendoc.com/view12/M0A/00/23/wKhkGWd3aGeAZi6RAAOS28Ys9b45985.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目十單片機(jī)綜合應(yīng)用系統(tǒng)10.1項(xiàng)目基本技能
10.2項(xiàng)目基本知識(shí)10.3技能拓展10.4互動(dòng)環(huán)節(jié)10.5習(xí)題任務(wù)1用液晶實(shí)現(xiàn)溫度顯示
本任務(wù)主要講解液晶溫度顯示的軟件編程實(shí)現(xiàn)過程。通過編程實(shí)現(xiàn)對(duì)單片機(jī)的控制,單片機(jī)通過I/O口控制液晶,最終顯示溫度,液晶的具體控制方法詳見10.2的知識(shí)點(diǎn)2。
1.原理圖方案的原理圖如圖10-1所示,元件清單見表10-1所示。10.1項(xiàng)目基本技能圖10-1液晶顯示溫度原理圖表10-1元?件?清?單?表2.主程序流程圖主程序流程圖如圖10-2所示。圖10-2主程序流程圖3.匯編語(yǔ)言程序匯編語(yǔ)言程序清單如下:4.C語(yǔ)言程序C語(yǔ)言程序清單如下:
5.電路板制作用面包板搭建的液晶顯示當(dāng)前溫度實(shí)物圖,如圖10-3所示。圖10-3液晶顯示溫度實(shí)物圖知識(shí)點(diǎn)1溫度傳感器DS18B20
1.溫度傳感器簡(jiǎn)介溫度傳感器是可以把溫度這個(gè)非電變化量通過一定的規(guī)律變換成電參量的一個(gè)變換裝置。我們常見的溫度傳感器有熱電阻,熱電偶和半導(dǎo)體熱敏器件。10.2項(xiàng)目基本知識(shí)溫度傳感器是溫度測(cè)量?jī)x表的核心部分,品種繁多。其按測(cè)量方式可分為接觸式和非接觸式兩大類,按照傳感器材料及電子元件特性分為熱電阻和熱電偶兩類。美國(guó)DALLAS半導(dǎo)體公司推出的數(shù)字化溫度傳感器DS18B20采用單總線協(xié)議,即與單片機(jī)接口僅需一個(gè)I/O端口,無需任何外部元件,直接將環(huán)境溫度轉(zhuǎn)化為數(shù)字信號(hào),以數(shù)字碼方式串行輸出,從而大大簡(jiǎn)化了傳感器與微處理器的接口。幾種溫度傳感器的實(shí)物圖片如圖10-4、圖10-5、圖10-6、圖10-7所示。圖10-4數(shù)字溫度傳感器圖10-5鉑電阻溫度傳感器圖10-6廢氣溫度傳感器圖10-7不銹鋼溫度傳感器
2.數(shù)字溫度傳感器DS18B20介紹
Dallas半導(dǎo)體公司的數(shù)字化溫度傳感器DS18B20是世界上第一片支持“一線總線”接口的溫度傳感器。一線總線獨(dú)特而且經(jīng)濟(jì)的特點(diǎn),使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測(cè)量系統(tǒng)的構(gòu)建引入全新概念。現(xiàn)在,新一代的DS18B20體積更小、更經(jīng)濟(jì)、更靈活,使用戶可以充分發(fā)揮“一線總線”的長(zhǎng)處。
3.?DS18B20的主要特性
(1)適應(yīng)電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數(shù)據(jù)線供電。
(2)獨(dú)特的單線接口方式,DS18B20在與微處理器連接時(shí)僅需要一條接口線即可實(shí)現(xiàn)微處理器與DS18B20的雙向通信。
(3)?DS18B20支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在唯一的三線(三線指:一根電源線,一根地線,一位數(shù)據(jù)線)上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測(cè)溫。
(4)?DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。
(5)?測(cè)溫范圍為-55℃~+125℃,在-10℃~+85℃時(shí)精度為±0.5℃。
(6)可編程的分辨率為9~12位,對(duì)應(yīng)的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實(shí)現(xiàn)高精度測(cè)溫。
(7)在9位分辨率時(shí)最多在93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時(shí)最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快。
(8)測(cè)量結(jié)果直接輸出數(shù)字溫度信號(hào),以“一線總線”串行傳送給CPU,同時(shí)可傳送CRC校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力。
(9)負(fù)壓特性:電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀,但不能正常工作。
4.應(yīng)用范圍
DS18B20的應(yīng)用范圍有:
(1)冷凍庫(kù)、糧倉(cāng)、儲(chǔ)罐、電信機(jī)房、電力機(jī)房、電纜線槽等測(cè)溫和控制領(lǐng)域。
(2)軸瓦、缸體、紡機(jī)、空調(diào)等狹小空間工業(yè)設(shè)備測(cè)溫和控制。
(3)汽車空調(diào)、冰箱、冷柜以及中低溫干燥箱等。
(4)供熱/制冷管道熱量計(jì)量、中央空調(diào)分戶熱能計(jì)量和工業(yè)領(lǐng)域測(cè)溫和控制。
5.管腳介紹
DS18B20有兩種封裝:三腳TO-92直插式和八腳SOIC貼片式,封裝管腳如圖10-8所示。圖10-8DS18B20封裝類型
DS18B20是可編程器件,若要正確使用必須預(yù)先弄清引腳的功能和編程方法。引腳功能如表10-2所示。表10-2
DS18B20詳細(xì)引腳功能描述
6.DS18B20溫度傳感器與單片機(jī)的接口如圖10-1所示,將DS18B20溫度傳感器的引腳2接單片機(jī)的P2.2端,單片機(jī)從DS18B20讀出或?qū)懭霐?shù)據(jù)僅需一根線。當(dāng)DS18B20處于寫存儲(chǔ)器操作和溫度A/D變換操作時(shí),為提供足夠的電流,需要在數(shù)據(jù)線上增加一個(gè)4.7kΩ的上拉電阻,其他2個(gè)引腳分別接電源和地。
7.DS18B20溫度傳感器的編程及時(shí)序
DS18B20是可編程器件,在使用時(shí)必須經(jīng)過以下三個(gè)步驟:初始化、寫操作、讀操作。每一次讀寫操作之前都要先將DS18B20初始化復(fù)位,復(fù)位成功后才能對(duì)DS18B20進(jìn)行預(yù)定的操作,三個(gè)步驟缺一不可。在編寫相應(yīng)的應(yīng)用程序時(shí),必須預(yù)先掌握DS18B20的通信協(xié)議和時(shí)序控制要求。
由于DS18B20是利用一根I/O線讀寫數(shù)據(jù),因此,對(duì)讀寫的數(shù)據(jù)位有著嚴(yán)格的時(shí)序要求。DS18B20是采用由一根數(shù)據(jù)線實(shí)現(xiàn)數(shù)據(jù)雙向傳輸?shù)?-Wire單總線協(xié)議方式。該協(xié)議定義了三種通信時(shí)序:初始化時(shí)序、讀時(shí)序和寫時(shí)序。所有時(shí)序都是將主機(jī)作為主設(shè)備,單總線器件作為從設(shè)備。而STC89C51單片機(jī)在硬件上并不支持單總線協(xié)議,因此,就必須采用軟件的方法來模擬單總線的協(xié)議時(shí)序來完成與DS18B20間的通信。
根據(jù)DS18B20通信協(xié)議中初始化時(shí)序、寫時(shí)序和讀時(shí)序要求,分別編寫與之對(duì)應(yīng)的3個(gè)應(yīng)用子程序,分別是:初始化子程序、寫命令或數(shù)據(jù)子程序、讀數(shù)據(jù)子程序。1)編制初始化子程序初始化時(shí)序如圖10-9所示。圖10-9DS18B20溫度傳感器初始化DQ狀態(tài)時(shí)序圖
按照時(shí)序圖提供的編程順序,為了讓DS18B20復(fù)位,單片機(jī)先將DQ設(shè)置為低電平,延時(shí)至少480μs后再將其變成高電平,即提供一個(gè)脈寬480μs<T<960μs的復(fù)位脈沖;等待15~60μs后,檢測(cè)DQ是否變?yōu)榈碗娖?陰影部分),若已變?yōu)榈碗娖絼t表明復(fù)位成功,將FLAG1標(biāo)志置“1”,然后可進(jìn)入下一步操作,否則將FLAG1標(biāo)志清“0”后再重新發(fā)送復(fù)位脈沖。若多次復(fù)位都不成功,可能器件不存在、器件損壞或其他故障。
2)編制寫入子程序
DS18B20溫度傳感器寫時(shí)序如圖10-10所示。圖10-10DS18B20溫度傳感器寫時(shí)序示意圖
完成了復(fù)位初始化,接下來就要向DS18B20寫入命令或數(shù)據(jù)。根據(jù)圖10-10的寫入時(shí)序要求,單片機(jī)要先將DQ設(shè)置為低電平(有置“0”和置“1”兩種類型),延時(shí)15μs后,將待寫的數(shù)據(jù)以串行形式送一位至DQ端,DS18B20將在60μs<T<120μs時(shí)間內(nèi)接收一位數(shù)據(jù)。發(fā)送完一位數(shù)據(jù)后,將DQ端的狀態(tài)再拉回到高電平,并保持至少1μs的恢復(fù)時(shí)間,即每寫完一位串行數(shù)據(jù)后中間至少要有1μs以上的恢復(fù)時(shí)間,然后再寫下一位數(shù)據(jù)。3)編制讀子程序DS18B20溫度傳感器讀時(shí)序如圖10-11所示。圖10-11DS18B20溫度傳感器讀時(shí)序示意圖
根據(jù)讀時(shí)序要求,當(dāng)單片機(jī)準(zhǔn)備從DS18B20溫度傳感器讀取每一位數(shù)據(jù)時(shí),應(yīng)先發(fā)出啟動(dòng)讀時(shí)序脈沖,即將DQ總線設(shè)置為低電平,保持1μs以上時(shí)間后,再將其設(shè)置為高電平;啟動(dòng)后等待15μs,以便DS18B20能可靠地將測(cè)試結(jié)果送至DQ總線上,然后單片機(jī)再開始讀取DQ總線上的結(jié)果。單片機(jī)要在發(fā)出啟動(dòng)脈沖后的60μs之內(nèi)完成取數(shù)操作。同樣,讀完每位數(shù)據(jù)后至少要保持1μs以上的恢復(fù)時(shí)間。
DS18B20溫度傳感器是一個(gè)數(shù)字式的溫度傳感器??蓪?55℃~+125℃之間的溫度值按9位、10位、11位和12位的分辨率進(jìn)行量化,與之對(duì)應(yīng)的溫度增量單位值分別是0.5℃、0.25℃、0.125℃和0.0625℃。傳感器上電后的默認(rèn)值是12位的分辨率,當(dāng)DS18B20接收到單片機(jī)發(fā)出的溫度轉(zhuǎn)換命令44H后,便開始進(jìn)行溫度轉(zhuǎn)換操作。
溫度測(cè)量結(jié)果以二進(jìn)制補(bǔ)碼形式存放。如表10-3所示,分辨率為12位的測(cè)量結(jié)果用帶5個(gè)符號(hào)位的16位二進(jìn)制格式來表示,高低8位分別存儲(chǔ)在兩個(gè)RAM單元中,前面5位S代表符號(hào)位。表10-3DS18B20溫度傳感器的溫度值格式
如果測(cè)得的溫度大于0,5位符號(hào)位S為0,只要將測(cè)得的數(shù)值乘以0.0625即可得到實(shí)際溫度值;如果所測(cè)溫度小于0,5位符號(hào)位為1,測(cè)得的數(shù)值必須要先取反加1再乘以0.0625才能得到實(shí)際溫度值。例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H,如表10-4所示。表10-4DS18B20溫度傳感器的部分溫度值
如果不考慮小數(shù)部分的精度,只要將讀到的16位溫度值的最高四位和最低四位去掉,就能得到當(dāng)前溫度的整數(shù)值。例如讀到的16位溫度值為0191H,將它的最高四位和最低四位去掉,就得到19H=25,正好是當(dāng)前溫度的整數(shù)值。知識(shí)點(diǎn)2SMC1602液晶的介紹
1.液晶的概述液晶(LiquidCrystal)是一種高分子材料,因?yàn)槠涮厥獾奈锢怼⒒瘜W(xué)、光學(xué)特性,20世紀(jì)中葉開始被廣泛應(yīng)用在輕薄型的顯示技術(shù)中。
當(dāng)通電時(shí)導(dǎo)通,液晶分子排列變得有秩序,使光線容易通過;不通電時(shí)液晶分子排列混亂,阻止光線通過,這個(gè)特性讓液晶如閘門般地阻隔或允許光線穿透。從技術(shù)上簡(jiǎn)單地說,液晶面板包含了兩片相當(dāng)精致的無鈉玻璃,稱為Substrates,中間夾著一層液晶。當(dāng)光束通過這層液晶時(shí),液晶本身會(huì)排排站立或扭轉(zhuǎn)呈不規(guī)則狀,因而阻隔或使光束順利通過。大多數(shù)液晶都屬于有機(jī)復(fù)合物,由長(zhǎng)棒狀的分子構(gòu)成。在自然狀態(tài)下,這些棒狀分子的長(zhǎng)軸大致平行。將液晶倒入一個(gè)經(jīng)精良加工的開槽平面,液晶分子會(huì)順著槽排列,所以假如那些槽非常平行,則各分子也是完全平行的。
各種型號(hào)的液晶通常是按照顯示字符的行數(shù)或液晶點(diǎn)陣的行、列來區(qū)分的。例如:1602的意思是每行顯示16個(gè)字符,一共顯示兩行;類似的還有0801、0802、1601等等。液晶體積小、功耗小、顯示操作簡(jiǎn)單,但其使用溫度范圍較小,通用型液晶正常工作溫度范圍是0℃~55℃,存儲(chǔ)溫度范圍是-20℃~60℃。
2.?SMC1602液晶顯示模塊的介紹
SMC1602液晶顯示模塊也叫1602字符型液晶顯示模塊,是一種專門用來顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5?×?7或者5?×?11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符。每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱怂运荒茱@示圖形。1602字符點(diǎn)陣液晶顯示器模塊實(shí)物如圖10-12所示。該液晶顯示模塊有16個(gè)引腳,引腳名稱如圖10-13所示,各引腳功能如表10-5所示。圖10-121602字符點(diǎn)陣液晶顯示器模塊實(shí)物圖
圖10-131602液晶顯示器引腳表10-51602液晶顯示器引腳功能介紹
如果需要背光控制,可以采用單片機(jī)的I/O口控制A、K端來實(shí)現(xiàn),控制方法與控制發(fā)光二極管的方法完全相同。
LCD模塊三個(gè)控制引腳RS、R/和E的不同狀態(tài)組合確定了單片機(jī)對(duì)LCD模塊的四種基本操作,如表10-6所示。表10-6LCD模塊三個(gè)控制引腳狀態(tài)對(duì)應(yīng)的基本操作
字符型LCD的命令字如表10-7所示。表10-7字符型LCD命令字表
接下來就要送顯示字符了,但要想把顯示字符顯示在某一指定位置,就必須先將顯示數(shù)據(jù)寫在相應(yīng)的DDRAM地址中。1602LCD是2行16列字符液晶顯示器,它的定位命令字如表10-8所示。表10-8光標(biāo)位置與相應(yīng)命令字
注:表中命令字是以十六進(jìn)制形式給出,該命令字就是與LCD顯示位置相對(duì)應(yīng)的DDRAM地址。
LCD可以顯示的標(biāo)準(zhǔn)字庫(kù)如表10-9所示。表10-9LCD標(biāo)準(zhǔn)字庫(kù)表任務(wù)2用電腦實(shí)現(xiàn)溫度顯示
VB是程序設(shè)計(jì)人員在Windows環(huán)境下最常用的開發(fā)串口通信程序的編程語(yǔ)言。利用VB開發(fā)串口通信程序主要有兩種方法:一是使用MSComm串口控件,二是調(diào)用WindowsAPI函數(shù),這里主要以講述MSComm串口控件為主。10.3技能拓展
在實(shí)踐中,使用VB串口控件MSComm實(shí)現(xiàn)通信的方法比調(diào)用API函數(shù)的方法更加方便、快捷,而且用較少的代碼可以實(shí)現(xiàn)相同的功能,從而使編程效率大大提高。
1.?51單片機(jī)與PC機(jī)的通信
PC機(jī)與51單片機(jī)最簡(jiǎn)單的連接方式是零調(diào)制三線型,如圖10-14所示。這是進(jìn)行全雙工通信所必需的最簡(jiǎn)單的連接方式。由于51單片機(jī)的輸入、輸出電平為TTL電平,而PC機(jī)配置的是RS-232電平標(biāo)準(zhǔn)串行接口,兩者的電氣規(guī)范不一致,因此要完成PC機(jī)與單片機(jī)的數(shù)據(jù)通信,必須進(jìn)行電平轉(zhuǎn)換。這里選用MAX232作為電平轉(zhuǎn)換芯片。串口部分原理圖如圖10-15所示。圖10-14PC機(jī)與單片機(jī)串行通信接口線路圖圖10-15串口部分原理圖
2.單片機(jī)控制程序
DS18B20測(cè)試環(huán)境溫度,通過RXD、TXD雙線傳輸,經(jīng)單片機(jī)采集在上位機(jī)即PC機(jī)上顯示溫度,主程序流程圖及初始化程序流程圖如圖10-16(a)、10-16(b)所示。圖10-16主程序流程圖及初始化流程圖具體程序如下:
3.串行通信控件MSComm串行通信控件MSComm全稱為MicrosoftCommunicationsControl,是微軟公司提供的簡(jiǎn)化Windows下串行通信編程的ActiveX控件,它既可以用來提供簡(jiǎn)單的串行端口通信功能,也可以用來創(chuàng)建功能完備的、事件驅(qū)動(dòng)的高級(jí)通信工具。
使用MSComm控件進(jìn)行串口編程時(shí)非常方便,程序員不必花更多時(shí)間去了解較為復(fù)雜的API函數(shù),而且在VB、VisualC++、Delphi等語(yǔ)言中均可使用。使用MSComm控件可以建立與串行端口的連接,通過串行端口連接到其他通信設(shè)備(如調(diào)制解調(diào)器),發(fā)出命令,交換數(shù)據(jù),以及監(jiān)視和響應(yīng)串行連接中發(fā)生的事件,從而可以實(shí)現(xiàn)諸如撥打電話、監(jiān)視串行端口的輸入數(shù)據(jù),以及創(chuàng)建功能完備的終端程序等功能。MSComm控件提供下列兩種處理通信的方式。
(1)事件驅(qū)動(dòng)方式。該方式相當(dāng)于一般程序設(shè)計(jì)中的中斷方式。當(dāng)串口發(fā)生事件或錯(cuò)誤時(shí),MSComm控件會(huì)產(chǎn)生OnComm事件,用戶程序可以捕獲該事件并進(jìn)行相應(yīng)處理。例如,在串口接收緩沖區(qū)中有一個(gè)字符到達(dá)或一個(gè)變化發(fā)生時(shí),程序都可以利用MSComm控件的OnComm事件捕獲并處理這些通信事件;OnComm事件還可以檢查和處理通信錯(cuò)誤。在程序的每個(gè)關(guān)鍵功能執(zhí)行之后,可以通過檢查CommEvent屬性的值來查詢事件和錯(cuò)誤。在程序設(shè)計(jì)中,可以在OnComm事件處理函數(shù)中加入自己的處理代碼,一旦事件發(fā)生即可自動(dòng)執(zhí)行該段程序。這種方法的優(yōu)點(diǎn)是程序響應(yīng)及時(shí),可靠性高。
(2)查詢方式。在程序的每個(gè)關(guān)鍵功能執(zhí)行之后,在用戶程序中設(shè)計(jì)定時(shí)或不定時(shí)的查詢,通過檢查CommEvent屬性的值來查詢事件和錯(cuò)誤,從而作出相應(yīng)的處理。在進(jìn)行簡(jiǎn)單應(yīng)用程序設(shè)計(jì)時(shí)可采用這種方法,例如,如果寫一個(gè)簡(jiǎn)單的電話撥號(hào)程序,則沒有必要對(duì)每接收一個(gè)字符都產(chǎn)生事件,因?yàn)槲┮坏却邮盏淖址钦{(diào)制解調(diào)器的“OK”響應(yīng)。查詢方式的進(jìn)行可用計(jì)時(shí)器Timer或Do…Loop程序?qū)崿F(xiàn)。查詢方式實(shí)質(zhì)上還是事件驅(qū)動(dòng),但在有些情況下,這種方式顯得更為便捷。下面的程序段是一個(gè)使用數(shù)據(jù)查詢方式接收數(shù)據(jù)的例子:
4.?MSComm控件的引用開始一個(gè)項(xiàng)目的設(shè)計(jì)時(shí),VB的工具箱中會(huì)有許多默認(rèn)的控件讓設(shè)計(jì)者選用。不過,功能比較特別的控件就不會(huì)出現(xiàn)在其中,如用來設(shè)計(jì)通信功能的控件MSComm就不在其中。由于VB的串行通信組件并不會(huì)主動(dòng)出現(xiàn)在工具箱里,當(dāng)需要MSComm控件時(shí),首先要把它加入到工具箱中。讓MSComm控件出現(xiàn)在工具箱中的步驟如下:
選擇“工程”菜單下的“部件…”子菜單,在彈出的“部件”對(duì)話框中,在“控件”選項(xiàng)卡屬性中選中“MicrosoftCommControl6.0”復(fù)選框,如圖10-17所示,單擊“確定”按鈕后,在工具箱中就出現(xiàn)了一個(gè)形似“電話”的圖標(biāo),它就是MSComm控件,如圖10-18所示。圖10-17添加MSComm串口通信控件
圖10-18工具箱中的MSComm控件
如果在控件屬性中沒有“MicrosoftCommControl6.0”選項(xiàng),可在“部件”對(duì)話框“控件”屬性中單擊“瀏覽”按鈕,在系統(tǒng)目錄Windows\System32下選擇MSCoMM32.OCX項(xiàng),如圖10-19所示,單擊“打開”按鈕即可在“部件”對(duì)話框中看到“MicrosoftCommControl6.0”的可選項(xiàng)目了。如果打開的是以前的項(xiàng)目,項(xiàng)目中含有MSComm控件的引用記錄,則項(xiàng)目會(huì)自動(dòng)去搜尋MSComm控件,并將它載入,不需要以上的步驟。圖10-19直接選擇MSComm控件
工具箱中有了MSComm控件,就可以選擇MSComm控件的圖標(biāo)后將其添加到程序窗體上,利用該控件就可以通過VB編程實(shí)現(xiàn)PC與串口設(shè)備的串口通信了。注意:每個(gè)使用的MSComm控件對(duì)應(yīng)著一個(gè)串行端口,如果應(yīng)用程序需要訪問多個(gè)串行端口,必須使用多個(gè)MSComm控件。
5.?MSComm控件的常用屬性
MSComm控件的屬性很多,這里介紹串口編程中經(jīng)常用到的幾個(gè)重要屬性。
(1)?CommPort屬性。語(yǔ)法:MSComm1.CommPort[=Value]作用:設(shè)置或返回通信端口號(hào)。
CommPort屬性值Value可以設(shè)置為1~16之間的任何整數(shù)值(缺省值為1),表示串口COM1,COM2……。如果用PortOpen屬性打開一個(gè)并不存在的端口,MSComm控件會(huì)產(chǎn)生錯(cuò)誤68(設(shè)備無效)。注意:必須在打開端口之前設(shè)置CommPort屬性。例如,COM2上連接有一個(gè)調(diào)制解調(diào)器,設(shè)置為MSComm1.CommPort=2。
(2)?Input屬性。語(yǔ)法:MSComm1.Input作用:返回并刪除接收緩沖區(qū)中的數(shù)據(jù)流。
InputLen屬性確定被Input屬性讀取的字符數(shù)。設(shè)置InputLen為0,則Input屬性讀取緩沖區(qū)中全部的內(nèi)容。例如,如果希望從接收緩沖區(qū)獲取數(shù)據(jù),并將其顯示在一個(gè)文本框中,可以使用下面的代碼:TxtDisplay.Text=MSComm1.Input該屬性在設(shè)計(jì)時(shí)無效,在運(yùn)行時(shí)為只讀。
(3)?InputLen屬性。語(yǔ)法:MSComm1.InputLen[=Value]作用:設(shè)置并返回Input屬性從接收緩沖區(qū)讀取的字符數(shù)。
Value是整型表達(dá)式,說明Input屬性從接收緩沖區(qū)中讀取的字符數(shù)。
注意:InputLen屬性的缺省值是0。設(shè)置InputLen為0時(shí),使用Input將使MSComm控件讀取接收緩沖區(qū)中全部的內(nèi)容。若接收緩沖區(qū)中InputLen字符無效,Input屬性返回一個(gè)零長(zhǎng)度字符串("")。在使用Input前,用戶可以選擇檢查InBufferCount屬性來確定緩沖區(qū)中是否已有需要數(shù)目的字符。該屬性在從輸出格式為定長(zhǎng)數(shù)據(jù)的機(jī)器讀取數(shù)據(jù)時(shí)非常有用。如果讀取以定長(zhǎng)的數(shù)據(jù)塊的形式格式化了的數(shù)據(jù)時(shí),則需要將該屬性設(shè)置為合適的值。
例如:MSComm1.InputLen=10,當(dāng)程序執(zhí)行該指令時(shí),只會(huì)讀取10個(gè)字符。
(4)?InputMode屬性。語(yǔ)法:MSComm1.InputMode[=Value]作用:設(shè)置或返回接收數(shù)據(jù)的數(shù)據(jù)類型。
InputMode屬性的Value值可以設(shè)置為如下VB常數(shù):“0”通過Input屬性以文本方式取回傳入的數(shù)據(jù)?!?”通過Input屬性以二進(jìn)制方式取回傳入的數(shù)據(jù)。例如,MSComm1.InputMode=1表示以二進(jìn)制方式讀取數(shù)據(jù)。
(5)?OutPut屬性。語(yǔ)法:MSComm1.OutPut[=Value]作用:向傳輸緩沖區(qū)寫數(shù)據(jù)流。
OutPut屬性可以傳輸文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù)。用OutPut屬性傳輸文本數(shù)據(jù),必須定義一個(gè)包含一個(gè)字符串的Variant;發(fā)送二進(jìn)制數(shù)據(jù),必須傳遞一個(gè)包含字節(jié)數(shù)組的Variant到OutPut屬性。
正常情況下,如果發(fā)送一個(gè)ANSI字符串到應(yīng)用程序,可以以文本數(shù)據(jù)的形式發(fā)送。如果發(fā)送包含嵌入控制字符、Null字符等數(shù)據(jù),要以二進(jìn)制形式發(fā)送??捎肙utPut屬性發(fā)送命令、文字字符串或Byte數(shù)組數(shù)據(jù)。例如:MSComm1.Output="ATDT555-5555" '發(fā)送AT命令串
MSComm1.Output="Thisisatextstring" '發(fā)送文本字符串該屬性在設(shè)計(jì)時(shí)無效,在運(yùn)行時(shí)為只讀。
(6)?PortOpen屬性。語(yǔ)法:MSComm1.PortOpen[=Value]作用:設(shè)置或返回通信端口的狀態(tài)。設(shè)置PortOpen屬性為True,即打開端口;設(shè)置為False,則關(guān)閉端口,并清除接收和傳輸緩沖區(qū)。當(dāng)應(yīng)用程序終止時(shí),MSComm控件自動(dòng)關(guān)閉串行端口。在打開端口之前,確定CommPort屬性設(shè)置為一個(gè)合法的端口。如果CommPort屬性設(shè)置為一個(gè)非法的端口,則當(dāng)打開該端口時(shí),MSComm控件產(chǎn)生錯(cuò)誤68(設(shè)備無效)。串行端口設(shè)備必須支持Settings屬性當(dāng)前的設(shè)置值。如果Settings屬性包含硬件不支持的通信設(shè)置值,硬件可能不會(huì)正常工作。
(7)?Settings屬性。語(yǔ)法:MSComm1.Settings[=Value]作用:設(shè)置并返回通信參數(shù)。值Value為String型,說明通信端口的設(shè)置值。
Settings屬性可以用來指定波特率、奇偶校驗(yàn)、數(shù)據(jù)位數(shù)和停止位數(shù)。奇偶校驗(yàn)設(shè)置為了進(jìn)行數(shù)據(jù)校驗(yàn),通常是不用的,并設(shè)置為“N”。數(shù)據(jù)位數(shù)指定了代表一個(gè)數(shù)據(jù)塊的比特?cái)?shù)。停止位指出了何時(shí)接收到一個(gè)完整數(shù)據(jù)塊。例如:MSComm1.Settings="9600,N,8,1"表示傳輸速率為9600bit/s,沒有奇偶校驗(yàn)位,8位數(shù)據(jù)位,1位停止位。
注意:①起始位。在通信線上,沒有數(shù)據(jù)傳送時(shí)處于邏輯“1”狀態(tài)。當(dāng)發(fā)送設(shè)備要發(fā)送一個(gè)字符數(shù)據(jù)時(shí),首先發(fā)出一個(gè)邏輯“0”信號(hào),這個(gè)邏輯低電平就是起始位。起始位通過通信線傳向接收設(shè)備,當(dāng)接收設(shè)備檢測(cè)到這個(gè)邏輯低電平后,就開始準(zhǔn)備接收數(shù)據(jù)位信號(hào)。因此,起始位所起的作用就是表示字符傳送的開始。
②數(shù)據(jù)位。當(dāng)接收設(shè)備收到起始位后,緊接著就會(huì)收到數(shù)據(jù)位,數(shù)據(jù)位的個(gè)數(shù)可以是5、6、7或8位數(shù)據(jù)。在字符數(shù)據(jù)傳送的過程中,數(shù)據(jù)位從最低有效位開始傳送。③奇偶校驗(yàn)位。數(shù)據(jù)位發(fā)送完之后,就可以發(fā)送奇偶校驗(yàn)位。奇偶校驗(yàn)用于有限差錯(cuò)檢驗(yàn),通信雙方在通信時(shí)約定一致的奇偶校驗(yàn)方式。就數(shù)據(jù)傳送而言,奇偶校驗(yàn)位是冗余位,但它表示數(shù)據(jù)的一種性質(zhì),這種性質(zhì)用于檢錯(cuò),雖然有限但很容易實(shí)現(xiàn)。
④停止位。在奇偶校驗(yàn)位或者數(shù)據(jù)位(無奇偶校驗(yàn)位時(shí))之后是停止位。它可以是1位、1.5位或2位,停止位是一個(gè)字符數(shù)據(jù)的結(jié)束標(biāo)志。
(8)?RThreshold屬性。語(yǔ)法:object.Rthreshold[=
Value]作用:OnComm事件發(fā)生之前,設(shè)置并返回接收緩沖區(qū)可接收的字符數(shù)。
Value是整型表達(dá)式,說明在產(chǎn)生OnComm事件之前要接收的字符數(shù)。當(dāng)接收字符后,若Rthreshold屬性設(shè)置為0(缺省值),則不產(chǎn)生OnComm事件;設(shè)置Rthreshold為1,接收緩沖區(qū)每收到一個(gè)字符都會(huì)使MSComm控件觸發(fā)OnComm事件。
(9)?SThreshold屬性。語(yǔ)法:object.SThreshold[=Value]作用:OnComm事件發(fā)生之前,設(shè)置并返回發(fā)送緩沖區(qū)中允許的最小字符數(shù)。
Value是整形表達(dá)式,代表在OnComm事件產(chǎn)生之前在傳輸緩沖區(qū)中的最小字符數(shù)。若設(shè)置SThreshold屬性為0(缺省值),數(shù)據(jù)傳輸事件不會(huì)產(chǎn)生OnComm事件;若設(shè)置SThreshold屬性為1,當(dāng)傳輸緩沖區(qū)完全空時(shí),MSComm控件產(chǎn)生OnComm事件。如果在傳輸緩沖區(qū)中的字符數(shù)小于Value,CommEvent屬性設(shè)置為comEvSend,并產(chǎn)生OnComm事件。
OnComm事件被用來監(jiān)視和響應(yīng)通信狀態(tài)的變化。如果將RThreshold和SThreshold屬性的值都設(shè)置為零,就可以避免發(fā)生OnComm事件。如果將該值設(shè)置為非零的值(如1),那么每當(dāng)緩沖區(qū)中接收到一個(gè)字符時(shí),就會(huì)產(chǎn)生OnComm事件。
(10)?DTREnable屬性。語(yǔ)法:object.DTREnable[=Value]作用:確定在通信時(shí)是否使DTR線有效。
DTR是計(jì)算機(jī)發(fā)送到調(diào)制解調(diào)器的信號(hào),指示計(jì)算機(jī)在等待接收傳輸。當(dāng)DTREnable設(shè)置為True,當(dāng)打開端口時(shí),DTR線設(shè)置為高電平(開),當(dāng)端口被關(guān)閉時(shí),DTR線設(shè)置為低電平(關(guān));當(dāng)DTREnable設(shè)置為False,DTR線始終保持為低電平。
(11)?RTSEnable屬性。語(yǔ)法:object.RTSEnable[=Value]作用:確定是否使RTS線有效。通常由計(jì)算機(jī)發(fā)送RTS信號(hào)到調(diào)制解調(diào)器,以請(qǐng)求允許發(fā)送數(shù)據(jù)。當(dāng)RTSEnable設(shè)置為True,且端口打開時(shí),RTS線設(shè)置為高電平,端口關(guān)閉時(shí),RTS線設(shè)置為低電平。當(dāng)RTSEnable設(shè)置為False,RTS線始終保持為低電平。
(12)?OutBufferSize屬性。語(yǔ)法:MSComm1.OutBufferSize[=Value]作用:設(shè)置或返回傳輸緩沖區(qū)大小。值Value為Integer型,表示傳輸緩沖區(qū)的字節(jié)數(shù),如可選1024。
(13)?InBufferSize屬性。語(yǔ)法:MSComm1.InBufferSize[=Value]。作用:設(shè)置或返回接收緩沖區(qū)大小。值Value為Integer型,表示接收緩沖區(qū)的字節(jié)數(shù),如可選1024。InBufferSize和OutBufferSize屬性指定了為接收和發(fā)送緩沖區(qū)分配的內(nèi)存數(shù)量。這兩個(gè)值設(shè)置得越大,應(yīng)用程序中可用的內(nèi)存就越少。然而,如果緩沖區(qū)太小,就要冒緩沖區(qū)溢出的風(fēng)險(xiǎn),除非采用握手信號(hào)。
由于現(xiàn)在大多數(shù)計(jì)算機(jī)有更多的可用內(nèi)存資源,緩沖區(qū)內(nèi)存分配已不那么至關(guān)緊要了。換言之,可以把緩沖區(qū)的值設(shè)得高一些而不影響應(yīng)用程序的性能。
(14)?Handshaking屬性。語(yǔ)法:MSComm1.Handshaking[=Value]作用:設(shè)置或返回硬件握手協(xié)議。指的是PC與MODEM之間為了控制流速而約定的內(nèi)部協(xié)議。Value值如下。“0”:comNone沒有握手協(xié)議,不考慮流量控制。“1”:comXOn/XOff,即在數(shù)據(jù)流中嵌入控制符來進(jìn)行流量控制。“2”:comRTS,即由信號(hào)線RTS自動(dòng)進(jìn)行流量控制。“5”:comRTSXOnXOff,兩者皆可。
注意:實(shí)踐中我們發(fā)現(xiàn)選用2(即comRTS)是很方便的。要保證數(shù)據(jù)傳輸成功,必須對(duì)接收和發(fā)送緩沖區(qū)進(jìn)行管理,例如要保證接收數(shù)據(jù)的速度不超出緩沖區(qū)的限制。握手是指一種內(nèi)部的通信協(xié)議,通過它將數(shù)據(jù)從硬件端口傳輸?shù)浇邮站彌_區(qū)。當(dāng)串行端口收到一個(gè)字符時(shí),通信設(shè)備必須將它移入接收緩沖區(qū)中,使程序能夠讀到它。如果數(shù)據(jù)到達(dá)端口的速度太快,通信設(shè)備可能來不及將數(shù)據(jù)移入接收緩沖區(qū),握手協(xié)議保證不會(huì)由于緩沖區(qū)溢出而導(dǎo)致丟失數(shù)據(jù)。需要使用什么協(xié)議與連接的設(shè)備有關(guān)。如果將該值設(shè)置為comRTSXOnXOff,可以同時(shí)支持兩種協(xié)議。
6.?MSComm控件的事件根據(jù)應(yīng)用程序的用途和功能,在連接到其他設(shè)備過程中,以及接收或發(fā)送數(shù)據(jù)過程中,可能需要監(jiān)視并響應(yīng)一些事件和錯(cuò)誤的值??梢允褂肙nComm事件和CommEvent屬性捕捉并檢查通信事件和錯(cuò)誤的值。CommEvent屬性返回最近的通信事件或錯(cuò)誤,該屬性在設(shè)計(jì)時(shí)無效,在運(yùn)行時(shí)為只讀。在發(fā)生通信事件或錯(cuò)誤時(shí),將觸發(fā)OnComm事件,CommEvent屬性的值將被改變。因此,在發(fā)生OnComm事件的時(shí)候,如果有必要,可以檢查CommEvent屬性的值。由于通信(特別是通過電話線的通信)是不可預(yù)料的,捕捉這些事件和錯(cuò)誤將有助于使應(yīng)用程序?qū)@些情況作出相應(yīng)的反應(yīng)。MSComm控件把17個(gè)事件歸并為一個(gè)事件OnComm,用屬性CommEvent的17個(gè)值來區(qū)分不同的觸發(fā)時(shí)機(jī)。表10-10列出了幾個(gè)可能觸發(fā)OnComm事件的通信事件,對(duì)應(yīng)的值將在發(fā)生事件時(shí)被寫入CommEvent屬性。表10-10通信事件常數(shù)定義值
表10-11所列錯(cuò)誤同樣會(huì)觸發(fā)OnComm事件,并在CommEvent屬性中寫入相應(yīng)的值。表10-11通信錯(cuò)誤常數(shù)定義值MSComm控件可捕獲的錯(cuò)誤消息如表10-12所示。表10-12MSComm控件可捕獲的錯(cuò)誤消息
續(xù)表
通過事件的引發(fā),通過CommEvent屬性值的數(shù)值便可明確了解所發(fā)生的錯(cuò)誤或事件,而程序中通常就以常數(shù)定義作為判斷,一旦OnComm事件發(fā)生,連帶地會(huì)引入CommEvent參數(shù),用戶可以在每一個(gè)相關(guān)的Case語(yǔ)句之后編寫程序代碼來處理特定的錯(cuò)誤或事件。以下是一個(gè)MSComm通信控件的事件子程序,只要把每一個(gè)事件發(fā)生時(shí)所希望的操作程序?qū)懭?,就可以使通信控件在必要時(shí)產(chǎn)生一定的操作,代碼如下所示:PrivateSubMSComm1_OnComm()SelectCaseMSComm1.CommEventCasecomEvReceive'接收到了RThreshold個(gè)字符
(子程序段)CasecomEvSend'發(fā)送緩沖區(qū)中有SThreshold個(gè)字符
(子程序段)EndSelectEndSub7.?MSComm控件通信步驟通常我們以下面的步驟來使用VB的MSComm控件作通信控制:(1)加入通信部件,也就是MSComm對(duì)象。(2)設(shè)置通信端口號(hào)碼,即CommPort屬性。(3)設(shè)置通信協(xié)議,即HandShaking屬性。(4)設(shè)置傳輸速度等參數(shù),即Settings屬性。
(5)設(shè)置其他參數(shù),若必要時(shí)再加上其他的屬性設(shè)置。
(6)打開通信端口,即PortOpen屬性設(shè)成True。
(7)送出字符串或讀入字符串,使用Input及Output屬性。
(8)使用完MSComm通信對(duì)象后,將通信端口關(guān)閉,即PortOpen屬性設(shè)置成False。遵循以上的步驟,可以建構(gòu)自己的串行通信傳輸系統(tǒng)了。注意,步驟(2)~(5)可在設(shè)計(jì)環(huán)境的屬性窗口中設(shè)定,也可在程序中設(shè)定;而步驟
(6)~(8)只能在VB程序中設(shè)定。
8.?VBMSComm控件與單片機(jī)通信的溫度顯示的實(shí)現(xiàn)通過18B20對(duì)環(huán)境溫度的測(cè)試,單片機(jī)采集到溫度數(shù)據(jù)處理后,通過串行口發(fā)送出去,下面專門講解如何使用VB6.0調(diào)用MSComm控件接收數(shù)據(jù)、處理數(shù)據(jù)和顯示數(shù)據(jù)。第一步,打開VB軟件,在新建工程對(duì)話框中選擇“標(biāo)準(zhǔn)EXE”項(xiàng),如圖10-20所示,然后單擊“打開”按鈕,如圖10-21所示。圖10-20新建工程圖10-21彈出對(duì)話框
第二步,單擊“工程→部件”菜單選項(xiàng),打開“部件”對(duì)話框,如圖10-22所示。圖10-22打開部件對(duì)話框
然后選擇“MicrosoftCommControl6.0”,并在前面的正方形中打鉤,單擊“確定”按鈕,如圖10-23所示。圖10-23添加控件
接著可以看到在工具箱中增加了一個(gè)類似于電話的圖標(biāo),如圖10-24所示,這就是VB串行口通信所用的標(biāo)準(zhǔn)控件(MSComm)。圖10-24添加完控件后的工具箱
圖10-25將控件添加到工程中
第三步,雙擊“MSComm”控件,如圖10-25所示。第四步,雙擊“Lable”控件,如圖10-24所示,然后出現(xiàn)“Lable”矩形框,如圖10-26所示。圖10-26添加Lable控件
第五步,選中“Lable”矩形框,在右側(cè)的屬性對(duì)話框中設(shè)置屬性值,如圖10-27所示,將“Caption”的屬性值設(shè)置為“當(dāng)前溫度”,將“Font”設(shè)置為宋體,四號(hào)字。按此相似步驟依次添加控件“Lable2”、“Lable3”,屬性值分別為空、℃??稍凇癇ackColor”中設(shè)置“Label2”的底色。如圖10-28所示。圖10-27屬性對(duì)話框圖10-28添加完整后的控件
第六步,雙擊“Timer”控件或窗體的無控件的空白處,會(huì)打開代碼編輯對(duì)話框,如圖10-29所示。圖10-29代碼編輯對(duì)話框第七步,在PrivateSubTimer1_Timer()函數(shù)中增加如下代碼:Dimcombuf(1To2)AsBytecombuf(1)=&HAcombuf(2)=&HBMSComm1.Output=combuf第八步,在PrivateSubForm_Load()中增加如下代碼:DimMyDataAsVariantDimtempLabel2.Caption=""IfMSComm1.CommEvent=comEvReceiveThenMyData=MSComm1.Input'Label2.Caption=MyData(0)&MyData(1)'temp=Val("&h"&Str(MyData(0))&Str(MyData(1)))temp=(MyData(0)And&H7)*16+MyData(1)/16Debug.PrinttempIftempAnd&H8000ThenLabel2.Caption="-"ElseLabel2.Caption="+"End
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 全款房定金合同范例
- 保險(xiǎn)保理合同范本
- 傳媒工作室與主播合同范例
- 出口小麥合同范例
- 信貸公司合同范例
- led屏搬遷合同范例
- 兒童演員合同范例
- 個(gè)人轉(zhuǎn)讓閑置車輛合同范例
- 中介買水稻合同范例
- 醫(yī)療電梯采購(gòu)合同范本
- 2024年農(nóng)村述職報(bào)告
- 2025-2030年中國(guó)減肥連鎖市場(chǎng)發(fā)展前景調(diào)研及投資戰(zhàn)略分析報(bào)告
- 2024年湖南司法警官職業(yè)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(kù)(頻考版)含答案解析
- 女性私密項(xiàng)目培訓(xùn)
- 2025年麗水龍泉市招商局招考招商引資工作人員高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《加拿大概況》課件
- 期末復(fù)習(xí)之一般疑問句、否定句、特殊疑問句練習(xí)(畫線部分提問)(無答案)人教版(2024)七年級(jí)英語(yǔ)上冊(cè)
- TD-T 1048-2016耕作層土壤剝離利用技術(shù)規(guī)范
- 抖音賬號(hào)租賃合同協(xié)議
- 2024年高考真題-化學(xué)(重慶卷) 含解析
- 三甲醫(yī)院臨床試驗(yàn)機(jī)構(gòu)-31 V00 專業(yè)組備案及考核SOP
評(píng)論
0/150
提交評(píng)論