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

正文內(nèi)容

基于單片機(jī)的溫控報(bào)警器設(shè)計(jì)-文庫吧

2025-01-03 16:27 本頁面


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