




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、智能火災(zāi)報(bào)警系統(tǒng)仿真源程序#include <reg52.h>#include "eepom52.h"#define uchar unsigned char #define uint unsigned int#include <intrins.h>/數(shù)碼管段選定義 0 1 2 3 4 5 6 7 8 9uchar code smg_du=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff; /斷碼/數(shù)碼管位選定義uchar code
2、 smg_we=0x7f,0xbf,0xdf,0xef;/uchar code smg_we=0xfe,0xfd,0xfb,0xf7;uchar dis_smg8 = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8;uchar smg_i = 3; /顯示數(shù)碼管的個(gè)位數(shù)sbit SCL=P34;/SCL定義為P1口的第3位腳,連接ADC0832SCL腳sbit DO=P33;/DO定義為P1口的第4位腳,連接ADC0832DO腳sbit CS=P32;/CS定義為P1口的第4位腳,連接ADC0832CS腳sbit dq = P35;/18b20 IO口的定義sb
3、it beep = P36; /蜂鳴器IO口定義uint temperature,s_temp ; /溫度的變量uchar dengji,s_dengji; /煙物等級(jí)uchar shoudong; /手動(dòng)報(bào)警鍵uint huoyan;bit flag_300ms ;uchar key_can; /按鍵值的變量uchar menu_1; /菜單設(shè)計(jì)的變量bit flag_lj_en; /按鍵連加使能bit flag_lj_3_en; /按鍵連3次連加后使能 加的數(shù)就越大了 uchar key_time,flag_value; /用做連加的中間變量bit key_500ms ;uchar fla
4、g_clock;uchar zd_break_en,zd_break_value; /自動(dòng)退出設(shè)置界面uchar a_a;/*1ms延時(shí)函數(shù)*/void delay_1ms(uint q)uint i,j;for(i=0;i<q;i+)for(j=0;j<120;j+);/*小延時(shí)函數(shù)*/void delay_uint(uint q)while(q.);/*把數(shù)據(jù)保存到單片機(jī)內(nèi)部eepom中*/void write_eepom()SectorErase(0x2000);byte_write(0x2000, s_temp);byte_write(0x2001, s_dengji);b
5、yte_write(0x2060, a_a);/*把數(shù)據(jù)從單片機(jī)內(nèi)部eepom中讀出來*/void read_eepom()s_temp = byte_read(0x2000);s_dengji = byte_read(0x2001);a_a = byte_read(0x2060);/*開機(jī)自檢eepom初始化*/void init_eepom()read_eepom();/先讀if(a_a != 1)/新的單片機(jī)初始單片機(jī)內(nèi)問EEPOMs_temp = 50;s_dengji = 5;a_a = 1;write_eepom();/*18b20初始化函數(shù)*/void init_18b20()b
6、it q;dq = 1;/把總線拿高delay_uint(1); /15usdq = 0;/給復(fù)位脈沖delay_uint(80);/750usdq = 1;/把總線拿高 等待delay_uint(10);/110usq = dq;/讀取18b20初始化信號(hào)delay_uint(20);/200usdq = 1;/把總線拿高 釋放總線/*寫18b20內(nèi)的數(shù)據(jù)*/void write_18b20(uchar dat)uchar i;for(i=0;i<8;i+) /寫數(shù)據(jù)是低位開始dq = 0; /把總線拿低寫時(shí)間隙開始 dq = dat & 0x01; /向18b20總線寫數(shù)據(jù)了
7、delay_uint(5); / 60usdq = 1; /釋放總線dat >>= 1;/*讀取18b20內(nèi)的數(shù)據(jù)*/uchar read_18b20()uchar i,value;for(i=0;i<8;i+)dq = 0; /把總線拿低讀時(shí)間隙開始 value >>= 1; /讀數(shù)據(jù)是低位開始dq = 1; /釋放總線if(dq = 1) /開始讀寫數(shù)據(jù) value |= 0x80;delay_uint(5); /60us讀一個(gè)時(shí)間隙最少要保持60us的時(shí)間return value; /返回?cái)?shù)據(jù)/*讀取溫度的值 讀出來的是小數(shù)*/uint read_temp(
8、)uint value;uchar low; /在讀取溫度的時(shí)候如果中斷的太頻繁了,就應(yīng)該把中斷給關(guān)了,否則會(huì)影響到18b20的時(shí)序init_18b20(); /初始化18b20write_18b20(0xcc); /跳過64位ROMwrite_18b20(0x44); /啟動(dòng)一次溫度轉(zhuǎn)換命令delay_uint(50); /500usinit_18b20(); /初始化18b20write_18b20(0xcc); /跳過64位ROMwrite_18b20(0xbe); /發(fā)出讀取暫存器命令EA = 0;low = read_18b20(); /讀溫度低字節(jié)value = read_18b2
9、0(); /讀溫度高字節(jié)EA = 1;value <<= 8; /把溫度的高位左移8位value |= low; /把讀出的溫度低位放到value的低八位中value *= 0.0625; /轉(zhuǎn)換到溫度值 return value; /返回讀出的溫度 /*讀數(shù)模轉(zhuǎn)換數(shù)據(jù)*/請(qǐng)先了解ADC0832模數(shù)轉(zhuǎn)換的串行協(xié)議,再來讀本函數(shù),主要是對(duì)應(yīng)時(shí)序圖來理解,本函數(shù)是模擬0832的串行協(xié)議進(jìn)行的/ 1 0 0 通道/ 1 1 1 通道 unsigned char ad0832read(bit SGL,bit ODD)unsigned char i=0,value=0,value1=0;SC
10、L=0;DO=1;CS=0;/開始SCL=1;/第一個(gè)上升沿SCL=0;DO=SGL;SCL=1; /第二個(gè)上升沿SCL=0;DO=ODD;SCL=1; /第三個(gè)上升沿SCL=0; /第三個(gè)下降沿DO=1;for(i=0;i<8;i+)SCL=1;SCL=0; /開始從第四個(gè)下降沿接收數(shù)據(jù)value<<=1;if(DO)value+;for(i=0;i<8;i+)/接收校驗(yàn)數(shù)據(jù)value1>>=1;if(DO)value1+=0x80;SCL=1;SCL=0;CS=1;SCL=1;if(value=value1)/與校驗(yàn)數(shù)據(jù)比較,正確就返回?cái)?shù)據(jù),否則返回0r
11、eturn value;return 0;/*數(shù)碼顯示函數(shù)*/void display()uchar i;for(i=0;i<smg_i;i+) P2 = smg_wei; /位選P1 = dis_smgi; /段選 delay_1ms(1);P1 = 0xff; /消隱 P2 = 0xff; /位選 /*定時(shí)器0初始化程序*/void time_init() EA = 1; /開總中斷TMOD = 0X01; /定時(shí)器0、定時(shí)器1工作方式1ET0 = 1; /開定時(shí)器0中斷 TR0 = 1; /允許定時(shí)器0定時(shí)/*按鍵處理數(shù)碼管顯示函數(shù)*/void key_with()if(key_c
12、an = 4) /緊急報(bào)警鍵 手動(dòng)報(bào)警if(menu_1 = 0)shoudong = 1;if(key_can = 1) /設(shè)置鍵menu_1 +;if(menu_1 >= 3)menu_1 = 0;if(menu_1 = 0)dis_smg0 = smg_dutemperature % 10; /取溫度的個(gè)位數(shù)顯示dis_smg1 = smg_dutemperature / 10 % 10; /取溫度的十位顯示smg_i = 3;if(menu_1 = 1)dis_smg0 = smg_dus_temp % 10; /取個(gè)位顯示dis_smg1 = smg_dus_temp / 10
13、 % 10 ; /取十位顯示dis_smg2 = 0xbf ;dis_smg3 = smg_du10;/顯示Asmg_i = 4;if(menu_1 = 2)dis_smg0 = smg_dus_dengji % 10; /取個(gè)位顯示dis_smg1 = 0xbf ; dis_smg2 = 0xbf ;dis_smg3 = smg_du11;/顯示Bsmg_i = 4;if(menu_1 = 0)if(key_can = 2) | (key_can = 3)shoudong = 0; /取消手動(dòng)報(bào)警if(menu_1 = 1)/設(shè)置高溫報(bào)警if(key_can = 2)if(flag_lj_3
14、_en = 0)s_temp + ;/按鍵按下未松開自動(dòng)加三次else s_temp += 10;/按鍵按下未松開自動(dòng)加三次之后每次自動(dòng)加10if(s_temp > 99)s_temp = 99;dis_smg0 = smg_dus_temp % 10; /取個(gè)位顯示dis_smg1 = smg_dus_temp / 10 % 10; /取十位顯示dis_smg2 = 0xbf ;dis_smg3 = smg_du10;/顯示Aif(key_can = 3)if(flag_lj_3_en = 0)s_temp . ;/按鍵按下未松開自動(dòng)加三次else s_temp .= 10;/按鍵按下
15、未松開自動(dòng)減三次之后每次自動(dòng)減10if(s_temp <= 10)s_temp = 10 ;dis_smg0 = smg_dus_temp % 10; /取個(gè)位顯示dis_smg1 = smg_dus_temp / 10 % 10; /取十位顯示dis_smg2 = 0xbf;dis_smg3 = smg_du10;/顯示Aif(menu_1 = 2)/設(shè)置低溫報(bào)警if(key_can = 2)if(flag_lj_3_en = 0)s_dengji + ;else s_dengji + ;if(s_dengji >= 9)s_dengji = 9;dis_smg0 = smg_d
16、us_dengji % 10; /取個(gè)位顯示dis_smg1 = 0xbf ; dis_smg2 = 0xbf ;dis_smg3 = smg_du11;/顯示Bif(key_can = 3)if(flag_lj_3_en = 0)s_dengji . ;else s_dengji .;if(s_dengji <= 1)s_dengji = 1;dis_smg0 = smg_dus_dengji % 10; /取個(gè)位顯示dis_smg1 = 0xbf ; dis_smg2 = 0xbf;dis_smg3 = smg_du11;/顯示B /*獨(dú)立按鍵處理函數(shù)*/void key()stat
17、ic uchar key_new = 0,key_old = 0,key_value = 0;if(key_new = 0) /按鍵松開的時(shí)候做松手檢測(cè)if(P2 & 0x0f) = 0x0f)key_value +;else key_value = 0;if(key_value >= 5)write_eepom();key_value = 0;key_time = 0;key_new = 1;flag_lj_en = 0;/關(guān)閉連加使能flag_lj_3_en = 0;/關(guān)閉3秒后使能flag_value = 0;/清零else if(P2 & 0x0f) != 0x0
18、f)key_value +; /按鍵按下的時(shí)候else key_value = 0;if(key_value >= 5)key_value = 0;key_new = 0;flag_lj_en = 1; /連加使能zd_break_en = 1; /自動(dòng)退出設(shè)置界使能zd_break_value = 0; /自動(dòng)退出設(shè)置界變量清零key_can = 20;if(key_500ms = 1)key_500ms = 0;zd_break_en = 1; /自動(dòng)退出設(shè)置界使能zd_break_value = 0; /自動(dòng)退出設(shè)置界變量清零key_new = 0;key_old = 1;if(k
19、ey_new = 0) && (key_old = 1)switch(P2 & 0x0f)case 0x0e: key_can = 4; break; /得到k1鍵值case 0x0d: key_can = 3; break; /得到k2鍵值case 0x0b: key_can = 2; break; /得到k3鍵值case 0x07: key_can = 1; break; /得到k4鍵值 key_old = key_new; /*報(bào)警函數(shù)*/void clock_h_l()static uchar value;if(dengji >= s_dengji) |
20、(temperature >= s_temp) | (shoudong = 1)/報(bào)警value +;if(value >= 3)value = 10;beep = beep; /蜂鳴器報(bào)警else if(dengji < s_dengji) && (temperature < (s_temp . 1) && (shoudong = 0) /取消報(bào)警value = 0;beep = 1;void main()static uchar value;temperature = read_temp(); /讀取溫度值init_eepom();
21、/讀eepom數(shù)據(jù)time_init();/初始化定時(shí)器 delay_1ms(650);while(1)key();/獨(dú)立按鍵程序if(key_can < 10)key_with();/按鍵按下要執(zhí)行的程序temperature = read_temp(); /讀取溫度值if(flag_300ms = 1)flag_300ms = 0;clock_h_l();dengji = ad0832read(1,0);dengji = dengji * 10 / 250;huoyan = ad0832read(1,1);huoyan = 10 . huoyan * 10 / 250; if(menu_1 = 0)if(temperature >= 99)temperature = 99;if(value > 20)value = 0;if(huoyan < 2)smg_i = 4;dis_smg3=smg_dudengji; /顯示煙物報(bào)警等級(jí)dis_smg2= 0xbf; / .dis
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 印尼倉(cāng)庫(kù)租賃合同范本
- 個(gè)體分紅股合同范本
- 糧油蔬菜配送合同范本
- 可變價(jià)合同范本
- 醫(yī)院 供貨 合同范本
- 冰袋供銷合同范例
- 公路瀝青材料供貨合同范本
- 低價(jià)售賣混凝土合同范本
- 冀教版數(shù)學(xué)七下同步課時(shí)課件7.3 平行線
- 腫瘤病人的術(shù)后護(hù)理
- 大班-數(shù)學(xué)-分禮物-課件(互動(dòng)版)
- 2024年山東力明科技職業(yè)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫(kù)含答案解析
- 注塑工藝培訓(xùn)資料史上最全課件
- 眼球結(jié)構(gòu)課件
- 2023年山東化工職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)考試筆試題庫(kù)及答案解析
- 江蘇省三級(jí)綜合醫(yī)院評(píng)審標(biāo)準(zhǔn)實(shí)施細(xì)則2017版
- 監(jiān)理大綱維修改造項(xiàng)目
- 中國(guó)著名的塔課件
- 邢臺(tái)市區(qū)土地級(jí)別及基準(zhǔn)地價(jià)表
- 李小建《經(jīng)濟(jì)地理學(xué)》(電子版)
- 中央空調(diào)安裝施工組織設(shè)計(jì)方案(水、多聯(lián)機(jī))
評(píng)論
0/150
提交評(píng)論