版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、計(jì)算機(jī)硬件(嵌入式)綜合實(shí)踐設(shè)計(jì)報(bào)告溫度檢測系統(tǒng)設(shè)計(jì)與制作 一 系統(tǒng)概述1. 設(shè)計(jì)內(nèi)容本設(shè)計(jì)主要從硬件和軟件部分介紹了單片機(jī)溫度控制系統(tǒng)的設(shè)計(jì)思路,簡單說明如何實(shí)現(xiàn)對溫度的控制,并對硬件原理圖和程序框圖作了簡潔的描述。還介紹了在單片機(jī)控制系統(tǒng)的軟硬件設(shè)計(jì)中的一些主要技術(shù)關(guān)鍵環(huán)節(jié),該系統(tǒng)主要以AT89S52單片機(jī)為核心, 同時(shí)利用DS18B20溫度傳感器采集溫度,采用4位LED顯示管實(shí)施信息顯示。AT89S52單片機(jī)設(shè)計(jì)的溫度檢測電路是本次設(shè)計(jì)的主要內(nèi)容,是整個(gè)單片機(jī)溫度控制系統(tǒng)設(shè)計(jì)中不可缺少的一部分,該系統(tǒng)對溫度進(jìn)行實(shí)時(shí)采集與檢測。本設(shè)計(jì)介紹的單片機(jī)自動(dòng)控制系統(tǒng)的主要內(nèi)容包括:系統(tǒng)概述、元器件
2、選擇、系統(tǒng)理論分析、硬件設(shè)計(jì)、部分軟件設(shè)計(jì)及主要技術(shù)性能參數(shù)。2. 元器件選擇 單片機(jī)AT89S52:1個(gè) 22uF電容:2個(gè)4.7K電阻:1個(gè) 萬能板:1個(gè) 杜邦線:若干 單排排針:若干 DS18B20溫度傳感器:2個(gè) 4位LED顯示管:1個(gè)二 軟件功能設(shè)計(jì)及程序代碼1.總體系統(tǒng)設(shè)計(jì)思想框圖如下:2. 主程序流程圖3. DS18B20數(shù)據(jù)采集流程圖4.程序代碼、溫度記錄儀#include#include#include#include#include#includebit rec_flag=0;/記錄溫度標(biāo)志uchar autobac_tim=0;/自動(dòng)跳轉(zhuǎn)延時(shí)uchar code logo
3、s=*NT MUSIC*;uchar incmin=0;/計(jì)分鐘數(shù)bit overflag=0;/數(shù)據(jù)溢出標(biāo)志位uchar mode=1;/系統(tǒng)運(yùn)行模式uchar tempmode;/模式緩存void init() lcd_init(); eeprom_init();/*開機(jī)效果*/ display(l1, Starting NT,1); longdelay(10); display(l2, Ver 3.0.1,1); longdelay(20); write_cmd(0x01);/清屏/*/ sys_init();void comms() /模式公共進(jìn)程 time2times(); /時(shí)間格
4、式轉(zhuǎn)換 avtemp=gettemp();/獲取溫度 avtemp2avtemps();/溫度格式轉(zhuǎn)換 date_counter();/獲取當(dāng)前日期 date2dates();/日期格式轉(zhuǎn)換 display(l2+1,times,0); display(l2+11,avtemps,0);void progs(uint i,uint k)/進(jìn)度條 uint j; write_cmd(0xc0); for(j=0;j(i*16/k);j+) write_lcddata(0xff); void normal_run() /無記錄運(yùn)行模式 comms(); if(time2%105) display(
5、l1,logos,1); else display(l1,*,0);display(l1+13,*,0);display(l1+3,dates,0); incmin=0; void recding_run() /記錄模式運(yùn)行模式 uint WDTPT;/臨時(shí)寫地址指針變量存放 comms(); recfrq2recfrqs(); if(time2%1050) display(l1, ,0); else display(l1,R,0); display(l1+1,-NUM,0); display(l1+5,datcounts,0);display(l1+9,*EV,0);display(l1+1
6、3,recfrqs,0); else display(l1,*,0);display(l1+13,*,0);display(l1+3,dates,0); /*定時(shí)記錄*/ if(incmin=recfrq)/觸發(fā)記錄功能 incmin=0;/1清除進(jìn)入記錄標(biāo)志 if(WDTP10240) /20個(gè)扇區(qū) overflag=1; if(overflag=0)/如果數(shù)據(jù)尚未溢出 if(date_recf=1) /記錄年-月-日(格式:z+年+月+日)為十制數(shù)值 date_recf=0;/清除記錄日期標(biāo)志 write_isp(WDTP,z);/日期起始標(biāo)志 write_isp(WDTP,date0);
7、 write_isp(WDTP,date1); write_isp(WDTP,date2);/記錄年、月、日 /*記錄時(shí)間*/ write_isp(WDTP,time0); write_isp(WDTP,time1);/記錄時(shí)分 /*記錄溫度*/ write_isp(WDTP,avtemp/100); write_isp(WDTP,avtemp%100);/*記錄加一*/datcount+;/*寫回?cái)?shù)據(jù)指針*/WDTPT=WDTP;if(FDTP=512)del_isp(0);/清空記錄表FDTP=0;write_isp(FDTP,WDTPT/256);write_isp(WDTP,WDTPT
8、%256);write_isp(WDTP,datcount/256);write_isp(WDTP,datcount%256);FDTP=WDTP;WDTP=WDTPT;/交互完成 if(overflag=1)/如果數(shù)據(jù)溢出 display(l1,Error!,1); display(l2,Data Overflow!,1); autobac_tim=0; while(autobac_tim!=3); display(l2, ,1); void data_run() /查看記錄模式 uchar i=0; bit bacf=0; uint cou_t=0;/計(jì)數(shù)緩存變量 uchar temp=0
9、;/臨時(shí)數(shù)據(jù)緩存 uint cd=0;/進(jìn)度條統(tǒng)計(jì)數(shù)據(jù) autobac_tim=0; while(bacf=0) if(autobac_tim10)bacf=1; display(l1,Ready for Export,1); display(l2,D-Date T-Temp L!,1); if(RI=1) autobac_tim=0; RI=0;ser_rec=SBUF;switch(ser_rec) case L: /格式化 display(l1,Format?,1); display(l2, Y-Yes N-No,1); while(1) if(RI=1) RI=0;ser_rec=SB
10、UF;autobac_tim=0; if(ser_rec=Y)/確定格式化 display(l1,Formatting.,1); display(l2, ,1); eeprom_format(); display(l1,Format Successed,1); longdelay(3); break; if(ser_rec=N) break; if(autobac_tim10) break; autobac_tim=0; break; case D:/輸出日期時(shí)間 display(l1,Exporting Date.,1); display(l2, ,1); RDTP=512;/將讀指針放到首
11、位 cou_t=datcount; cd=0; while(cou_t!=0) if(RI=1) RI=0; if(SBUF=B) display(l1,Export stopped,1); cd=0; longdelay(3); break; temp=read_isp(RDTP);/ 預(yù)讀判斷 RDTP-; if(temp=z) RDTP+; prf_date();/輸出年月日 prf_time();/輸出時(shí)間 RDTP=RDTP+2; cou_t-; cd+; progs(cd,datcount); if(datcount=0) display(l1,No Data!,1); longd
12、elay(3); autobac_tim=0; break; case T:/溫度輸出 display(l1,Exporting Temp.,1); display(l2, ,1); RDTP=516;/將讀指針放到首位cd=0;cou_t=datcount; while(cou_t!=0) if(RI=1) RI=0; if(SBUF=B) display(l1,Export stopped,1); cd=0; longdelay(3); break; temp=read_isp(RDTP);/ 預(yù)讀判斷 RDTP-; if(temp=z) RDTP=RDTP+6; else RDTP=RD
13、TP+2; prf_temp(); cou_t-; cd+; progs(cd,datcount); if(datcount=0) display(l1,No Data!,1); longdelay(3); autobac_tim=0; break; case B:bacf=1;break;ser_rec=0; mode=tempmode; display(l2, ,1);void adj_settings()/設(shè)置模式 uchar i=0;/Counter bit endadj=0;/調(diào)整完畢標(biāo)志 uchar ser_temp=0;/接收緩存 write_cmd(0x01);/清屏 time
14、s5=:;/恢復(fù)數(shù)點(diǎn) display(l1,Set time- ,1); display(l1+11,hour,0); display(l2+11, ,0); display(l2+1,times,0); display(l2+12,recfrqs,0); write_cmd(0xC1+i); write_cmd(0x0f);/顯示閃爍光標(biāo) autobac_tim=0;/初始化自動(dòng)返回時(shí)間常數(shù) while(!endadj) if(RI=1) /接收到數(shù)據(jù) RI=0; autobac_tim=0;/自動(dòng)返回清零 ser_temp=SBUF; if(ser_temp47)&(ser_temp58)
15、/進(jìn)行數(shù)值判斷 if(i8&i=14) datesi-13=ser_temp; i+;if(ser_temp=F) i+;/往前一步if(ser_temp=B) endadj=1;/退出調(diào)整 switch(i)/顯示處理 case 2:i+;display(l1+11,min ,0);break; case 5:i+;display(l1+11,sec ,0);break; case 8:i=i+3;display(l1+11,frq ,0);break; case 14:i+;display(l1+4,date year ,0); display(l2, ,1); break; case 1
16、7:i+;display(l1+11,moun,0);break; case 20:i+;display(l1+11,day ,0);break; case 23:endadj=1;break; if(i10) endadj=1; display(l2, ,1); write_cmd(0x0c);/正常顯示void main() init(); while(1) switch(mode) case 1:normal_run();break; case 2:recding_run();break; case 3:data_run();break; if(RI=1) RI=0; ser_rec=S
17、BUF; switch(ser_rec) case A:adj_settings();break;case R:mode=2;break;case N:mode=1;break;case H:tempmode=mode;mode=3;break;case D:ser_sents(dates);break;case T:times5=:;ser_sents(times);break;case W:ser_sents(avtemps);break;case C:ser_sents(datcounts);break;case F:ser_sents(recfrqs);break; ser_rec=0
18、; void miao() interrupt 1 /秒產(chǎn)生中斷 TH0=(65535-9200)/256; TL0=(65535-9200)%256; mss+; if(mss=100) mss=0;time2+;autobac_tim+; if(autobac_tim=255) autobac_tim=244;/保持溢出 if(time2=60) time2=0;time1+;incmin+; if(time1=60) time1=0;time0+; if(time0=24) time0=0;dayincf=1;/天自增標(biāo)志置位 date_recf=1;/日期需要記錄 /*將返回時(shí)間時(shí)分秒
19、*/、system.h/*系統(tǒng)I/O*/*LCD I/O*/sbit RS=P12;sbit LCDEN=P11;/*DS18B20*/sbit DS=P10;#define uchar unsigned char#define uint unsigned intuchar code num=0,1,2,3,4,5,6,7,8,9;/*時(shí)間相關(guān)變量*/uchar time=23,28,00;/時(shí)分秒(10進(jìn)制數(shù))uchar times=15:37:00;/時(shí)分秒(ASCII碼)uchar mss=0;uchar date=11,11,11;/年月日(10進(jìn)制數(shù))uchar dates=2011
20、-10-29;/年月日(ASCII碼)bit dayincf=0;bit date_recf=0;/日期記錄標(biāo)志/*記錄頻率變量*/uchar recfrq=2;/記錄頻率(10進(jìn)制數(shù))uchar recfrqs=001; /記錄頻率(ASCII碼)uint datcount=0;/記錄總數(shù)uchar datcounts=0000;/*串口接收變量*/uchar ser_rec;/*溫度相關(guān)變量*/uint avtemp=0;uchar avtemps=00.0;void delay(uchar z)uchar x,y;for(x=z;x0;x-)for(y=110;y0;y-);void l
21、ongdelay(uchar z) for(z;z0;z-) delay(255);void ser_sent(uchar sendata) /串口發(fā)送 單字節(jié) SBUF=sendata; while(TI!=1); TI=0; delay(1);void ser_sents(uchar strings) /串口發(fā)送字符串 uchar i=0; while(stringsi!=0) ser_sent(stringsi); delay(20); i+; ser_sent(n);void date_counter()/日期轉(zhuǎn)變 uchar n;/月天數(shù)暫存 uint year=2000+date0
22、;/將年轉(zhuǎn)換為標(biāo)準(zhǔn)年 if(dayincf=1) dayincf=0; switch(date1)/根據(jù)月份制定月天數(shù) case 1:n=31;break; case 2:if(year%4=0|year%400=0)n=29; else n=28;break; case 3:n=31;break; case 4:n=30;break; case 5:n=31;break; case 6:n=30;break; case 7:n=31;break; case 8:n=31;break; case 9:n=30;break; case 10:n=31;break; case 11:n=30;br
23、eak; case 12:n=31;break; date2+;if(date2n) date2=1; date1+; if(date112) date1=1;date0+; void sys_init()/系統(tǒng)初始化 EA=1;TMOD=0x21;TR1=1;REN=1;SM0=0;SM1=1; TH1=0xfA; TL1=0xfA; ET0=1;/允許定時(shí)器中斷0 TH0=(65535-9200)/256; TL0=(65535-9200)%256;/定時(shí)器中斷0初值 TR0=1;/開中斷(秒) ES=0;void recfrq2recfrqs() /10進(jìn)制記錄頻率轉(zhuǎn)字符串 recfrq
24、s0=numrecfrq/100;recfrqs1=numrecfrq%100/10; recfrqs2=numrecfrq%100%10; datcounts0=numdatcount/1000; datcounts1=numdatcount%1000/100; datcounts2=numdatcount%1000%100/10; datcounts3=numdatcount%1000%100%10; void time2times()/10進(jìn)制時(shí)間轉(zhuǎn)字符串 times0=numtime0/10;times1=numtime0%10; times3=numtime1/10;times4=n
25、umtime1%10; if(mss50) times5=:;else times5= ; times6=numtime2/10;times7=numtime2%10;void date2dates()/10進(jìn)制日期轉(zhuǎn)字符串 dates2=numdate0/10;dates3=numdate0%10; dates5=numdate1/10;dates6=numdate1%10; dates8=numdate2/10;dates9=numdate2%10; void avtemp2avtemps()/10進(jìn)制溫度轉(zhuǎn)字符串 avtemps0=numavtemp/100;avtemps1=numav
26、temp%100/10; avtemps3=numavtemp%100%10;、LED1602.H#define l1 0x80#define l2 0xc0void write_cmd(uchar con) LCDEN=0; RS=0; P2=con; delay(2); LCDEN=1; delay(2); LCDEN=0;void write_lcddata(uchar dat) LCDEN=0; RS=1; P2=dat; delay(2); LCDEN=1; delay(2); LCDEN=0; void display(uchar line,uchar ttb,bit sign) uchar i=0; write_cmd(line);/第一行數(shù)據(jù)起始位 while(ttbi!=0) write_lcddata(ttbi);i+; if(sign=1)/覆蓋所有空白 for(i;iNew 或快捷鍵 Ctrl+N 來實(shí)現(xiàn),然后編寫程序。File-Save 或快捷鍵 Ctrl+S 進(jìn)行保存。首先第一個(gè)程序命名為asd.c,鼠標(biāo)放在屏幕左側(cè)的 Source Group1 文件夾圖標(biāo)上右擊彈出菜單, 在這里可以做在項(xiàng)目中增加減少文件等操作。 我們選” Add
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)客服工作總結(jié)及時(shí)解答解決用戶問題
- 食品行業(yè)食品安全培訓(xùn)總結(jié)
- AIDS抗病毒治療課件
- 2025年全球及中國血流動(dòng)力學(xué)監(jiān)測解決方案行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球新能源交流繼電器行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球剛性墻庇護(hù)所行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國游戲視頻背景音樂行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球滑移轉(zhuǎn)向巖石拾取器行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球甲氧氯普胺片行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國工業(yè)級硅酸鉀行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 充電樁知識培訓(xùn)課件
- 2025年七年級下冊道德與法治主要知識點(diǎn)
- 2025年交通運(yùn)輸部長江口航道管理局招聘4人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 老年髖部骨折患者圍術(shù)期下肢深靜脈血栓基礎(chǔ)預(yù)防專家共識(2024版)解讀
- 偏癱足內(nèi)翻的治療
- 藥企質(zhì)量主管競聘
- 信息對抗與認(rèn)知戰(zhàn)研究-洞察分析
- 心腦血管疾病預(yù)防課件
- 手術(shù)室??谱o(hù)士工作總結(jié)匯報(bào)
- 2025屆高三聽力技巧指導(dǎo)-預(yù)讀、預(yù)測
- 蘇州市2025屆高三期初陽光調(diào)研(零模)政治試卷(含答案)
評論
0/150
提交評論