




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
項目十單片機(jī)綜合應(yīng)用系統(tǒng)10.1項目基本技能
10.2項目基本知識10.3技能拓展10.4互動環(huán)節(jié)10.5習(xí)題任務(wù)1用液晶實現(xiàn)溫度顯示
本任務(wù)主要講解液晶溫度顯示的軟件編程實現(xiàn)過程。通過編程實現(xiàn)對單片機(jī)的控制,單片機(jī)通過I/O口控制液晶,最終顯示溫度,液晶的具體控制方法詳見10.2的知識點2。
1.原理圖方案的原理圖如圖10-1所示,元件清單見表10-1所示。10.1項目基本技能圖10-1液晶顯示溫度原理圖表10-1元?件?清?單?表2.主程序流程圖主程序流程圖如圖10-2所示。圖10-2主程序流程圖3.匯編語言程序匯編語言程序清單如下:4.C語言程序C語言程序清單如下:
5.電路板制作用面包板搭建的液晶顯示當(dāng)前溫度實物圖,如圖10-3所示。圖10-3液晶顯示溫度實物圖知識點1溫度傳感器DS18B20
1.溫度傳感器簡介溫度傳感器是可以把溫度這個非電變化量通過一定的規(guī)律變換成電參量的一個變換裝置。我們常見的溫度傳感器有熱電阻,熱電偶和半導(dǎo)體熱敏器件。10.2項目基本知識溫度傳感器是溫度測量儀表的核心部分,品種繁多。其按測量方式可分為接觸式和非接觸式兩大類,按照傳感器材料及電子元件特性分為熱電阻和熱電偶兩類。美國DALLAS半導(dǎo)體公司推出的數(shù)字化溫度傳感器DS18B20采用單總線協(xié)議,即與單片機(jī)接口僅需一個I/O端口,無需任何外部元件,直接將環(huán)境溫度轉(zhuǎn)化為數(shù)字信號,以數(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是世界上第一片支持“一線總線”接口的溫度傳感器。一線總線獨特而且經(jīng)濟(jì)的特點,使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測量系統(tǒng)的構(gòu)建引入全新概念?,F(xiàn)在,新一代的DS18B20體積更小、更經(jīng)濟(jì)、更靈活,使用戶可以充分發(fā)揮“一線總線”的長處。
3.?DS18B20的主要特性
(1)適應(yīng)電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數(shù)據(jù)線供電。
(2)獨特的單線接口方式,DS18B20在與微處理器連接時僅需要一條接口線即可實現(xiàn)微處理器與DS18B20的雙向通信。
(3)?DS18B20支持多點組網(wǎng)功能,多個DS18B20可以并聯(lián)在唯一的三線(三線指:一根電源線,一根地線,一位數(shù)據(jù)線)上,實現(xiàn)組網(wǎng)多點測溫。
(4)?DS18B20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。
(5)?測溫范圍為-55℃~+125℃,在-10℃~+85℃時精度為±0.5℃。
(6)可編程的分辨率為9~12位,對應(yīng)的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可實現(xiàn)高精度測溫。
(7)在9位分辨率時最多在93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快。
(8)測量結(jié)果直接輸出數(shù)字溫度信號,以“一線總線”串行傳送給CPU,同時可傳送CRC校驗碼,具有極強(qiáng)的抗干擾糾錯能力。
(9)負(fù)壓特性:電源極性接反時,芯片不會因發(fā)熱而燒毀,但不能正常工作。
4.應(yīng)用范圍
DS18B20的應(yīng)用范圍有:
(1)冷凍庫、糧倉、儲罐、電信機(jī)房、電力機(jī)房、電纜線槽等測溫和控制領(lǐng)域。
(2)軸瓦、缸體、紡機(jī)、空調(diào)等狹小空間工業(yè)設(shè)備測溫和控制。
(3)汽車空調(diào)、冰箱、冷柜以及中低溫干燥箱等。
(4)供熱/制冷管道熱量計量、中央空調(diào)分戶熱能計量和工業(yè)領(lǐng)域測溫和控制。
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處于寫存儲器操作和溫度A/D變換操作時,為提供足夠的電流,需要在數(shù)據(jù)線上增加一個4.7kΩ的上拉電阻,其他2個引腳分別接電源和地。
7.DS18B20溫度傳感器的編程及時序
DS18B20是可編程器件,在使用時必須經(jīng)過以下三個步驟:初始化、寫操作、讀操作。每一次讀寫操作之前都要先將DS18B20初始化復(fù)位,復(fù)位成功后才能對DS18B20進(jìn)行預(yù)定的操作,三個步驟缺一不可。在編寫相應(yīng)的應(yīng)用程序時,必須預(yù)先掌握DS18B20的通信協(xié)議和時序控制要求。
由于DS18B20是利用一根I/O線讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位有著嚴(yán)格的時序要求。DS18B20是采用由一根數(shù)據(jù)線實現(xiàn)數(shù)據(jù)雙向傳輸?shù)?-Wire單總線協(xié)議方式。該協(xié)議定義了三種通信時序:初始化時序、讀時序和寫時序。所有時序都是將主機(jī)作為主設(shè)備,單總線器件作為從設(shè)備。而STC89C51單片機(jī)在硬件上并不支持單總線協(xié)議,因此,就必須采用軟件的方法來模擬單總線的協(xié)議時序來完成與DS18B20間的通信。
根據(jù)DS18B20通信協(xié)議中初始化時序、寫時序和讀時序要求,分別編寫與之對應(yīng)的3個應(yīng)用子程序,分別是:初始化子程序、寫命令或數(shù)據(jù)子程序、讀數(shù)據(jù)子程序。1)編制初始化子程序初始化時序如圖10-9所示。圖10-9DS18B20溫度傳感器初始化DQ狀態(tài)時序圖
按照時序圖提供的編程順序,為了讓DS18B20復(fù)位,單片機(jī)先將DQ設(shè)置為低電平,延時至少480μs后再將其變成高電平,即提供一個脈寬480μs<T<960μs的復(fù)位脈沖;等待15~60μs后,檢測DQ是否變?yōu)榈碗娖?陰影部分),若已變?yōu)榈碗娖絼t表明復(fù)位成功,將FLAG1標(biāo)志置“1”,然后可進(jìn)入下一步操作,否則將FLAG1標(biāo)志清“0”后再重新發(fā)送復(fù)位脈沖。若多次復(fù)位都不成功,可能器件不存在、器件損壞或其他故障。
2)編制寫入子程序
DS18B20溫度傳感器寫時序如圖10-10所示。圖10-10DS18B20溫度傳感器寫時序示意圖
完成了復(fù)位初始化,接下來就要向DS18B20寫入命令或數(shù)據(jù)。根據(jù)圖10-10的寫入時序要求,單片機(jī)要先將DQ設(shè)置為低電平(有置“0”和置“1”兩種類型),延時15μs后,將待寫的數(shù)據(jù)以串行形式送一位至DQ端,DS18B20將在60μs<T<120μs時間內(nèi)接收一位數(shù)據(jù)。發(fā)送完一位數(shù)據(jù)后,將DQ端的狀態(tài)再拉回到高電平,并保持至少1μs的恢復(fù)時間,即每寫完一位串行數(shù)據(jù)后中間至少要有1μs以上的恢復(fù)時間,然后再寫下一位數(shù)據(jù)。3)編制讀子程序DS18B20溫度傳感器讀時序如圖10-11所示。圖10-11DS18B20溫度傳感器讀時序示意圖
根據(jù)讀時序要求,當(dāng)單片機(jī)準(zhǔn)備從DS18B20溫度傳感器讀取每一位數(shù)據(jù)時,應(yīng)先發(fā)出啟動讀時序脈沖,即將DQ總線設(shè)置為低電平,保持1μs以上時間后,再將其設(shè)置為高電平;啟動后等待15μs,以便DS18B20能可靠地將測試結(jié)果送至DQ總線上,然后單片機(jī)再開始讀取DQ總線上的結(jié)果。單片機(jī)要在發(fā)出啟動脈沖后的60μs之內(nèi)完成取數(shù)操作。同樣,讀完每位數(shù)據(jù)后至少要保持1μs以上的恢復(fù)時間。
DS18B20溫度傳感器是一個數(shù)字式的溫度傳感器??蓪?55℃~+125℃之間的溫度值按9位、10位、11位和12位的分辨率進(jìn)行量化,與之對應(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)換操作。
溫度測量結(jié)果以二進(jìn)制補(bǔ)碼形式存放。如表10-3所示,分辨率為12位的測量結(jié)果用帶5個符號位的16位二進(jìn)制格式來表示,高低8位分別存儲在兩個RAM單元中,前面5位S代表符號位。表10-3DS18B20溫度傳感器的溫度值格式
如果測得的溫度大于0,5位符號位S為0,只要將測得的數(shù)值乘以0.0625即可得到實際溫度值;如果所測溫度小于0,5位符號位為1,測得的數(shù)值必須要先取反加1再乘以0.0625才能得到實際溫度值。例如+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ù)值。知識點2SMC1602液晶的介紹
1.液晶的概述液晶(LiquidCrystal)是一種高分子材料,因為其特殊的物理、化學(xué)、光學(xué)特性,20世紀(jì)中葉開始被廣泛應(yīng)用在輕薄型的顯示技術(shù)中。
當(dāng)通電時導(dǎo)通,液晶分子排列變得有秩序,使光線容易通過;不通電時液晶分子排列混亂,阻止光線通過,這個特性讓液晶如閘門般地阻隔或允許光線穿透。從技術(shù)上簡單地說,液晶面板包含了兩片相當(dāng)精致的無鈉玻璃,稱為Substrates,中間夾著一層液晶。當(dāng)光束通過這層液晶時,液晶本身會排排站立或扭轉(zhuǎn)呈不規(guī)則狀,因而阻隔或使光束順利通過。大多數(shù)液晶都屬于有機(jī)復(fù)合物,由長棒狀的分子構(gòu)成。在自然狀態(tài)下,這些棒狀分子的長軸大致平行。將液晶倒入一個經(jīng)精良加工的開槽平面,液晶分子會順著槽排列,所以假如那些槽非常平行,則各分子也是完全平行的。
各種型號的液晶通常是按照顯示字符的行數(shù)或液晶點陣的行、列來區(qū)分的。例如:1602的意思是每行顯示16個字符,一共顯示兩行;類似的還有0801、0802、1601等等。液晶體積小、功耗小、顯示操作簡單,但其使用溫度范圍較小,通用型液晶正常工作溫度范圍是0℃~55℃,存儲溫度范圍是-20℃~60℃。
2.?SMC1602液晶顯示模塊的介紹
SMC1602液晶顯示模塊也叫1602字符型液晶顯示模塊,是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊。它由若干個5?×?7或者5?×?11等點陣字符位組成,每個點陣字符位都可以顯示一個字符。每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此所以它不能顯示圖形。1602字符點陣液晶顯示器模塊實物如圖10-12所示。該液晶顯示模塊有16個引腳,引腳名稱如圖10-13所示,各引腳功能如表10-5所示。圖10-121602字符點陣液晶顯示器模塊實物圖
圖10-131602液晶顯示器引腳表10-51602液晶顯示器引腳功能介紹
如果需要背光控制,可以采用單片機(jī)的I/O口控制A、K端來實現(xiàn),控制方法與控制發(fā)光二極管的方法完全相同。
LCD模塊三個控制引腳RS、R/和E的不同狀態(tài)組合確定了單片機(jī)對LCD模塊的四種基本操作,如表10-6所示。表10-6LCD模塊三個控制引腳狀態(tài)對應(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顯示位置相對應(yīng)的DDRAM地址。
LCD可以顯示的標(biāo)準(zhǔn)字庫如表10-9所示。表10-9LCD標(biāo)準(zhǔn)字庫表任務(wù)2用電腦實現(xiàn)溫度顯示
VB是程序設(shè)計人員在Windows環(huán)境下最常用的開發(fā)串口通信程序的編程語言。利用VB開發(fā)串口通信程序主要有兩種方法:一是使用MSComm串口控件,二是調(diào)用WindowsAPI函數(shù),這里主要以講述MSComm串口控件為主。10.3技能拓展
在實踐中,使用VB串口控件MSComm實現(xiàn)通信的方法比調(diào)用API函數(shù)的方法更加方便、快捷,而且用較少的代碼可以實現(xiàn)相同的功能,從而使編程效率大大提高。
1.?51單片機(jī)與PC機(jī)的通信
PC機(jī)與51單片機(jī)最簡單的連接方式是零調(diào)制三線型,如圖10-14所示。這是進(jì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測試環(huán)境溫度,通過RXD、TXD雙線傳輸,經(jīng)單片機(jī)采集在上位機(jī)即PC機(jī)上顯示溫度,主程序流程圖及初始化程序流程圖如圖10-16(a)、10-16(b)所示。圖10-16主程序流程圖及初始化流程圖具體程序如下:
3.串行通信控件MSComm串行通信控件MSComm全稱為MicrosoftCommunicationsControl,是微軟公司提供的簡化Windows下串行通信編程的ActiveX控件,它既可以用來提供簡單的串行端口通信功能,也可以用來創(chuàng)建功能完備的、事件驅(qū)動的高級通信工具。
使用MSComm控件進(jìn)行串口編程時非常方便,程序員不必花更多時間去了解較為復(fù)雜的API函數(shù),而且在VB、VisualC++、Delphi等語言中均可使用。使用MSComm控件可以建立與串行端口的連接,通過串行端口連接到其他通信設(shè)備(如調(diào)制解調(diào)器),發(fā)出命令,交換數(shù)據(jù),以及監(jiān)視和響應(yīng)串行連接中發(fā)生的事件,從而可以實現(xiàn)諸如撥打電話、監(jiān)視串行端口的輸入數(shù)據(jù),以及創(chuàng)建功能完備的終端程序等功能。MSComm控件提供下列兩種處理通信的方式。
(1)事件驅(qū)動方式。該方式相當(dāng)于一般程序設(shè)計中的中斷方式。當(dāng)串口發(fā)生事件或錯誤時,MSComm控件會產(chǎn)生OnComm事件,用戶程序可以捕獲該事件并進(jìn)行相應(yīng)處理。例如,在串口接收緩沖區(qū)中有一個字符到達(dá)或一個變化發(fā)生時,程序都可以利用MSComm控件的OnComm事件捕獲并處理這些通信事件;OnComm事件還可以檢查和處理通信錯誤。在程序的每個關(guān)鍵功能執(zhí)行之后,可以通過檢查CommEvent屬性的值來查詢事件和錯誤。在程序設(shè)計中,可以在OnComm事件處理函數(shù)中加入自己的處理代碼,一旦事件發(fā)生即可自動執(zhí)行該段程序。這種方法的優(yōu)點是程序響應(yīng)及時,可靠性高。
(2)查詢方式。在程序的每個關(guān)鍵功能執(zhí)行之后,在用戶程序中設(shè)計定時或不定時的查詢,通過檢查CommEvent屬性的值來查詢事件和錯誤,從而作出相應(yīng)的處理。在進(jìn)行簡單應(yīng)用程序設(shè)計時可采用這種方法,例如,如果寫一個簡單的電話撥號程序,則沒有必要對每接收一個字符都產(chǎn)生事件,因為惟一等待接收的字符是調(diào)制解調(diào)器的“OK”響應(yīng)。查詢方式的進(jìn)行可用計時器Timer或Do…Loop程序?qū)崿F(xiàn)。查詢方式實質(zhì)上還是事件驅(qū)動,但在有些情況下,這種方式顯得更為便捷。下面的程序段是一個使用數(shù)據(jù)查詢方式接收數(shù)據(jù)的例子:
4.?MSComm控件的引用開始一個項目的設(shè)計時,VB的工具箱中會有許多默認(rèn)的控件讓設(shè)計者選用。不過,功能比較特別的控件就不會出現(xiàn)在其中,如用來設(shè)計通信功能的控件MSComm就不在其中。由于VB的串行通信組件并不會主動出現(xiàn)在工具箱里,當(dāng)需要MSComm控件時,首先要把它加入到工具箱中。讓MSComm控件出現(xiàn)在工具箱中的步驟如下:
選擇“工程”菜單下的“部件…”子菜單,在彈出的“部件”對話框中,在“控件”選項卡屬性中選中“MicrosoftCommControl6.0”復(fù)選框,如圖10-17所示,單擊“確定”按鈕后,在工具箱中就出現(xiàn)了一個形似“電話”的圖標(biāo),它就是MSComm控件,如圖10-18所示。圖10-17添加MSComm串口通信控件
圖10-18工具箱中的MSComm控件
如果在控件屬性中沒有“MicrosoftCommControl6.0”選項,可在“部件”對話框“控件”屬性中單擊“瀏覽”按鈕,在系統(tǒng)目錄Windows\System32下選擇MSCoMM32.OCX項,如圖10-19所示,單擊“打開”按鈕即可在“部件”對話框中看到“MicrosoftCommControl6.0”的可選項目了。如果打開的是以前的項目,項目中含有MSComm控件的引用記錄,則項目會自動去搜尋MSComm控件,并將它載入,不需要以上的步驟。圖10-19直接選擇MSComm控件
工具箱中有了MSComm控件,就可以選擇MSComm控件的圖標(biāo)后將其添加到程序窗體上,利用該控件就可以通過VB編程實現(xiàn)PC與串口設(shè)備的串口通信了。注意:每個使用的MSComm控件對應(yīng)著一個串行端口,如果應(yīng)用程序需要訪問多個串行端口,必須使用多個MSComm控件。
5.?MSComm控件的常用屬性
MSComm控件的屬性很多,這里介紹串口編程中經(jīng)常用到的幾個重要屬性。
(1)?CommPort屬性。語法:MSComm1.CommPort[=Value]作用:設(shè)置或返回通信端口號。
CommPort屬性值Value可以設(shè)置為1~16之間的任何整數(shù)值(缺省值為1),表示串口COM1,COM2……。如果用PortOpen屬性打開一個并不存在的端口,MSComm控件會產(chǎn)生錯誤68(設(shè)備無效)。注意:必須在打開端口之前設(shè)置CommPort屬性。例如,COM2上連接有一個調(diào)制解調(diào)器,設(shè)置為MSComm1.CommPort=2。
(2)?Input屬性。語法:MSComm1.Input作用:返回并刪除接收緩沖區(qū)中的數(shù)據(jù)流。
InputLen屬性確定被Input屬性讀取的字符數(shù)。設(shè)置InputLen為0,則Input屬性讀取緩沖區(qū)中全部的內(nèi)容。例如,如果希望從接收緩沖區(qū)獲取數(shù)據(jù),并將其顯示在一個文本框中,可以使用下面的代碼:TxtDisplay.Text=MSComm1.Input該屬性在設(shè)計時無效,在運(yùn)行時為只讀。
(3)?InputLen屬性。語法:MSComm1.InputLen[=Value]作用:設(shè)置并返回Input屬性從接收緩沖區(qū)讀取的字符數(shù)。
Value是整型表達(dá)式,說明Input屬性從接收緩沖區(qū)中讀取的字符數(shù)。
注意:InputLen屬性的缺省值是0。設(shè)置InputLen為0時,使用Input將使MSComm控件讀取接收緩沖區(qū)中全部的內(nèi)容。若接收緩沖區(qū)中InputLen字符無效,Input屬性返回一個零長度字符串("")。在使用Input前,用戶可以選擇檢查InBufferCount屬性來確定緩沖區(qū)中是否已有需要數(shù)目的字符。該屬性在從輸出格式為定長數(shù)據(jù)的機(jī)器讀取數(shù)據(jù)時非常有用。如果讀取以定長的數(shù)據(jù)塊的形式格式化了的數(shù)據(jù)時,則需要將該屬性設(shè)置為合適的值。
例如:MSComm1.InputLen=10,當(dāng)程序執(zhí)行該指令時,只會讀取10個字符。
(4)?InputMode屬性。語法:MSComm1.InputMode[=Value]作用:設(shè)置或返回接收數(shù)據(jù)的數(shù)據(jù)類型。
InputMode屬性的Value值可以設(shè)置為如下VB常數(shù):“0”通過Input屬性以文本方式取回傳入的數(shù)據(jù)。“1”通過Input屬性以二進(jìn)制方式取回傳入的數(shù)據(jù)。例如,MSComm1.InputMode=1表示以二進(jìn)制方式讀取數(shù)據(jù)。
(5)?OutPut屬性。語法:MSComm1.OutPut[=Value]作用:向傳輸緩沖區(qū)寫數(shù)據(jù)流。
OutPut屬性可以傳輸文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù)。用OutPut屬性傳輸文本數(shù)據(jù),必須定義一個包含一個字符串的Variant;發(fā)送二進(jìn)制數(shù)據(jù),必須傳遞一個包含字節(jié)數(shù)組的Variant到OutPut屬性。
正常情況下,如果發(fā)送一個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è)計時無效,在運(yùn)行時為只讀。
(6)?PortOpen屬性。語法:MSComm1.PortOpen[=Value]作用:設(shè)置或返回通信端口的狀態(tài)。設(shè)置PortOpen屬性為True,即打開端口;設(shè)置為False,則關(guān)閉端口,并清除接收和傳輸緩沖區(qū)。當(dāng)應(yīng)用程序終止時,MSComm控件自動關(guān)閉串行端口。在打開端口之前,確定CommPort屬性設(shè)置為一個合法的端口。如果CommPort屬性設(shè)置為一個非法的端口,則當(dāng)打開該端口時,MSComm控件產(chǎn)生錯誤68(設(shè)備無效)。串行端口設(shè)備必須支持Settings屬性當(dāng)前的設(shè)置值。如果Settings屬性包含硬件不支持的通信設(shè)置值,硬件可能不會正常工作。
(7)?Settings屬性。語法:MSComm1.Settings[=Value]作用:設(shè)置并返回通信參數(shù)。值Value為String型,說明通信端口的設(shè)置值。
Settings屬性可以用來指定波特率、奇偶校驗、數(shù)據(jù)位數(shù)和停止位數(shù)。奇偶校驗設(shè)置為了進(jìn)行數(shù)據(jù)校驗,通常是不用的,并設(shè)置為“N”。數(shù)據(jù)位數(shù)指定了代表一個數(shù)據(jù)塊的比特數(shù)。停止位指出了何時接收到一個完整數(shù)據(jù)塊。例如:MSComm1.Settings="9600,N,8,1"表示傳輸速率為9600bit/s,沒有奇偶校驗位,8位數(shù)據(jù)位,1位停止位。
注意:①起始位。在通信線上,沒有數(shù)據(jù)傳送時處于邏輯“1”狀態(tài)。當(dāng)發(fā)送設(shè)備要發(fā)送一個字符數(shù)據(jù)時,首先發(fā)出一個邏輯“0”信號,這個邏輯低電平就是起始位。起始位通過通信線傳向接收設(shè)備,當(dāng)接收設(shè)備檢測到這個邏輯低電平后,就開始準(zhǔn)備接收數(shù)據(jù)位信號。因此,起始位所起的作用就是表示字符傳送的開始。
②數(shù)據(jù)位。當(dāng)接收設(shè)備收到起始位后,緊接著就會收到數(shù)據(jù)位,數(shù)據(jù)位的個數(shù)可以是5、6、7或8位數(shù)據(jù)。在字符數(shù)據(jù)傳送的過程中,數(shù)據(jù)位從最低有效位開始傳送。③奇偶校驗位。數(shù)據(jù)位發(fā)送完之后,就可以發(fā)送奇偶校驗位。奇偶校驗用于有限差錯檢驗,通信雙方在通信時約定一致的奇偶校驗方式。就數(shù)據(jù)傳送而言,奇偶校驗位是冗余位,但它表示數(shù)據(jù)的一種性質(zhì),這種性質(zhì)用于檢錯,雖然有限但很容易實現(xiàn)。
④停止位。在奇偶校驗位或者數(shù)據(jù)位(無奇偶校驗位時)之后是停止位。它可以是1位、1.5位或2位,停止位是一個字符數(shù)據(jù)的結(jié)束標(biāo)志。
(8)?RThreshold屬性。語法: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ū)每收到一個字符都會使MSComm控件觸發(fā)OnComm事件。
(9)?SThreshold屬性。語法:object.SThreshold[=Value]作用:OnComm事件發(fā)生之前,設(shè)置并返回發(fā)送緩沖區(qū)中允許的最小字符數(shù)。
Value是整形表達(dá)式,代表在OnComm事件產(chǎn)生之前在傳輸緩沖區(qū)中的最小字符數(shù)。若設(shè)置SThreshold屬性為0(缺省值),數(shù)據(jù)傳輸事件不會產(chǎn)生OnComm事件;若設(shè)置SThreshold屬性為1,當(dāng)傳輸緩沖區(qū)完全空時,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ū)中接收到一個字符時,就會產(chǎn)生OnComm事件。
(10)?DTREnable屬性。語法:object.DTREnable[=Value]作用:確定在通信時是否使DTR線有效。
DTR是計算機(jī)發(fā)送到調(diào)制解調(diào)器的信號,指示計算機(jī)在等待接收傳輸。當(dāng)DTREnable設(shè)置為True,當(dāng)打開端口時,DTR線設(shè)置為高電平(開),當(dāng)端口被關(guān)閉時,DTR線設(shè)置為低電平(關(guān));當(dāng)DTREnable設(shè)置為False,DTR線始終保持為低電平。
(11)?RTSEnable屬性。語法:object.RTSEnable[=Value]作用:確定是否使RTS線有效。通常由計算機(jī)發(fā)送RTS信號到調(diào)制解調(diào)器,以請求允許發(fā)送數(shù)據(jù)。當(dāng)RTSEnable設(shè)置為True,且端口打開時,RTS線設(shè)置為高電平,端口關(guān)閉時,RTS線設(shè)置為低電平。當(dāng)RTSEnable設(shè)置為False,RTS線始終保持為低電平。
(12)?OutBufferSize屬性。語法:MSComm1.OutBufferSize[=Value]作用:設(shè)置或返回傳輸緩沖區(qū)大小。值Value為Integer型,表示傳輸緩沖區(qū)的字節(jié)數(shù),如可選1024。
(13)?InBufferSize屬性。語法:MSComm1.InBufferSize[=Value]。作用:設(shè)置或返回接收緩沖區(qū)大小。值Value為Integer型,表示接收緩沖區(qū)的字節(jié)數(shù),如可選1024。InBufferSize和OutBufferSize屬性指定了為接收和發(fā)送緩沖區(qū)分配的內(nèi)存數(shù)量。這兩個值設(shè)置得越大,應(yīng)用程序中可用的內(nèi)存就越少。然而,如果緩沖區(qū)太小,就要冒緩沖區(qū)溢出的風(fēng)險,除非采用握手信號。
由于現(xiàn)在大多數(shù)計算機(jī)有更多的可用內(nèi)存資源,緩沖區(qū)內(nèi)存分配已不那么至關(guān)緊要了。換言之,可以把緩沖區(qū)的值設(shè)得高一些而不影響應(yīng)用程序的性能。
(14)?Handshaking屬性。語法:MSComm1.Handshaking[=Value]作用:設(shè)置或返回硬件握手協(xié)議。指的是PC與MODEM之間為了控制流速而約定的內(nèi)部協(xié)議。Value值如下?!?”:comNone沒有握手協(xié)議,不考慮流量控制?!?”:comXOn/XOff,即在數(shù)據(jù)流中嵌入控制符來進(jìn)行流量控制?!?”:comRTS,即由信號線RTS自動進(jìn)行流量控制?!?”:comRTSXOnXOff,兩者皆可。
注意:實踐中我們發(fā)現(xiàn)選用2(即comRTS)是很方便的。要保證數(shù)據(jù)傳輸成功,必須對接收和發(fā)送緩沖區(qū)進(jìn)行管理,例如要保證接收數(shù)據(jù)的速度不超出緩沖區(qū)的限制。握手是指一種內(nèi)部的通信協(xié)議,通過它將數(shù)據(jù)從硬件端口傳輸?shù)浇邮站彌_區(qū)。當(dāng)串行端口收到一個字符時,通信設(shè)備必須將它移入接收緩沖區(qū)中,使程序能夠讀到它。如果數(shù)據(jù)到達(dá)端口的速度太快,通信設(shè)備可能來不及將數(shù)據(jù)移入接收緩沖區(qū),握手協(xié)議保證不會由于緩沖區(qū)溢出而導(dǎo)致丟失數(shù)據(jù)。需要使用什么協(xié)議與連接的設(shè)備有關(guān)。如果將該值設(shè)置為comRTSXOnXOff,可以同時支持兩種協(xié)議。
6.?MSComm控件的事件根據(jù)應(yīng)用程序的用途和功能,在連接到其他設(shè)備過程中,以及接收或發(fā)送數(shù)據(jù)過程中,可能需要監(jiān)視并響應(yīng)一些事件和錯誤的值??梢允褂肙nComm事件和CommEvent屬性捕捉并檢查通信事件和錯誤的值。CommEvent屬性返回最近的通信事件或錯誤,該屬性在設(shè)計時無效,在運(yùn)行時為只讀。在發(fā)生通信事件或錯誤時,將觸發(fā)OnComm事件,CommEvent屬性的值將被改變。因此,在發(fā)生OnComm事件的時候,如果有必要,可以檢查CommEvent屬性的值。由于通信(特別是通過電話線的通信)是不可預(yù)料的,捕捉這些事件和錯誤將有助于使應(yīng)用程序?qū)@些情況作出相應(yīng)的反應(yīng)。MSComm控件把17個事件歸并為一個事件OnComm,用屬性CommEvent的17個值來區(qū)分不同的觸發(fā)時機(jī)。表10-10列出了幾個可能觸發(fā)OnComm事件的通信事件,對應(yīng)的值將在發(fā)生事件時被寫入CommEvent屬性。表10-10通信事件常數(shù)定義值
表10-11所列錯誤同樣會觸發(fā)OnComm事件,并在CommEvent屬性中寫入相應(yīng)的值。表10-11通信錯誤常數(shù)定義值MSComm控件可捕獲的錯誤消息如表10-12所示。表10-12MSComm控件可捕獲的錯誤消息
續(xù)表
通過事件的引發(fā),通過CommEvent屬性值的數(shù)值便可明確了解所發(fā)生的錯誤或事件,而程序中通常就以常數(shù)定義作為判斷,一旦OnComm事件發(fā)生,連帶地會引入CommEvent參數(shù),用戶可以在每一個相關(guān)的Case語句之后編寫程序代碼來處理特定的錯誤或事件。以下是一個MSComm通信控件的事件子程序,只要把每一個事件發(fā)生時所希望的操作程序?qū)懭?,就可以使通信控件在必要時產(chǎn)生一定的操作,代碼如下所示:PrivateSubMSComm1_OnComm()SelectCaseMSComm1.CommEventCasecomEvReceive'接收到了RThreshold個字符
(子程序段)CasecomEvSend'發(fā)送緩沖區(qū)中有SThreshold個字符
(子程序段)EndSelectEndSub7.?MSComm控件通信步驟通常我們以下面的步驟來使用VB的MSComm控件作通信控制:(1)加入通信部件,也就是MSComm對象。(2)設(shè)置通信端口號碼,即CommPort屬性。(3)設(shè)置通信協(xié)議,即HandShaking屬性。(4)設(shè)置傳輸速度等參數(shù),即Settings屬性。
(5)設(shè)置其他參數(shù),若必要時再加上其他的屬性設(shè)置。
(6)打開通信端口,即PortOpen屬性設(shè)成True。
(7)送出字符串或讀入字符串,使用Input及Output屬性。
(8)使用完MSComm通信對象后,將通信端口關(guān)閉,即PortOpen屬性設(shè)置成False。遵循以上的步驟,可以建構(gòu)自己的串行通信傳輸系統(tǒng)了。注意,步驟(2)~(5)可在設(shè)計環(huán)境的屬性窗口中設(shè)定,也可在程序中設(shè)定;而步驟
(6)~(8)只能在VB程序中設(shè)定。
8.?VBMSComm控件與單片機(jī)通信的溫度顯示的實現(xiàn)通過18B20對環(huán)境溫度的測試,單片機(jī)采集到溫度數(shù)據(jù)處理后,通過串行口發(fā)送出去,下面專門講解如何使用VB6.0調(diào)用MSComm控件接收數(shù)據(jù)、處理數(shù)據(jù)和顯示數(shù)據(jù)。第一步,打開VB軟件,在新建工程對話框中選擇“標(biāo)準(zhǔn)EXE”項,如圖10-20所示,然后單擊“打開”按鈕,如圖10-21所示。圖10-20新建工程圖10-21彈出對話框
第二步,單擊“工程→部件”菜單選項,打開“部件”對話框,如圖10-22所示。圖10-22打開部件對話框
然后選擇“MicrosoftCommControl6.0”,并在前面的正方形中打鉤,單擊“確定”按鈕,如圖10-23所示。圖10-23添加控件
接著可以看到在工具箱中增加了一個類似于電話的圖標(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è)的屬性對話框中設(shè)置屬性值,如圖10-27所示,將“Caption”的屬性值設(shè)置為“當(dāng)前溫度”,將“Font”設(shè)置為宋體,四號字。按此相似步驟依次添加控件“Lable2”、“Lable3”,屬性值分別為空、℃。可在“BackColor”中設(shè)置“Label2”的底色。如圖10-28所示。圖10-27屬性對話框圖10-28添加完整后的控件
第六步,雙擊“Timer”控件或窗體的無控件的空白處,會打開代碼編輯對話框,如圖10-29所示。圖10-29代碼編輯對話框第七步,在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等.壓縮文件請下載最新的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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 天津中德應(yīng)用技術(shù)大學(xué)《分子醫(yī)學(xué)實驗》2023-2024學(xué)年第一學(xué)期期末試卷
- 南京航空航天大學(xué)《西方教育哲學(xué)史》2023-2024學(xué)年第二學(xué)期期末試卷
- 中國礦業(yè)大學(xué)徐海學(xué)院《建筑制圖實驗》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京財經(jīng)大學(xué)紅山學(xué)院《科研倫理與科技論文寫作》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川電影電視學(xué)院《運(yùn)動技能強(qiáng)化與訓(xùn)練五》2023-2024學(xué)年第一學(xué)期期末試卷
- 喀什大學(xué)《數(shù)據(jù)結(jié)構(gòu)W》2023-2024學(xué)年第一學(xué)期期末試卷
- 漢口學(xué)院《數(shù)字音樂基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 糖尿病視網(wǎng)膜病變患者護(hù)理
- 滇西科技師范學(xué)院《耳鼻喉頭頸外科手術(shù)學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 關(guān)注青少年心理健康教育
- 2025年鉛鋅礦項目可行性研究報告
- 防春困防疲勞駕駛課件
- 玻璃更換施工方案
- 2025年中國職工保險互助會貴州省辦事處招聘筆試參考題庫含答案解析
- 2025年生豬屠宰獸醫(yī)衛(wèi)生檢疫人員考試題(附答案)
- 2025-2030垃圾發(fā)電產(chǎn)業(yè)市場深度分析及前景趨勢與投資研究報告
- 出生缺陷預(yù)防培訓(xùn)課件
- 中小學(xué)綜合實踐活動課程指導(dǎo)綱要:讓學(xué)生更好地了解活動的意義和價值
- 物理-安徽省安慶市2024-2025學(xué)年高三下學(xué)期第二次模擬考試試卷(安慶二模)試題和答案
- 律師盡職調(diào)查工作方案
- 2024年杭州市糧食收儲有限公司招聘考試真題
評論
0/150
提交評論