【正文】
p[2]=cabs(H_temp)/10。 //顯示負(fù)號(hào) } else if(mode==1) { temp[0]=12。 if(symbol==0) //如果溫度為正值 temp[3]=12。 //顯示小數(shù)點(diǎn) temp[1]=TN%10。 if(L_temp50) L_temp=50。 if(H_temp50) H_temp=50。 if(L_temp125) L_temp=125。 if(H_temp125) H_temp=125。 if(mode2) mode=0。 //等待按鍵釋放 } } return(key_back)。 //檢測(cè)哪個(gè)按鍵按下 else if(!key3) key_back=3。 if(!key1) key_back=1。 if(!key1|!key2|!key3) 20 { delay1ms(10)。 } //按鍵掃描 // unsigned char key_scan(void) { unsigned char key_back。 BEEP=~BEEP。 } //蜂鳴器 // void beep(void) { BEEP=0。j120。ix。 } //長(zhǎng)延時(shí) // void delay1ms(unsigned int x) { unsigned char i,j。 //第一個(gè) DS18B20 顯示數(shù)據(jù)處理 void display_transaction1()。 //按鍵掃描 void key_action(key)。 //檢測(cè)第一個(gè) DS18B20 是否超過限值并報(bào)警 void check1_alarm(void)。 //讀第二個(gè) DS18B20 的溫度 void beep(void)。 //讀第二個(gè) DS18B20 ReadTemperature(void)。 //從第二個(gè) DS18B20 讀一個(gè)字節(jié) void Read_18B20(unsigned char)。 //向第二個(gè) DS18B20 寫一個(gè)字節(jié) unsigned char Read0neChar(void)。 //第二個(gè) DS18B20 初始化函數(shù) void Write0neChar(unsigned char)。 //長(zhǎng)延時(shí)函數(shù) bit Init18B20(void)。 //取絕對(duì)值函數(shù) void delay(unsigned char)。 //下限報(bào)警溫度 bit flag。 //溫度數(shù)據(jù)顯示的緩存 char H_temp=30。 //TN:第一個(gè) DS18B20 測(cè)得溫度的整數(shù)部分, TN1:第二個(gè)DS18B20 測(cè)得溫度的整數(shù)部分 unsigned char TD,TD1。 //存儲(chǔ)暫存器的溫度低位 unsigned char TH。 //正負(fù) 標(biāo)志位 unsigned char sflag,tltemp。 //數(shù)碼管位數(shù) unsigned int temp_buff[9],temp1_buff[9],*p,*q,id_buff[8],id1_buff[8]。 //數(shù)碼管表,其中 display[10]. display[11] display[12]不顯示 unsigned char mode=0,KEY。 //溫度上 /下限 sbit BEEP=P1^5。 //模式切換(上限,下限,當(dāng)前) sbit key2=P1^1。 //定義第一個(gè) 18B20 單總線端口 sbit DQ1=P3^6。 sbit LSC=P2^4。 參考文獻(xiàn) [1]李群芳 . 單片機(jī)微型計(jì)算機(jī)與接口技術(shù)第三版 .電子工業(yè)出版社, [2] 謝自美.電子線路設(shè)計(jì).實(shí)驗(yàn)測(cè)試(第二版)[ M].武漢:華中科技大學(xué)出版社, 2020. [3] 丘玉娟. 用串行 ROM和 AT89C51實(shí)現(xiàn)電子密碼鎖[ J].電腦知識(shí)與技術(shù) . 2020,11( 3): 34~ 36 [4]李金平 ?電子系統(tǒng)設(shè)計(jì) ?電子工業(yè)出版社 ?2020 18 七.附件 附件一:完整源程序 include include //定義使用的 IO// sbit LSA=P2^2。 經(jīng)過本次設(shè)計(jì)實(shí)驗(yàn),充分認(rèn)識(shí)到自己實(shí)際操作方面的不足以及程序編寫不夠熟練等問題,因此需要多加練習(xí)。本次設(shè)計(jì)的不足是,第二個(gè) DS18B20 測(cè)得溫度的小數(shù)部分一直無法顯示,經(jīng)過多17 次調(diào)試仍然沒有結(jié)果,但基本功能都已實(shí)現(xiàn)。 六. 設(shè)計(jì)總結(jié)及 參考資料 設(shè)計(jì)總結(jié) 本次課程設(shè)計(jì)我們將兩個(gè) DS18B20和 AT89C51單片機(jī)相結(jié)合實(shí)現(xiàn)了多點(diǎn)溫度測(cè)量。),若不為 1,進(jìn)行下限報(bào)警溫度自減 1(不超 過 50176。),若不為 1,進(jìn)行下限報(bào)警溫度自加 1(不超過 125176。 2)后四位數(shù)碼管顯示數(shù)據(jù)處理 開 始講 第 二 個(gè) DS18B20測(cè)出 的 溫 度 存 入 temp[]后 四 位結(jié) 束 將第二個(gè) DS18B20 測(cè)得的溫度存入 temp[ ],后續(xù)對(duì)其進(jìn)行譯碼,譯碼后實(shí)時(shí)顯示第二點(diǎn)的測(cè)量溫度 16 按鍵處理開 始判 斷 是 否 有 按 鍵按 下K I 鍵 按 下m o d e + +m o d e 2M o d e = 0結(jié) 束K 2 鍵 按 下m o d e = 1H _ t e m p + + L _ t e m p + +t e m p 1 2 5 t e m p 1 2 5H _ t e m p = 1 2 5 L _ t e m p = 1 2 5K 3 鍵 按 下m o d e = 1H _ t e m p H _ t e m p t e m p 5 0t e m p 5 0H _ t e m p = 5 0 H _ t e m p = 5 0YYYYYYYYYY YNNNNN NNNNN 檢測(cè)鍵盤掃描是否有返回值,判斷是否有按鍵按下。 15 數(shù)碼管顯示數(shù)據(jù)處理 1)前四位數(shù)碼管顯示數(shù)據(jù)處理開 始M o d e = 0將 第 一 個(gè) D S 1 8 B 2 0測(cè) 出 的 溫 度 存 入t e m p [ ] 前 四 位Ym o d e = 1將 設(shè) 定 的 溫 度 上 限 值存 入 t e m p [ ] 前 四 位M o d e = 2將 設(shè) 定 的 溫 度 下 限值 存 入 t e m p [ ] 前 四 位結(jié) 束YYNN 由于數(shù)碼管數(shù)量有限,所以用前四位顯示第一個(gè) DS18B20 測(cè)得的溫度和設(shè)定的報(bào)警溫度(包括上限溫度和下限溫度),通過 K1 鍵進(jìn)行三種模式的切換。 其中 初始化序列包括一個(gè)由主機(jī)發(fā)出的復(fù)位脈沖和其后由從機(jī)發(fā)出的存在脈沖,存在脈沖讓主機(jī)知道 DS18B20 在總線上并且已準(zhǔn)備 就緒 。 DS18B20 初始化 開 始向 D S 1 8 B 2 0 發(fā)出 復(fù) 位 脈 沖釋 放 總 線是 否 輸 出 脈 沖返 回 檢 測(cè) 成功 標(biāo) 志 f l a gY清 除 f l a g 標(biāo) 志N結(jié) 束 DS18B20 的通信方式 屬于單總線通信方式,需按一定的通信協(xié)議。 和第二點(diǎn)測(cè)量溫度) 11 設(shè)定溫度下限顯示界面(顯示溫度下限值 0176。 7 圖 六 :有源和無源蜂鳴器的外觀 a)有源 b)無源 四、 各硬件模塊電路設(shè)計(jì) P 0P 0D 0 Q 0 A B C D E F G D PA T 8 9 C 5 17 4 H C 5 7 37 S E G