温度检测系统设计报告DOCWord格式文档下载.docx
- 文档编号:22355569
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:28
- 大小:483.21KB
温度检测系统设计报告DOCWord格式文档下载.docx
《温度检测系统设计报告DOCWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《温度检测系统设计报告DOCWord格式文档下载.docx(28页珍藏版)》请在冰豆网上搜索。
lcd_init();
eeprom_init();
/***********开机效果****************/
display(l1,"
StartingNT"
1);
longdelay(10);
display(l2,"
Ver3.0.1"
longdelay(20);
write_cmd(0x01);
//清屏
/*************************************/
sys_init();
}
voidcomms()//模式公共进程
time2times();
//时间格式转换
avtemp=gettemp();
//获取温度
avtemp2avtemps();
//温度格式转换
date_counter();
//获取当前日期
date2dates();
//日期格式转换
display(l2+1,times,0);
display(l2+11,avtemps,0);
voidprogs(uinti,uintk)//进度条
uintj;
write_cmd(0xc0);
for(j=0;
j<
(i*16/k);
j++)
{
write_lcddata(0xff);
}
voidnormal_run()//无记录运行模式
comms();
if(time[2]%10<
5)
display(l1,logos,1);
else
{display(l1,"
***"
0);
display(l1+13,"
display(l1+3,dates,0);
incmin=0;
voidrecding_run()//记录模式运行模式
uintWDTPT;
//临时写地址指针变量存放
recfrq2recfrqs();
if(mss>
50)display(l1,"
"
R"
display(l1+1,"
-NUM"
display(l1+5,datcounts,0);
display(l1+9,"
**EV"
display(l1+13,recfrqs,0);
else
/***********定时记录*************/
if(incmin>
=recfrq)//触发记录功能
//1清除进入记录标志
if(WDTP>
10240)//20个扇区
overflag=1;
if(overflag==0)//如果数据尚未溢出
if(date_recf==1)
//记录年-月-日(格式:
'
z'
+年+月+日)为十制数值
{
date_recf=0;
//清除记录日期标志
write_isp(WDTP,'
);
//日期起始标志
write_isp(WDTP,date[0]);
write_isp(WDTP,date[1]);
write_isp(WDTP,date[2]);
//记录年、月、日
}
/***********记录时间************/
write_isp(WDTP,time[0]);
write_isp(WDTP,time[1]);
//记录时分
/***********记录温度************/
write_isp(WDTP,avtemp/100);
write_isp(WDTP,avtemp%100);
/**********记录加一*********/
datcount++;
/**********写回数据指针****************/
WDTPT=WDTP;
if(FDTP==512)
del_isp(0);
//清空记录表
FDTP=0;
write_isp(FDTP,WDTPT/256);
write_isp(WDTP,WDTPT%256);
write_isp(WDTP,datcount/256);
write_isp(WDTP,datcount%256);
FDTP=WDTP;
WDTP=WDTPT;
//交互完成
if(overflag==1)//如果数据溢出
Error!
"
DataOverflow!
autobac_tim=0;
while(autobac_tim!
=3);
voiddata_run()//查看记录模式
uchari=0;
bitbacf=0;
uintcou_t=0;
//计数缓存变量
uchartemp=0;
//临时数据缓存
uintcd=0;
//进度条统计数据
while(bacf==0)
if(autobac_tim>
10)
bacf=1;
ReadyforExport"
D-DateT-TempL!
if(RI==1)
RI=0;
ser_rec=SBUF;
switch(ser_rec)
case'
L'
:
//格式化
Format?
Y-YesN-No"
while
(1)
if(RI==1){RI=0;
ser_rec=SBUF;
autobac_tim=0;
if(ser_rec=='
Y'
)//确定格式化
display(l1,"
Formatting..."
display(l2,"
eeprom_format();
FormatSuccessed"
longdelay(3);
break;
N'
)break;
if(autobac_tim>
break;
autobac_tim=0;
break;
D'
//输出日期时间
ExportingDate.."
display(l2,"
RDTP=512;
//将读指针放到首位
cou_t=datcount;
cd=0;
while(cou_t!
=0)
if(RI==1)RI=0;
if(SBUF=='
B'
)
{
display(l1,"
Exportstopped"
cd=0;
longdelay(3);
break;
}
temp=read_isp(RDTP);
//预读判断
RDTP--;
if(temp=='
{
RDTP++;
prf_date();
//输出年月日
}
prf_time();
//输出时间
RDTP=RDTP+2;
cou_t--;
cd++;
progs(cd,datcount);
if(datcount==0)
{display(l1,"
NoData!
autobac_tim=0;
T'
//温度输出
ExportingTemp.."
display(l2,"
RDTP=516;
cd=0;
cou_t=datcount;
if(RI==1)RI=0;
temp=read_isp(RDTP);
RDTP=RDTP+6;
RDTP=RDTP+2;
prf_temp();
bacf=1;
break;
ser_rec=0;
mode=tempmode;
voidadj_settings()//设置模式
//Counter
bitendadj=0;
//调整完毕标志
ucharser_temp=0;
//接收缓存
//清屏
times[5]='
//恢复数点
Settime-"
display(l1+11,"
hour"
display(l2+11,"
[]"
display(l2+12,recfrqs,0);
write_cmd(0xC1+i);
write_cmd(0x0f);
//显示闪烁光标
//初始化自动返回时间常数
while(!
endadj)
if(RI==1)//接收到数据
//自动返回清零
ser_temp=SBUF;
if((ser_temp>
47)&
&
(ser_temp<
58))//进行数值判断
if(i<
8)
times[i]=ser_temp;
if(i>
8&
i<
14)
recfrqs[i-11]=ser_temp;
=14)
dates[i-13]=ser_temp;
i++;
if(ser_temp=='
F'
)i++;
//往前一步
)endadj=1;
//退出调整
switch(i)//显示处理
case2:
i++;
display(l1+11,"
min"
case5:
sec"
case8:
i=i+3;
frq"
case14:
display(l1+4,"
dateyear"
case17:
moun"
case20:
day"
case23:
endadj=1;
if(i<
display(l2+12,recfrqs,0);
display(l2+3,dates,0);
write_cmd(0xC1+i-11);
if(endadj==1)//写回参数
time[0]=(times[0]-48)*10+times[1]-48;
time[1]=(times[3]-48)*10+times[4]-48;
time[2]=(times[6]-48)*10+times[7]-48;
recfrq=(recfrqs[0]-48)*100+(recfrqs[1]-48)*10+recfrqs[2]-48;
date[0]=(dates[2]-48)*10+dates[3]-48;
date[1]=(dates[5]-48)*10+dates[6]-48;
date[2]=(dates[8]-48)*10+dates[9]-48;
endadj=1;
write_cmd(0x0c);
//正常显示
voidmain()
init();
switch(mode)
{
case1:
normal_run();
recding_run();
case3:
data_run();
A'
adj_settings();
case'
R'
mode=2;
mode=1;
H'
tempmode=mode;
mode=3;
ser_sents(dates);
times[5]='
ser_sents(times);
W'
ser_sents(avtemps);
C'
ser_sents(datcounts);
ser_sents(recfrqs);
}
voidmiao()interrupt1//秒产生中断
TH0=(65535-9200)/256;
TL0=(65535-9200)%256;
mss++;
if(mss==100)
{mss=0;
time[2]++;
autobac_tim++;
if(autobac_tim==255)
autobac_tim=244;
//保持溢出
if(time[2]>
=60)
time[2]=0;
time[1]++;
incmin++;
if(time[1]>
time[1]=0;
time[0]++;
if(time[0]>
=24)
time[0]=0;
dayincf=1;
//天自增标志置位
date_recf=1;
//日期需要记录
/*将返回时间[时分秒*/
②、system.h
/******系统I/O******/
/*****LCDI/O*******/
sbitRS=P1^2;
sbitLCDEN=P1^1;
/*****DS18B20*******/
sbitDS=P1^0;
#defineucharunsignedchar
#defineuintunsignedint
ucharcodenum[]={'
0'
'
1'
2'
3'
4'
5'
6'
7'
8'
9'
};
/********时间相关变量************/
uchartime[]={23,28,00};
//时分秒(10进制数)
uchartimes[]="
15:
37:
00"
//时分秒(ASCII码)
ucharmss=0;
uchardate[]={11,11,11};
//年月日(10进制数)
uchardates[]="
2011-10-29"
//年月日(ASCII码)
bitdayincf=0;
bitdate_recf=0;
//日期记录标志
/***********记录频率变量*******************/
ucharrecfrq=2;
//记录频率(10进制数)
ucharrecfrqs[]="
001"
//记录频率(ASCII码)
uintdatcount=0;
//记录总数
uchardatcounts[]="
0000"
/**************串口接收变量****************/
ucharser_rec;
/*************温度相关变量****************/
uintavtemp=0;
ucharavtemps[]="
00.0"
voiddelay(ucharz)
ucharx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
voidlongdelay(ucharz)
for(z;
z>
z--)
delay(255);
voidser_sent(ucharsendata)//串口发送单字节
SBUF=sendata;
while(TI!
=1);
TI=0;
delay
(1);
voidser_sents(ucharstrings[])//串口发送字符串
while(strings[i]!
='
\0'
ser_sent(strings[i]);
delay(20);
i++;
ser_sent('
\n'
voiddate_counter()//日期转变
ucharn;
//月天数暂存
uintyear=2000+date[0];
//将年转换为标准年
if(dayincf==1)
dayincf=0;
switch(date[1])//根据月份制定月天数
n=31;
if(year%4==0||year%400==0){n=29;
}else{n=28;
}break;
case4:
n=30;
case5:
case6:
case7:
case8:
case9:
case10:
case11:
case12:
date[2]++;
if(date[2]>
n)
date[2]=1;
date[1]++;
if(date[1]>
12)
date[1]=1;
date[0]++;
voidsys_init()//系统初始化
EA=1;
TMOD=0x21;
TR1=1;
REN=1;
SM0=0;
SM1=1;
TH1=0xfA;
TL1=0xfA;
ET0=1;
//允许定时器中断0
//定时器中断0初值
TR0=1;
//开中断(秒)
ES=0;
voidrecfrq2recfrqs()//10进制记录频率转字符串
recfrqs[0]=num[recfrq/100];
recfrqs[1]=num[recfrq%100/10];
recfrqs[2]=num[recfrq%100%10];
datcounts[0]=num[datcount/1000];
datcounts[1]=num[datcount%1000/100];
datcounts[2]=num[datcount%1000%100/10];
datcounts[3]=num[datcount%1000%100%10];
voidtime2times()//10进制时间转字符串
times[0]=num[time[0]/10];
times[1]=num[time[0]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 检测 系统 设计 报告 DOC
![提示](https://static.bdocx.com/images/bang_tan.gif)