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

正文內(nèi)容

畢業(yè)設(shè)計(jì)-基于stc12c5a60s2單片機(jī)的數(shù)字溫濕度計(jì)設(shè)計(jì)(編輯修改稿)

2025-01-06 17:48 本頁面
 

【文章內(nèi)容簡介】 F,而如果使用陶瓷諧振器,建議選擇 40pF 士 l0pF。這里用到的是 的石英晶體 振蕩器 和兩個(gè) 30pF的電容 。 具體原理圖如下圖 31 所示。 圖 31 主控制電路和測溫濕電路原理圖 12 167。 驅(qū)動(dòng)顯示電路 數(shù)碼管的顯示有兩種方法:一種是靜態(tài)顯示,一種是動(dòng)態(tài)掃描顯示。靜態(tài)顯示就是數(shù)碼管的段選端一對(duì)一與單片機(jī)的 I/O 相連,位選端則根據(jù)數(shù)碼管的極型來接地( GND)或者是高電平( VCC)。靜態(tài)顯示實(shí)現(xiàn)起來比較簡單,但是浪費(fèi)了單片機(jī)的 I/O 口資源。動(dòng)態(tài)掃描顯示就是幾個(gè)數(shù)碼管的段選端可以同時(shí)接到單片機(jī)的 I/O 口,位選端一對(duì)一的接到單片機(jī)的其 它 I/O 口 ,當(dāng)位選信號(hào)選中某個(gè)數(shù)碼管時(shí),那個(gè)數(shù)碼管就被點(diǎn)亮,而其它數(shù)碼管不亮。動(dòng)態(tài)掃描顯示節(jié)省了單片機(jī)的 I/O 資源。 采用動(dòng)態(tài)顯示方案, 設(shè)計(jì)中使用八個(gè)共陰極數(shù)碼管作為顯示載體,通過八路并口傳輸,共使用了 8 個(gè) I/O 口。顯示時(shí)采用循環(huán)移位法,即八位數(shù)碼管依次循環(huán)點(diǎn)亮,利用人眼睛的視覺暫留效果達(dá)到連續(xù)顯示,主程序每運(yùn)行一遍便調(diào)用一次顯示子程序,將數(shù)據(jù)顯示出來。 STC12C5A60S2 的 P0口 與 3個(gè)鎖存器 相連, 其中一個(gè)鎖存器與四個(gè)四位數(shù)碼管的數(shù)碼管的A,B,C,D,E,F,G 和 DP, 順序可以根據(jù)硬件接線方便而定。 而 其他兩個(gè)從鎖存器出來的則連到數(shù)碼管的位選端上,一個(gè)數(shù)碼管有 4 個(gè)位選端, 4*4=16 正好連在剩下的鎖存器上。 具體原理圖如下圖 32 所示。 13 圖 32 顯示 電路 原理圖 第四章 軟件設(shè)計(jì)及分析 167。 SHT15 傳輸時(shí)序和指令集 ]7[ 與 測溫模塊 167。 通訊復(fù)位時(shí)序 串行時(shí)鐘輸入 (SCK)用于微處理器與 DTH91 之間的通訊同步。由于接口包含了完全靜態(tài)邏輯,因而不存在最小 SCK 頻率。 串行數(shù)據(jù) (DATA) 三態(tài)門用于數(shù)據(jù)的讀取。 DATA 在 SCK 時(shí)鐘下降沿 到 來 之后改變狀態(tài),并僅在 SCK 時(shí)鐘上升沿有效。數(shù)據(jù)傳輸期間,在 SCK 時(shí)鐘高電平時(shí), DATA 必須保持穩(wěn)定。為避免信號(hào)沖突,微處理器應(yīng)驅(qū)動(dòng) DATA 在低電平。需要一個(gè)外部的上拉電阻(例如: 10kΩ)將信號(hào)提拉至高電平。 如果與 DTH91 通訊中斷,下列信號(hào)時(shí)序可以復(fù)位串口:當(dāng) DATA 保持高電平時(shí),觸發(fā) SCK 時(shí)鐘 9 次或更多。這些時(shí)序只復(fù)位串口,狀態(tài)寄存器內(nèi)容 14 仍然保留。 圖 41 通訊復(fù)位時(shí)序 167。 啟動(dòng)傳輸 時(shí)序 用一組“啟動(dòng)傳輸”時(shí)序,來表示數(shù)據(jù)傳輸?shù)某跏蓟Kǎ寒?dāng) SCK 時(shí)鐘高電平時(shí) DATA 翻轉(zhuǎn)為低電平,緊接著 SCK 變?yōu)榈碗娖剑S后是在 SCK 時(shí)鐘高電平時(shí) DATA 翻轉(zhuǎn)為高電平。 在下一次指令前,發(fā)送一個(gè)“傳輸啟動(dòng)”時(shí)序。 啟動(dòng)傳輸時(shí)序如下圖 42 所示。 圖 42 啟動(dòng) 傳輸時(shí)序 167。 數(shù)據(jù)傳輸和指令集 后續(xù)命令包含三個(gè)地址位(目前只支持“ 000”),和五個(gè)命令位。 DTH 91 會(huì)以下述方式表示已正確地接收到指令:在第 8 個(gè) SCK 時(shí)鐘的下降沿之后,將 DATA 下拉為低電平( ACK 位)。在第 9 個(gè) SCK 時(shí)鐘的下降之后,釋放 DATA(恢復(fù)高電平)。 發(fā)布一組測量命令(‘ 00000101 ’表示相對(duì)濕度 RH,‘ 00000011 ’表示溫度 T)后,控制器要等待測量結(jié)束。這個(gè)過程需要大約20/80/320ms ,分別對(duì)應(yīng) 8/12/14bit 測量。確切 時(shí)間隨內(nèi)部晶振速度 的 變化 而變化 ,最多可能有 30%的變化。 DTH91 通過下拉 DATA 至低電平并進(jìn)入空閑模式,表示測量的結(jié)束。控制器在再次觸發(fā) SCK 時(shí)鐘前,必須等待這個(gè)“數(shù)據(jù)備妥”信號(hào)來讀出數(shù)據(jù)。檢測數(shù)據(jù)可以先被存儲(chǔ),這樣控制器可以繼續(xù)執(zhí)行其它任務(wù)在需要時(shí)再讀出數(shù)據(jù)。接著傳輸 2 個(gè)字節(jié)的測量數(shù)據(jù)和 1 個(gè)字節(jié)的 CRC 奇偶校驗(yàn)。 uC 需要通過下 拉 DATA 為低電平,以確認(rèn)每個(gè)字節(jié)。所有的數(shù)據(jù)從 MSB 開始, 右值有效(例如:對(duì)于 12bit 數(shù)據(jù),從第 5 個(gè) SCK 時(shí)鐘起算作 MSB;而對(duì)于 8bit 數(shù)據(jù),首字節(jié)則無意義)。 用 CRC 數(shù)據(jù)的確認(rèn)位,表明通訊結(jié)束。如果不使用 CRC8 校驗(yàn),控制器 15 可以在測量值 LSB 后,通過保持確認(rèn)位 ack 高電平,來中止通訊。在測量和通訊結(jié)束后, SHT15 自動(dòng)轉(zhuǎn)入休眠模式。 SHT15 的指令集如下表 41 所示 。 表 41 命令集 167。 濕度的測量時(shí)序 圖 43 測量濕度的時(shí)序 167。 輸出轉(zhuǎn)換 為物理量 由能隙材料 PTAT (正比于絕對(duì)溫度 ) 研發(fā)的溫度傳感器具有極好的線性??捎萌缦鹿綄?shù)字輸出轉(zhuǎn)換為溫度值: Temperature = d1 +d2 .SOT d1和 d2 的值如下表 42 所示。 16 表 42 溫度轉(zhuǎn)換系數(shù) 為了補(bǔ)償濕度傳感器的非線性以獲取準(zhǔn)確數(shù)據(jù),建議使用如下公式 1 修正輸出數(shù)值: RHlinear = c1 + c2 .SORH + c3 .SORH2 c1,c2 和 c3 值如下表 43 所示。 表 43 濕度轉(zhuǎn)換系數(shù) 濕度傳感器相 對(duì)濕度的溫度補(bǔ)償實(shí)際測量溫度與 25℃ (~77℉ )相差較大時(shí),應(yīng)考慮濕度傳感器的溫度修正系數(shù): RHtrue = (T176。C 25).(t1 + t2 .SORH) + RHlinear t1 和 t2 的值如下表 44 所示。 表 44 溫度補(bǔ)償系數(shù) RHtrue 就是測量的濕度值 。 17 167。 SHT15 的 DC 特性。 SHT15 的 DC 特性如下表 45 所示。 表 45 DHT91 的 DC 特性 PT100 在橋式電路的變化的信號(hào)傳到儀用中放大,(大概放大 60 倍左右,一度輸出的電壓大概為 23 豪伏,因?yàn)樵O(shè)計(jì)要 求中有負(fù)的 100 度,即輸出電壓為 伏,因?yàn)?AD 轉(zhuǎn)換中不能轉(zhuǎn)換 0 伏以下的電壓 以及大于 5 伏的電壓 ,所以加了一個(gè)加法器, 又要加一個(gè) 1/2 比例電路。( 伏疊加之后 輸出的范圍為 0— 伏) 加了 1/2 比例電路后輸出的電壓是反向的,所以應(yīng)該要求再加一個(gè)反向電路使輸出的電壓在 05V 之間,再接入 AD 轉(zhuǎn)換之中。具體電路如下。 18 19 167。 程序流程圖 圖 44 程序流程圖 20 因?yàn)闇囟鹊闹挥幸粋€(gè) AD 轉(zhuǎn)換,所以就不列流程圖了。 167。 程序 的設(shè)計(jì) 167。 SHT15 的初始化程序 include //include //Microcontroller specific library, . port definitions include //Keil library (is used for _nop()_ operation) include //Keil library include //Keil library typedef union { unsigned int i。 float f。 } value。 enum {TEMP,HUMI}。 //bit flag=0。 define uchar unsigned char define uint unsigned int define noACK 0 define ACK 1 define STATUS_REG_W 0x06 define STATUS_REG_R 0x07 define MEASURE_TEMP 0x03 define MEASURE_HUMI 0x05 define RESET 0x1e sbit DATA=P2^3。 sbit SCK=P2^4。 //uchar table[3]。 21 // void send_byte(uchar x)。 void send_two(uint y)。 /************************** 以 下 為 讀 寫 SHT15 濕 度 程 序**********************/ char s_write_byte(unsigned char value) { unsigned char i,error=0。 for (i=0x80。i0。i/=2) //shift bit for masking { if (i amp。 value) DATA=1。 //masking value with i , write to SENSIBUS else DATA=0。 _nop_()。 //observe setup time SCK=1。 //clk for SENSIBUS _nop_()。_nop_()。_nop_()。 //pulswith approx. 5 us SCK=0。 _nop_()。 //observe hold time } DATA=1。 //release DATAline _nop_()。 //observe setup time SCK=1。 //clk 9 for ack error=DATA。 //check ack (DATA will be pulled down by SHT11) SCK=0。 return error。 //error=1 in case of no acknowledge } // 22 char s_read_byte(unsigned char ack) { unsigned char i,val=0。 DATA=1。 //release DATAline for (i=0x80。i0。i/=2) //shift bit for masking { SCK=1。 //clk for SENSIBUS if (DATA) val=(val | i)。 //read bit SCK=0。 } DATA=!ack。 //in case of ack==1 pull down DATALine _nop_()。 //observe setup time SCK=1。 //clk 9 for ack _nop_()。 _nop_()。 _nop_()。 //pulswith approx. 5 us SCK=0。 _nop_()。 //observe hold time DATA=1。 //release DATAline return val。 //返回讀命令的值 } // void s_transstart(void) //transmission start { DATA=1。 SCK=0。 //Initial state _nop_()。 SCK=1。 23 _nop_()。 DATA=0。 _nop_()。 SCK=0。 _nop_()。_nop_()。_nop_()。 SCK=1。 _nop_()。 DATA=1。 _nop_()。 SCK=0。 } // void s_connectionreset(void) { unsigned char i。 DATA=1。 SCK=0。 //Initial state for(i=0。i9。i++) //9 SCK cycles { SCK=1。 SCK=0。 } //九個(gè)脈沖以重置數(shù)據(jù)時(shí)鐘線 s_transstart()。 } char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode) { unsigned char error=0。 unsigned int i。 s_transstart()。 //transmission start 24 switch(mode){ //send mand to sensor case TEMP : error+=s_write_byte(MEASURE_TEMP)。 break。 case HUMI : error+=s_write_byte(MEASURE_HUMI)。 break
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1