freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

單片機溫濕度設計畢業(yè)論文(編輯修改稿)

2025-07-24 12:56 本頁面
 

【文章內(nèi)容簡介】 的數(shù)據(jù)傳給上位機。溫度采集系統(tǒng)的主程序設計如下:void main(void){ uchar receive。 init()。 while(1) { Read_Temperature()。 if (flash==0) { Disp_Temperature()。 } else { P2 = 0x00。 } if (RI) { RI = 0。 receive = SBUF。 if (receive == 39。s39。) { send_char()。 } } }}主程序為一無限循環(huán),單片機不斷從DS18B20的數(shù)據(jù)口采集數(shù)據(jù)信號,用flash標志DS18B20是否正常,當flash=1時表示DS18B20不正常,就由軟件設置及時關閉LED顯示并由蜂鳴器報警。當一幀數(shù)據(jù)采集完畢即RI接受中斷標志位為1,判斷下位機是否接受到來自上位機的字符“1”對應的ASC碼49時接收到時才開始將采集到的數(shù)據(jù)發(fā)送給上位機進行處理,RI標志位必須由軟件清零。在串口通信模塊中,baudrate的在程序初始化時已經(jīng)定義為9600b/s,晶振頻率()也已設定好。波特率的產(chǎn)生用定時器產(chǎn)生,在設置時選擇定時器1,并將它的設為工作方式2,8位的常數(shù)自動重新裝載的定時器,這種工作方式可以省去用戶軟件中重裝初值的程序,簡化定時初值的計算方法,可以相當精確的確定定時時間。計算出定時器的初值之后,在設定串行口的工作方式,在這里令SCON=0X50,即SCON各位中,SM0=0,SM1=1,REN=1,其他控制字為0,選擇為工作方式1,8位異步收發(fā)。令TCON中的TR1=1,啟動定時器,并禁止其他中斷。程序設計內(nèi)容如下所示:void init(void){ EA = 1。 TMOD = 0x20。 TH1=(unsigned char)(256 (XTAL / (32L * 12L * baudrate)))。 TL1=(unsigned char)(256 (XTAL / (32L * 12L * baudrate)))。 SCON = 0x50。 PCON amp。= 0x00。 TR1 = 1。 IE = 0x00。 }此外,在顯示模塊中,小數(shù)位的轉(zhuǎn)化才用了一定的技巧,由于實際顯示中只要求顯示一位小數(shù),℃/LSB,當每一位變化時,第一位小數(shù)只有16種狀態(tài),我們只需一一算出放在一個數(shù)組中,通過查表指令即可獲取第一位小數(shù)的十進制值?!妫疞SB,通過移位操作,即可獲得一個新的關于溫度整數(shù)部分的數(shù)據(jù),部分設計顯示轉(zhuǎn)化程序如下:display[4]=temp_data[0]amp。0x0f。 display[0]=ditab[display[4]]。 display[4]=((temp_data[0]amp。0xf0)4)|((temp_data[1]amp。0x0f)4)。 display[3]=display[4]/100。 display[1]=display[4]%100。 display[2]=display[1]/10。 display[1]=display[1]%10。其中小數(shù)位所查的表為:Unsigned char code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}在程序中display[0]為小數(shù)位十進制數(shù),display[3]為百位十進制數(shù),display[2]為十位十進制數(shù),display[1]為個位十進制數(shù),通過查詢LED共陽極的顯示代碼程序,分時選通即可顯示當前的溫度值。Unsigned char code LEDData[]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0xff}當然應特別注意由于個位的顯示需要顯示小數(shù)點,所以它的查表顯示代碼不一樣,應為下面的程序:UnsignedcharcodeLEDData1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff}由于測溫范圍包含負數(shù),還要對溫度的正負進行判別,由DS18B20的特性可知,當溫度為負數(shù)時,溫度高八位的前五位都為高電平,轉(zhuǎn)化時應先將測得的溫度數(shù)據(jù)取反再在最低位加1進行運算,具體程序設計如下:if(temp_data[1]7) { flag_zf=1。 temp_data[1]=!( temp_data[1]) temp_data[0]=!( temp_data[0])。temp_data[0]= temp_data[0]+1。if(temp_data[0]=0) { temp_data[1]= temp_data[1]+1。}}Else {flag_zf=0} 其中 temp_data[1] 為溫度數(shù)據(jù)的高八位,temp_data[0]為溫度數(shù)據(jù)的低八位,flag_zf=1表示溫度為負,進行相應轉(zhuǎn)化再執(zhí)行上面的顯示轉(zhuǎn)化程序,為正則直接執(zhí)行顯示轉(zhuǎn)化程序里的內(nèi)容。其他延時子程序以及DS18B20的讀寫子程序,可見附錄一的完整的DS18B20溫度采集系統(tǒng)程序設計,在這里不做詳細介紹了。上位機是應用VB進行編寫的,它把下位機傳送上來是兩字節(jié)的十六進制數(shù)據(jù)進行解碼顯示出來。當點擊采集溫度時,上位機向下位機發(fā)送采集溫度命令字符“1”,當下位機接受到命令時,向上位機發(fā)送數(shù)據(jù)。,接收溫度數(shù)據(jù)并儲存在數(shù)據(jù)庫中;接收數(shù)據(jù)時,能同步畫出溫度變化的曲線,系統(tǒng)可查詢歷史溫度信息。 上位機程序在上位機VB程序的編寫中,最重要的是串口的初始化程序和接收觸發(fā)程序的設計。主要使用方法如下:串口設置:(“波特率,校驗方式,數(shù)據(jù)位數(shù),停止位數(shù)”)串口數(shù)據(jù):MSComm. InputMode(輸入模式設定)其具體程序設計如下:Private Sub Form_Load()On Error GoTo err: = 1 = InputModeBinary = 1 = 1 = 9600,n,8,2 Call tabinit Call ScaleSys If = False Then = True mark = True = False Exit Suberr: Select Case Case PortAlreadyOpen MsgBox 沒有發(fā)現(xiàn)此串口或被占用, 49, 溫度采集系統(tǒng) Case Else MsgBox 沒有發(fā)現(xiàn)此串口或被占用, 49, 溫度采集系統(tǒng) End Select End Sub在VB程序中設置為串口1,輸入模式為二進制,且接收和發(fā)送一個字符就會觸發(fā)MSComm1的OnComm接收觸發(fā)事件。波特率設置為9600,可以根據(jù)具體設計情況更改波特率的大小,但要與下位機的一致。程序中還編寫了錯誤處理程序,當串口被占用時會轉(zhuǎn)去執(zhí)行err程序,出現(xiàn)系統(tǒng)報錯。接收觸發(fā)事件的處理,當每發(fā)送一次指令時,就會觸發(fā)OnComm事件,并返回數(shù)據(jù)串,通過計算獲取溫度測量值并顯示出來,具體設計程序如下:Private Sub MSComm1_OnComm() Dim Inbyte() As Byte Dim buffer As String Dim datatemp2a, datatemp2b As String Dim datatemp2 As String Dim count As Integer 39。讀取儀表返回數(shù)據(jù)串 Select Case Case EvReceive count = Inbyte = If count 2 Then Exit Sub counter = counter + 1 For i = LBound(Inbyte) To UBound(Inbyte) buffer = buffer + Hex(Inbyte(i)) Next i End Select程序中,接收到的數(shù)據(jù)暫存在Inbyte()中,buffer為溫度數(shù)據(jù)緩存,接收到的數(shù)據(jù)按16進制的格式放入緩沖中,便于之后的數(shù)據(jù)處理。此外程序還添加了接收溫度數(shù)據(jù)的判定,接收到的溫度數(shù)據(jù)應為兩字節(jié),且低位在前,當接收到的數(shù)據(jù)不是兩字節(jié)時,表示接收錯誤,跳出此程序。為了在VB界面能夠顯示當前的溫度值,需要將采集的兩字節(jié)溫度數(shù)據(jù)轉(zhuǎn)化為十進制測量數(shù)據(jù),轉(zhuǎn)化程序如下:If Len(Trim(Mid(buffer, 1, 2))) = 1 Thendatatemp(num) = Val(amp。H amp。 Mid(buffer, 3, 3) amp。 Str(0) amp。 Mid(buffer, 1, 2)) * Elsedatatemp(num) = Val(amp。H amp。 Mid(buffer, 3, 3) amp。 Mid(buffer, 1, 2)) * End If39。保存數(shù)據(jù)Data_save (datatemp(num))此外,本VB程序還做了一定的功能擴展,能夠顯示歷史溫度的最大值和最小值以及平均值,還可通過下拉方式選擇合適的波特率、串口和采樣間隔時間。采集的溫度數(shù)據(jù)還通過Data控件存入數(shù)據(jù)庫中。在設計過程中可以用虛擬串口和串口調(diào)試助手對所設計的VB程序進行仿真,看是否達到設計要求。程序的編寫及整個VB界面見附錄二和附錄四所示。5 軟硬件調(diào)試部分 軟件調(diào)試。,它允許建立串口連接,可以連接到其他通信設備(如Modem).還可以發(fā)送命令、進行數(shù)據(jù)交換以及監(jiān)視和響應在通信過程中可能發(fā)生的各種錯誤和事件,從而可以用它創(chuàng)建全雙工 、事件驅(qū)動的、高效實用的通信程序。一般說來,計算機都有一個或多個串行端口,它們依次為ComCom…,這些串口還提供了外部設備與PC進行數(shù)據(jù)傳輸和通信的通道。這些串口在CPU和外設之間充當解釋器的角色。基本屬性與描述如下:屬性 描述CommPort 設置或返回通信端口號Settings 以字符串的形式設置或返回波特率、奇偶校驗、數(shù)據(jù)位和停止位PortOpen 設置或返回通信端口的狀態(tài)。也可以打開和關閉端口Input 返回和刪除接收緩沖區(qū)中的字符Output 將字符串寫入發(fā)送緩沖區(qū)CommEvent 屬性為通信事件或錯誤返回下列值之一,在該控件的對象庫 中也可以找到這些常量。 你只首先要確定一個msm控件在system目錄下并且該控件已經(jīng)被windows注冊,程序才能正常運行。有數(shù)據(jù)向串口發(fā)過來時,程序可以將數(shù)據(jù)接收到,接收的數(shù)據(jù)是字符型的,那么將數(shù)據(jù)轉(zhuǎn)化為數(shù)字型的,再將這個數(shù)據(jù)的大小作為畫圖的某一個點的縱坐標,這個就是圖形顯示基本原理。查看原來的數(shù)據(jù)的原理也是這樣的,不同的地方就是,數(shù)據(jù)是從文件中來,同樣的也是將多個數(shù)據(jù)分成一個一個的,然后這一個數(shù)據(jù)的大小就是畫圖的某一個點的縱坐標,橫坐標同樣為數(shù)據(jù)的序號,再將這些點用線連起來就是曲線圖。圖形能移動的原理,是我們首先改變的只是數(shù)據(jù),圖形并沒有變,但圖形的形式是由這些數(shù)據(jù)來確定的,當數(shù)據(jù)發(fā)生變化后,我們通過刷新顯示區(qū)來變化的。,點擊查詢可查詢歷史溫度信息。串口的波特率,串口號都采用下拉選擇的方式,在使用中可跟據(jù)情況選擇讀串口數(shù)據(jù)的原理是,只要當有數(shù)據(jù)向串口發(fā)數(shù)據(jù)來時,計算機就會自動將其數(shù)據(jù)寫到一個特定的緩沖區(qū),我們只要寫程序去讀那個特定的緩沖
點擊復制文檔內(nèi)容
教學教案相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1