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

正文內(nèi)容

基于單片機的溫控報警器設(shè)計-文庫吧

2025-01-03 16:27 本頁面


【正文】 960微秒)。(5) 數(shù)據(jù)線拉到高電平“1”。(6) 延時等待(如果初始化成功則在15到60微妙時間之內(nèi)產(chǎn)生一個由DS18B20所返回的低電平“0”。據(jù)該狀態(tài)可以來確定它的存在,但是應(yīng)注意不能無限的進行等待,不然會使程序進入死循環(huán),所以要進行超時控制)。(7) 若單片機讀到了數(shù)據(jù)線上的低電平“0”后,還要做延時,其延時的時間從發(fā)出的高電平算起(第(5)步的時間算起)最少要480微秒。(8) 將數(shù)據(jù)線再次拉高到高電平“1”后結(jié)束。 DS18B20的寫操作(1) 數(shù)據(jù)線先置低電平“0”。(2) 延時確定的時間為15微秒。(3) 按從低位到高位的順序發(fā)送字節(jié)(一次只發(fā)送一位)。(4) 延時時間為45微秒。(5) 將數(shù)據(jù)線拉到高電平。(6) 重復(fù)上(1)到(6)的操作直到所有的字節(jié)全部發(fā)送完為止。(7) 最后將數(shù)據(jù)線拉高。 DS18B20的讀操作(1)將數(shù)據(jù)線拉高“1”。(2)延時2微秒。(3)將數(shù)據(jù)線拉低“0”。(4)延時3微秒。(5)將數(shù)據(jù)線拉高“1”。(6)延時5微秒。(7)讀數(shù)據(jù)線的狀態(tài)得到1個狀態(tài)位,并進行數(shù)據(jù)處理。(8)延時60微秒。 DS18B20內(nèi)部結(jié)構(gòu)圖DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM 、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。圖3 DS18B20內(nèi)部結(jié)構(gòu) DS18B20工作原理圖4 液晶顯示屏LCD1602主要參數(shù)技術(shù) Lcd1602技術(shù)參數(shù)表顯示容量:16X2個字符芯片工作電壓:~工作電流:()模塊最佳工作電壓:字符尺寸:(WXH)mm 引腳接口說明表 第1腳:VSS為地電源。 第2腳:VDD接5V正電源。 第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生 “鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度。 第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。 第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。 第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。 第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。 第15腳:背光源正極。 第16腳:背光源負極。 LCD1602的指令說明及時序基本操作時序:輸入:RS=L,RW=H,E=H 輸出:D0~D7=狀態(tài)字:輸入:RS=L,R/W=L,D0~D7=指令碼,E=高脈沖 輸出:無:輸入:RS=H,R/W=H,E=H 輸出:=數(shù)據(jù):輸入:RS=H,R/W=L,D0~D7=數(shù)據(jù),E=高脈沖 輸出:無 Atmega16單片機介紹這次的設(shè)計,要用到的是單片機ATmega16。ATmega16是AVR系列的8位單片機,雖然它是8位的單片機,但功能非常的強大。有很多的內(nèi)部資源,連接外部的端口多達44個,有32個是I/O端口,基本每個端口復(fù)用功能都非常好,最高速度達到16MHz。并且支持串口、模數(shù)轉(zhuǎn)換等功能,擁有512字節(jié)的eeprom,1K字節(jié)片內(nèi)RAM,在外加RAM和ROM的情況完全可以運行到ucOS操作系統(tǒng)。然而設(shè)計要用的功能并不多,端口的復(fù)用功能基本用不上,只需要安排足夠的普通I/O端口給溫度傳感器和液晶顯示便可以了。3 系統(tǒng)硬件設(shè)計 溫度傳感器設(shè)計 這部分設(shè)計用到了溫度傳感器DS18B20,這種傳感器是單數(shù)據(jù)總線傳感器,一共有三只引腳,一個引腳接電源VCC,一個引腳接地GND,還有一個就是數(shù)據(jù)總線引腳DQ接到單片機的其中一只引腳。設(shè)計圖如下。圖5 DS18B20原理圖這個是DS18B20傳感器的硬件設(shè)計。1腳接電源VCC,2腳是數(shù)據(jù)總線的引腳用于接到單片機ATmega16的PB3引腳,3腳用于接地GND。還有在設(shè)計里面考慮到電源的不穩(wěn)定,穩(wěn)定電源。 液晶LCD1602顯示部分設(shè)計 這部分設(shè)計用到了帶字符的液晶顯示器LCD1602,這種液晶顯示器是16*2顯示規(guī)格的帶字符顯示器。這里帶字符顯示的液晶顯示器里面已經(jīng)有一個解釋芯片,當收到字符數(shù)據(jù)時,自動識別出字符,不需要在單片機作解釋,但缺點就是這種帶字符的顯示器不能按照設(shè)計者的意思隨心所欲地顯示需要的圖案。不過今次設(shè)計液晶顯示器的功能是用于顯示實時溫度和設(shè)定溫度,并不需要特殊圖案。因此,帶字符的lcd1602液晶顯示器對于今次設(shè)計來說,簡單直觀地實現(xiàn)效果。所以我選擇用帶字符的液晶顯示器。LCD1602原理圖如下:圖6 LCD1602原理圖設(shè)計按照LCD1602的接口信號來連接引腳。1腳是電源地GND;2腳接電源正極VCC;3腳接液晶顯示偏壓信號,利用兩個1k的電阻進行分壓;4腳到6腳接單片機ATmega16的PD5到PD7,分別代表接到LCD1602的RS、RW、EN的引腳;7腳到14腳接按順序接到單片機ATmega16的PB0到PB7引腳,15腳背光源正極接電源正極VCC;16腳背光源負極接正源地GND。下表顯示LCD1602的4腳到14腳和單片機引腳對應(yīng)關(guān)系。 單片機與LCD1602引腳對應(yīng)表單片機ATmega16LCD1602單片機ATmega16LCD1602PD5引腳4(RS)PB3引腳10(Data3)PD6引腳5(RW)PB4引腳11(Data4)PD7引腳6(EN)PB5引腳12(Data5)PB0引腳7(Data0)PB6引腳13(Data6)PB1引腳8(Data1)PB7引腳14(Data7)PB2引腳9(Data2) 單片機ATmega16原理圖設(shè)計這部分是整個單片機ATmega16的設(shè)計總圖。包含了程序燒寫下載端口,3個按鍵,電源端口,預(yù)留串口通訊端、復(fù)位模塊和聲光報警模塊。圖7 設(shè)計部分原理圖 程序燒寫這部分設(shè)計是用于將在電腦端的編寫好的程序燒寫到單片機ATmega16,今次設(shè)計的下載用ASP下載方式。如下圖,采用的是10PIN插針。1腳連接單片機的MOSI端;2腳空接;3腳接單片機RESET端;4腳接單片機SCK端;5腳接單片機MISO端;6腳到9腳均接電源地GND;10腳接VCC。圖8 程序燒寫 電源端口這部分只需要外接一個2PIN的端子用于連接5V開關(guān)。如下圖:圖9 電源端口接線原理圖 串口通訊端的設(shè)計此設(shè)計目的是為了能夠使系統(tǒng)在硬件上得到擴展型設(shè)計,方便通過串口RS485或者RS232上傳數(shù)據(jù)。圖10 串口設(shè)計圖如圖顯示有兩個引腳,分別是數(shù)據(jù)發(fā)送和接收。1腳RXD連接到單片機mega16港口PD0,引腳2連接到端口TXD單片機mega16 PD1。這里的mega16單片機PD0口和PD1口是一種特殊的串行通信口,這倆端口可實現(xiàn)計算機與單片機之間的串口通信。 報警設(shè)計采用的是聲光報警的方式來提示實時溫度已經(jīng)達到設(shè)定的溫度。硬件上,利用一個有源蜂鳴器和一個led燈來進行聲光報警。當實時溫度到了設(shè)定的溫度,那么蜂鳴器響led燈亮。如下圖11是蜂鳴器部分,1腳接單片機的PD4端口,2腳接電源地,這里用單片機高電平驅(qū)動蜂鳴器的方法。如圖12是led燈部分,連接電源正極和單片機的PB4端口,這里用單片機低電平驅(qū)動led的方法。圖11 蜂鳴器圖12 LED燈 按鍵設(shè)計本設(shè)計采用4個按鈕,其中之一是用于重置。其他三個按鈕用來設(shè)置設(shè)定溫度。2鍵是用來設(shè)置溫度增加,3鍵來設(shè)定溫度下降,而4鍵是用于切換位數(shù)。 4 系統(tǒng)軟件設(shè)計聲光報警設(shè)定數(shù)值位數(shù)切換初始化DS18B20初始化LCD1602開始初始化芯片 流程圖判斷數(shù)值是否達到設(shè)定數(shù)值設(shè)定數(shù)值減1鍵3是否按下設(shè)定數(shù)值加1鍵2是否按下鍵4是否按下 5 溫度數(shù)據(jù)處理函數(shù) DS18B20初始化函數(shù)程序代碼如下:void init_18b20(void) { DQ_OUT。 //設(shè)置PB3為輸出 DQ_SET。 //拉高PB3電平 delay_10us(1)。 //延時 DQ_CLR。 //拉低PB3電平 delay_10us(75)。 //延時 DQ_SET。 //再次拉高PB3電平 delay_10us(6)。 //延時 DQ_IN。 //設(shè)置PB3為輸入 while(DQ_R)。 //等待DS18B20返回來的高電平 while(!(DQ_R))。 //等待DS18B20初始化完畢 傳感器DS18B20的子函數(shù)程序代碼如下:uint read_18b20_temp(void){ uchar temp1,temp2。 int temp。 init_18b20()。 //復(fù)位18b20 write_18b20_(0xcc)。 //忽略rom配置 write_18b20_(0x44)。 //發(fā)出轉(zhuǎn)換命令 init_18b20()。 write_18b20_(0xcc)。 write_18b20_(0xbe)。 //發(fā)出讀溫度命令 temp1=read_18b20_byte()。 //讀取到溫度的前兩個字節(jié) temp2=read_18b20_byte()。 init_18b20()。 //復(fù)位18b20 temp=(((temp28)|temp1)*)。 //設(shè)置輸出形式為小數(shù)點后一位 return temp。這是一個有返回值的函數(shù)。由單片機發(fā)出信號,等待傳感器返回溫度數(shù)值,再將返回的數(shù)值進行處理。這里首先要初始化傳感器,等待初始化完畢,我們發(fā)送轉(zhuǎn)換命令0x44。這里有個需要注意的是命令0xcc,這是一個忽略單片機rom配置噶命令,原本rom配置命令是當有多個傳感器的時候要用到選擇傳感器的ID,但設(shè)計中只有一個傳感器,所以就不需要理會rom配置了。接著發(fā)出轉(zhuǎn)換命令之后,再次初始化傳感器,再發(fā)出讀溫度命令0xbe。接著就是將讀回來兩次數(shù)據(jù)分別裝進兩個全部變量里面。接著是初始化傳感器,說明一次的溫度轉(zhuǎn)換完成了。 傳感器DS18B20寫命令子函數(shù)程序代碼如下:void write_18b20_(uchar ){ uchar i。 for(i=0。i8。i++) //分別寫8次,這里一次寫一位 { DQ_OUT。 //設(shè)置PB3為輸出 DQ_CLR。 //拉低PB3電平 NOP()。 if(amp。0x01) //當命令的最低位為1 { DQ_SET。 //拉高PB3電平 } else //當命令的最低位不為1 { DQ_CLR。 //拉低電平 } delay_10us(5)。 //延時 DQ_SET。 //拉高電平 =1。 //命令右移一位 } delay_10us(5)。 //延時這個是單片機向傳感器寫命令的函數(shù)。這里我們一開始就是一個循環(huán)語句,因為這里需要傳送的命令都為8位,一次只能傳送一位到傳感器,所以需要分別傳送8次。進入循環(huán)語句之后,我們將引腳設(shè)置為輸出并拉低引腳電平。之后就是進入一個判斷語句,判斷命令的最后一位是否為1,當為1拉高引腳電平,但不為1拉低引腳電平。接著就是延時50us等待傳感器反應(yīng),再接著是拉高電平指示這次的傳送完畢,后面跟著就是需要將命令右移一位。這樣直到整個命令完全傳送到傳感器中,再然后延時等待傳感器反應(yīng)。 DS18B20讀一個字節(jié)數(shù)據(jù)子函數(shù)程序代碼如下:uchar read_18b20_byte(void){ uchar i,retd=0。 for(i=0。i8。i++) //分別讀8次,這里一次讀一位 { retd=1。 //數(shù)據(jù)右移一位 DQ_OUT。 //設(shè)置PB3為輸出 DQ_CLR。 //拉低電平 DQ_SET。 //拉高電平 NOP()。NOP()。NOP()。NOP()。 //延時 DQ_IN。 //設(shè)置PB3為輸入 if(DQ_R) //判斷輸入數(shù)據(jù)是否為1 { retd|=0x80。 //數(shù)據(jù)變量的最高位為1 } delay_10us(5)。 } return retd。 //返回數(shù)據(jù)變量} 這個函數(shù)是用于讀取傳感器一個字節(jié)的數(shù)據(jù),就是一個8位數(shù)據(jù)。首先,定義一個8位局部變量用于數(shù)值的返回。這里有一個循環(huán)語句,同樣是8次,一次只能讀一位的數(shù)據(jù)。進入循環(huán)語句之后,首先要將變量右移一位,這里值得注意的是這個變量不需要給一個它初始值,因為無論初始值是什么并不影響數(shù)據(jù)的讀出。右移一位之后,設(shè)置引腳為輸出并拉低電平,緊接就是拉高電平,延時等待傳感器反應(yīng)。再之后是設(shè)置引腳為輸入,讀一位數(shù)據(jù),當這位數(shù)據(jù)是1,我們便將變量的最高位設(shè)置為1。延時50us等待傳感器,當循環(huán)語句結(jié)束,返回數(shù)據(jù)變量給相關(guān)的函數(shù)、語句使用。 LCD1602顯示函數(shù) LCD1602初始化子函數(shù)程序代碼如下:void lcd_init(void){ lcd_w_(0x38,0)。 //8位數(shù)據(jù)傳輸,2行顯示,5*7字形,不檢測忙信號 delay_ms(5)。 //延時5ms lcd_w_(0x38,0)。 delay_ms(5)。 lcd_w_(0x38,0)。 delay_ms(5)。 lcd_w_(0x38,1)。 //8位數(shù)據(jù)傳輸,2行顯示,5*7字形,檢測忙信號 lcd_w_(0x08,1)。 //關(guān)閉顯示,檢
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1