WriteOneChar(0x44); //启动温度转换 }
/*****读取温度*****/
unsigned int ReadTemperature(void) {
unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Tmpchange(); Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器 a=ReadOneChar(); //读低8位 b=ReadOneChar(); //读高8位 t=b; t<<=8; t=t|a;
tt=t*0.0625;
t= tt*100+0.5; //放大10倍输出并四舍五入 return(t); }
/*****显示温度子程序*****/ void wendu_dat() {
e=ReadTemperature(); //获取温度值 a=e/1000; if(shezhi==0) {
temp3[0]=a; //计算得到十位数字 b=e/100-a*10; //计算得到个位数字 temp3[1]=b;
d=e; //计算得到小数点后两位 temp3[2]=d;
c=(e0)/10; //计算得到小数点后一位 temp3[3]=c; } else {
temp3[0]=shangxian/10; temp3[1]=shangxian; temp3[2]=xiaxian/10; temp3[3]=xiaxian; }
wendu=e/100;
33
if(moshi==0)
{if(wendu>=shangxian || wendu<=xiaxian || num>=num1) baojing=1;
else baojing=0; } else
baojing=0; }
/*****************************************************
函数功能:显示气体浓度和设定的报警极限值
*****************************************************/ void rongdu_dat() {
uchar ad; ad=A_D(); num=ad;
if(shezhi==0) {
temp2[0]=num/10000;
temp2[1]=num000/1000; temp2[2]=num00000/100; temp2[3]=num000000/10; temp2[4]=num; } else {
temp2[0]=num1/10000;
temp2[1]=num1000/1000; temp2[2]=num100000/100; temp2[3]=num1000000/10; temp2[4]=num1; }
if(moshi==0)
{if(wendu>=shangxian || wendu<=xiaxian || num>=num1) baojing=1;
else baojing=0; } else
baojing=0; }
void display() { if(shezhi==0)
{write_com(0x80+0);
34
if(num>=num1) write_data('*'); else
write_data(' '); write_data('S'); write_data('M'); write_data('O'); write_data('G'); write_data(':');
write_data(0x30+temp2[0]); write_data(0x30+temp2[1]); write_data(0x30+temp2[2]); write_data(0x30+temp2[3]); write_data(0x30+temp2[4]); write_data('m'); write_data('g'); write_data('/'); write_data('l'); write_data(' ');
write_com(0x80+0x40);
if(wendu>=shangxian || wendu<=xiaxian) write_data('*'); else
write_data(' '); write_data('T'); write_data('E'); write_data('M'); write_data('P'); write_data(':');
write_data(0x30+temp3[0]); write_data(0x30+temp3[1]); write_data('.');
write_data(0x30+temp3[2]); write_data(0x30+temp3[3]); write_data('C'); write_data(' '); write_data(' '); write_data(' '); write_data(' '); } else
{write_com(0x80+0); write_data('S'); write_data('M');
35
write_data('O'); write_data('G'); write_data('_'); write_data('H'); write_data(':'); if(shezhi==1) {if(ss==1) {
write_data(0x30+temp2[0]); write_data(0x30+temp2[1]); write_data(0x30+temp2[2]); write_data(0x30+temp2[3]); write_data(0x30+temp2[4]); } else {
write_data(' '); write_data(' '); write_data(' '); write_data(' '); write_data(' '); } } else {
write_data(0x30+temp2[0]); write_data(0x30+temp2[1]); write_data(0x30+temp2[2]); write_data(0x30+temp2[3]); write_data(0x30+temp2[4]); }
write_data('m'); write_data('g'); write_data('/'); write_data('l');
write_com(0x80+0x40); write_data('T'); write_data('E'); write_data('M'); write_data('P'); write_data(' '); write_data(' '); write_data('H'); write_data(':');
36
if(shezhi==2) {if(ss==1) {
write_data(0x30+temp3[0]); write_data(0x30+temp3[1]); } else {
write_data(' '); write_data(' '); } } else {
write_data(0x30+temp3[0]); write_data(0x30+temp3[1]); }
write_data(' '); write_data(' '); write_data('L'); write_data(':'); if(shezhi==3) {if(ss==1) {
write_data(0x30+temp3[2]); write_data(0x30+temp3[3]); } else {
write_data(' '); write_data(' '); } } else {
write_data(0x30+temp3[2]); write_data(0x30+temp3[3]); } } }
/***************************************************** 函数功能:主函数
*****************************************************/
37
void main(void) { rw=0; init();
TMOD=0x1; TH0=0xb1; TL0=0xe0; TR0=1;
ET0=1; EA=1; //定义中断 while(1)
{ adstart(); wendu_dat(); rongdu_dat(); key();
display(); } }
void time0(void) interrupt 1 //中断 { TH0=0xb1; TL0=0xe0; if(shezhi>0) { pinlv++;
if(pinlv==30) ss=!ss;
if(pinlv==60) {ss=!ss;pinlv=0;} } else
{ss=0;pinlv=0;}
if(baojing==1) { pinlv1++;
if(pinlv1==30) ss1=!ss1;
if(pinlv1==60) {ss1=!ss1;pinlv1=0;} } else
{ss1=0;pinlv1=0;} LED1=!moshi; LED2=!ss1; fmq=!ss1; }
38