经过两天熬夜的艰苦奋战,在原程序基础上进行升级,添加按键多功能操作
新增功能:1. K1模式转换,可自由切换:主界面显示,时间调整,闹钟设置,温度上下限设定等; 2. K2选定需要调整的位数。
切换至时间调整时,通过K3-"加",K4-"减"按键调整数值。
切换至闹钟设置时,通过K3-"加",K4-"减"按键调整数值。
切换至温度上下限设定时,通过K3-"加",K4-"减"按键调整数值。
准备扩展的新功能:闹钟音乐,喇叭开启和关闭,。
操作说明:
开机进入主界面,显示时钟和温度。按下K1时,进入模式选择,(有时间调整,闹钟设置,温度上下限设定等),当K1按下四次后,长响一声,回到主界面。
当K1(模式选择键)按下第一次,选择在时间调整时,按下K2,选定需要调整的位数,选定的位数会一秒钟不停的闪烁。然后按下K3 “加”或者K4 “减”按键,进行数值的加减,当K2按到五次时,返回时间调整界面。
再按下K1(模式选择键)按下第二次,进入到下一个模式,闹钟设置。按下K2,选定需要调整的位数,选定的位数会一秒钟不停的闪烁。然后按下K3 “加”或者K4 “减”按键,进行数值的加减,当K2按到五次时,返回闹钟设置界面。
再按下K1(模式选择键)按下第三次,进入到下一个模式,温度上下限设定。按下K2,选定需要调整的位数,选定的位数会一秒钟不停的闪烁。然后按下K3 “加”或者K4 “减”按键,进行数值的加减,当K2按到五次时,返回温度上下限设定界面。
当K1(模式选择键)按下第四次,返回到时钟和温度主界面显示。
采用的是stc89c51单片机,代码为自己原创
#include"reg51.h"#define uchar unsigned char #define uint unsigned int /****温度 端口定义******/ sbit wx5=P2^4; sbit wx6=P2^5; sbit wx7=P2^6; sbit wx8=P2^7; sbit DQ=P3^6; uint temp, temp1,temp2, xs,H1,H2,L1,L2; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0X9c,0xc6,0x91,0xfc,0XE3}; /******延时程序*******/ void delay1(uint m) { uint i,j; for(i=m;i>0;i--) for(j=110;j>0;j--); } void delay(unsigned int m) { while(m--); } void Init_DS18B20() { unsigned char x=0; DQ = 1; //DQ复位 ds18b20通信端口 delay(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay(80); //精确延时 大于 480us DQ = 1; //拉高总线 delay(4); x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(20); }/***********ds18b20读一个字节**************/ uchar ReadOneChar() { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; // 高电平拉成低电平时读周期开始 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; // delay(4); } return(dat); }/*************ds18b20写一个字节****************/ void WriteOneChar(unsigned char dat) { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; //从高电平拉至低电平时,写周期的开始 DQ = dat&0x01; //数据的最低位先写入 delay(5); //60us到120us延时 DQ = 1; dat>>=1; //从最低位到最高位传入 } }/**************读取ds18b20当前温度************/void ReadTemperature() { unsigned char a=0; unsigned b=0; unsigned t=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 delay(1); // this message is wery important Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 delay(1); a=ReadOneChar(); //读取温度值低位 b=ReadOneChar(); //读取温度值高位 temp1=b<<4; //高8位中后三位数的值 temp1+=(a&0xf0)>>4; //低8位中的高4位值加上高8位中后三位数的值 temp1室温整数值 temp2=a&0x0f; //小数的值 temp=((b*256+a)>>4); //当前采集温度值除16得 实际温度值 zhenshu xs=temp2*0.0625*10; //小数位,若为0.5则算为5来显示 xs小数 xiaoshu }////////////////////////////////////////////////////////////////////////****时钟 端口定义******/ sbit wx1=P2^0; sbit wx2=P2^1; sbit wx3=P2^2; sbit wx4=P2^3; uchar qian,bai,shi,ge,miao1,miao2,count1,count2; uchar n1,n2,z1,z2;//设置闹钟变量 uchar code table1[]={0xc0,0xcf,0xa4,0x86,0x8b, 0x92,0x90,0xc7,0x80,0x82}; //////////////////////////////////////////// /***************按键调时程序***************/ sbit K1=P3^0; sbit K2=P3^1; sbit K3=P3^2; sbit K4=P3^3; sbit BEEP=P3^7; //// 定义蜂鸣器口 uchar K1num,K2num,K3num,K4num,K5num,K6num,K7num; ////////////////////////////////////////// /**********报警声音**************/ bi(uint t) { int c,n; for(c=0;c<t;c++) { for(n=0;n<50;n++); BEEP=~BEEP; //按位取反BEEP } return(t); } ////////////////////////////////////////////////********定时器初始化*************/ void init1() { TMOD=0x01; //定义定时器0,工作方式1 TH0=(65536-50000)/256; //高8位 TL0=(65536-50000)%256; //低8位 EA=1; //开全局中断 ET0=1; TR0=1; //打开定时器 } /////////////////////////////////////////////// /***********定时器中断函数************/ void timer0() interrupt 1 { TH0=50; TL0=50; count1++; if( count1==19 ) {count1=0; miao1++;//LED1=~LED1; if( miao1==10 ) { miao1=0; miao2++; } if( miao2== 6 ) { miao2=0; ge++; } if( ge==10 ) { ge=0; shi++; } if( shi== 6 ) { shi=0; bai++; } if( bai==10 ) { bai=0; qian++; } if( qian== 3 ) { qian=0; } if(qian==2&&bai==4){qian=0;bai=0; }} } void init2() { TMOD=0x01; //定义定时器0,工作方式1 TH1=(65536-50000)/256; //高8位 TL1=(65536-50000)%256; //低8位 EA=1; //开全局中断 ET1=1; TR1=1; //打开定时器 } /////////////////////////////////////////////// /***********定时器中断函数************/ void timer1() interrupt 3 { TH1=50; TL1=50; count2++; if( count2==120 ) {count2=0; }} void MODE() //模式选择{//正常显示 时钟和温度 if( K1num==0 ) { TR0=1;TR1=0; //打开定时器0,关闭定时器1 wx1=1; P0=table[qian]; delay1(2);wx1=0; //时十位 if( count1<9.5 ) //时分之间的小数点闪烁,定时器0小于0.5秒,小数点亮 { wx2=1; P0=table[bai]+0X80; delay1(2); wx2=0; //时个位打开小数点 wx3=1; P0=table1[shi]+0X80; delay1(2); wx3=0; //分十位+小数点 } else //定时器0大于0.5秒,小数点灭 { wx2=1; P0=table[bai]; delay1(2); wx2=0; //时个位关闭小数点 wx3=1; P0=table1[shi]; delay1(2); wx3=0; //分十位关闭小数点 } wx4=1; P0=table1[ge]; delay1(2); wx4=0; //分个位 wx5=1; P0=table[temp/10]; delay1(2); wx5=0; //温度十位 wx6=1; P0=table[temp%10]; delay1(2); wx6=0; //温度个位 wx7=1; P0=table[12]; delay1(2); wx7=0; //温度℃ wx8=1; P0=table[13]; delay1(2); wx8=0; //温度℃ if((n1==qian)&&(n2==bai)&&(z1==shi)&&(z2=ge)) { bi(2000);} if((H1==temp/10)&(H2==temp%10)) { bi(1000); } if((L1==temp/10)&(L2==temp%10)) { bi(500); } }//时间调整显示if((K1num==1 )&&(K2num==0)) { TR1=0; wx1=1; P0=table[qian]; delay1(2); wx1=0; //时十位 wx2=1; P0=table[bai]+0X80; delay1(2); wx2=0; //时个位,小数点停止不动 wx3=1; P0=table1[shi]+0X80; delay1(2); wx3=0; //分十位,小数点停止不动 wx4=1; P0=table1[ge]; delay1(2); wx4=0; //分个位 wx5=1; P0=0xBF; delay1(2); wx5=0; //- wx6=1; P0=0x92; delay1(2); wx6=0; //s wx7=1; P0=0x87; delay1(2); wx7=0; //t wx8=1; P0=0xBF; delay1(2); wx8=0; //- }if((K1num==1 )&&(K2num==1)) { TR1=1; if (count2<60) {wx1=1; P0=table[qian]; delay1(2); wx1=0; } //时十位 else {wx1=1; P0=0xff; delay1(2); wx1=0; } //时十位 wx2=1; P0=table[bai]+0X80; delay1(2); wx2=0; //时个位,小数点停止不动 wx3=1; P0=table1[shi]+0X80; delay1(2); wx3=0; //分十位,小数点停止不动 wx4=1; P0=table1[ge]; delay1(2); wx4=0; //分个位 wx5=1; P0=0xBF; delay1(2); wx5=0; //- wx6=1; P0=0x92; delay1(2); wx6=0; //s wx7=1; P0=0x87; delay1(2); wx7=0; //t wx8=1; P0=0xBF; delay1(2); wx8=0; //- }if((K1num==1 )&&(K2num==2)) { TR1=1; wx1=1; P0=table[qian]; delay1(2); wx1=0; //时十位 if (count2<60) {wx2=1; P0=table[bai]+0X80; delay1(2); wx2=0; } //时个位,小数点停止不动 else {wx2=1; P0=0xff; delay1(2); wx2=0; } wx3=1; P0=table1[shi]+0X80; delay1(2); wx3=0; //分十位,小数点停止不动 wx4=1; P0=table1[ge]; delay1(2); wx4=0; //分个位 wx5=1; P0=0xBF; delay1(2); wx5=0; //- wx6=1; P0=0x92; delay1(2); wx6=0; //s wx7=1; P0=0x87; delay1(2); wx7=0; //t wx8=1; P0=0xBF; delay1(2); wx8=0; //- }if((K1num==1 )&&(K2num==3)) { TR1=1; wx1=1; P0=table[qian]; delay1(2); wx1=0; //时十位 wx2=1; P0=table[bai]+0X80; delay1(2); wx2=0; //时个位,小数点停止不动 if (count2<60) {wx3=1; P0=table1[shi]+0X80; delay1(2); wx3=0; } //分十位,小数点停止不动 else {wx3=1; P0=0xff; delay1(2); wx3=0; } wx4=1; P0=table1[ge]; delay1(2); wx4=0; //分个位 wx5=1; P0=0xBF; delay1(2); wx5=0; //- wx6=1; P0=0x92; delay1(2); wx6=0; //s wx7=1; P0=0x87; delay1(2); wx7=0; //t wx8=1; P0=0xBF; delay1(2); wx8=0; //- }if((K1num==1 )&&(K2num==4)) { TR1=1; wx1=1; P0=table[qian]; delay1(2); wx1=0; //时十位 wx2=1; P0=table[bai]+0X80; delay1(2); wx2=0; //时个位,小数点停止不动 wx3=1; P0=table1[shi]+0X80; delay1(2); wx3=0; //分十位,小数点停止不动 if (count2<60) {wx4=1; P0=table1[ge]; delay1(2); wx4=0; }//分个位 else {wx4=1; P0=0xff; delay1(2); wx4=0; } wx5=1; P0=0xBF; delay1(2); wx5=0; //- wx6=1; P0=0x92; delay1(2); wx6=0; //s wx7=1; P0=0x87; delay1(2); wx7=0; //t wx8=1; P0=0xBF; delay1(2); wx8=0; //- }//闹钟调整显示if(( K1num==2 )&&(K3num==0)) { TR1=0; wx1=1; P0=0x89; delay1(2); wx1=0; //H wx2=1; P0=0xBF; delay1(2); wx2=0; //- wx3=1; P0=table1[n1]; delay1(2); wx3=0; //时十位 wx4=1; P0=table1[n2]; delay1(2); wx4=0; //时个位 wx5=1; P0=0x8E; delay1(2); wx5=0; //F wx6=1; P0=0xBF; delay1(2); wx6=0; //- wx7=1; P0=table[z1]; delay1(2); wx7=0; //分十位 wx8=1; P0=table[z2]; delay1(2); wx8=0; //分个位 }if (( K1num==2 )&&(K3num==1)) { TR1=1; wx1=1; P0=0x89; delay1(2); wx1=0; //H wx2=1; P0=0xBF; delay1(2); wx2=0; //- if (count2<60) {wx3=1; P0=table1[n1]; delay1(2); wx3=0;} //时十位 else {wx3=1; P0=0xff; delay1(2); wx3=0;} wx4=1; P0=table1[n2]; delay1(2); wx4=0; //时个位 wx5=1; P0=0x8E; delay1(2); wx5=0; //F wx6=1; P0=0xBF; delay1(2); wx6=0; //- wx7=1; P0=table[z1]; delay1(2); wx7=0; //分十位 wx8=1; P0=table[z2]; delay1(2); wx8=0; //分个位 }if(( K1num==2 )&&(K3num==2)) { TR1=1; wx1=1; P0=0x89; delay1(2); wx1=0; //H wx2=1; P0=0xBF; delay1(2); wx2=0; //- wx3=1; P0=table1[n1]; delay1(2); wx3=0; //时十位 if(count2<60) {wx4=1; P0=table1[n2]; delay1(2); wx4=0;} //时个位 else{wx4=1; P0=0xff; delay1(2); wx4=0;} wx5=1; P0=0x8E; delay1(2); wx5=0; //F wx6=1; P0=0xBF; delay1(2); wx6=0; //- wx7=1; P0=table[z1]; delay1(2); wx7=0; //分十位 wx8=1; P0=table[z2]; delay1(2); wx8=0; //分个位 }if (( K1num==2 )&&(K3num==3)) { TR1=1; wx1=1; P0=0x89; delay1(2); wx1=0; //H wx2=1; P0=0xBF; delay1(2); wx2=0; //- wx3=1; P0=table1[n1]; delay1(2); wx3=0; //时十位 wx4=1; P0=table1[n2]; delay1(2); wx4=0; //时个位 wx5=1; P0=0x8E; delay1(2); wx5=0; //F wx6=1; P0=0xBF; delay1(2); wx6=0; //- if(count2<60) {wx7=1; P0=table[z1]; delay1(2); wx7=0;} //分十位 else{wx7=1; P0=0xff; delay1(2); wx7=0;} wx8=1; P0=table[z2]; delay1(2); ;wx8=0; //分个位 }if (( K1num==2 )&&(K3num==4)) { TR1=1; wx1=1; P0=0x89; delay1(2); wx1=0; //H wx2=1; P0=0xBF; delay1(2); wx2=0; //- wx3=1; P0=table1[n1]; delay1(2); wx3=0; //时十位 wx4=1; P0=table1[n2]; delay1(2); wx4=0; //时个位 wx5=1; P0=0x8E; delay1(2); wx5=0; //F wx6=1; P0=0xBF; delay1(2); wx6=0; //- wx7=1; P0=table[z1]; delay1(2); wx7=0; //分十位 if(count2<60) {wx8=1; P0=table[z2]; delay1(2); wx8=0;} //分个位 else{wx8=1; P0=0xff; delay1(2); wx8=0;} } //温度调整显示if( (K1num==3)&&(K4num==0) ) { TR1=0; wx1=1; P0=0x89; delay1(2); wx1=0; //H wx2=1; P0=0xBF; delay1(2); wx2=0; //- wx3=1; P0=table1[H1]; delay1(2); wx3=0; //时十位 wx4=1; P0=table1[H2]; delay1(2); wx4=0; //时个位 wx5=1; P0=0xC7; delay1(2); wx5=0; //L wx6=1; P0=0xBF; delay1(2); wx6=0; //- wx7=1; P0=table[L1]; delay1(2); wx7=0; //分十位 wx8=1; P0=table[L2]; delay1(2); wx8=0; //分个位 }if( (K1num==3)&&(K4num==1) ) { TR1=1; wx1=1; P0=0x89; delay1(2); wx1=0; //H wx2=1; P0=0xBF; delay1(2); wx2=0; //- if(count2<60) {wx3=1; P0=table1[H1]; delay1(2); wx3=0;} //时十位 else {wx3=1; P0=0xff; delay1(2); wx3=0;} wx4=1; P0=table1[H2]; delay1(2); wx4=0; //时个位 wx5=1; P0=0xC7; delay1(2); wx5=0; //L wx6=1; P0=0xBF; delay1(2); wx6=0; //- wx7=1; P0=table[L1]; delay1(2); wx7=0; //分十位 wx8=1; P0=table[L2]; delay1(2); wx8=0; //分个位 } if( (K1num==3)&&(K4num==2) ) { TR1=1; wx1=1; P0=0x89; delay1(2); wx1=0; //H wx2=1; P0=0xBF; delay1(2); wx2=0; //- wx3=1; P0=table1[H1]; delay1(2); wx3=0; //时十位 if(count2<60) {wx4=1; P0=table1[H2]; delay1(2); wx4=0;} //时个位 else {wx4=1; P0=0xff; delay1(2); wx4=0;} wx5=1; P0=0xC7; delay1(2); wx5=0; //L wx6=1; P0=0xBF; delay1(2); wx6=0; //- wx7=1; P0=table[L1]; delay1(2); wx7=0; //分十位 wx8=1; P0=table[L2]; delay1(2); wx8=0; //分个位 } if( (K1num==3)&&(K4num==3) ) { TR1=1; wx1=1; P0=0x89; delay1(2); wx1=0; //H wx2=1; P0=0xBF; delay1(2); wx2=0; //- wx3=1; P0=table1[H1]; delay1(2); wx3=0; //时十位 wx4=1; P0=table1[H2]; delay1(2); wx4=0; //时个位 wx5=1; P0=0xC7; delay1(2); wx5=0; //L wx6=1; P0=0xBF; delay1(2); wx6=0; //- if(count2<60) {wx7=1; P0=table[L1]; delay1(2); wx7=0;} //分十位 else {wx7=1; P0=0xff; delay1(2); wx7=0;} wx8=1; P0=table[L2]; delay1(2); wx8=0; //分个位 } if( (K1num==3)&&(K4num==4) ) { TR1=1; wx1=1; P0=0x89; delay1(2); wx1=0; //H wx2=1; P0=0xBF; delay1(2); wx2=0; //- wx3=1; P0=table1[H1]; delay1(2); wx3=0; //时十位 wx4=1; P0=table1[H2]; delay1(2); wx4=0; //时个位 wx5=1; P0=0xC7; delay1(2); wx5=0; //L wx6=1; P0=0xBF; delay1(2); wx6=0; //- wx7=1; P0=table[L1]; delay1(2); wx7=0; //分十位 if(count2<60) {wx8=1; P0=table[L2]; delay1(2); wx8=0;} //分个位 else{wx8=1; P0=0xff; delay1(2); wx8=0;} }//喇叭开启关闭显示if( (K1num==4)&&(K5num==0) ) { TR1=0; wx1=1; P0=0x92; delay1(2); wx1=0; //S wx2=1; P0=0x8C; delay1(2); wx2=0; //P wx3=1; P0=0x81; delay1(2); wx3=0; //A wx4=1; P0=0xF0; delay1(2); wx4=0; //C wx5=1; P0=0xBF; delay1(2); wx5=0; //- wx6=1; P0=0xF7; delay1(2); wx6=0; //_ wx7=1; P0=0xF7; delay1(2); wx7=0; //_ wx8=1; P0=0xBF; delay1(2); wx8=0; //- } if( (K1num==4)&&(K5num==1) ) { TR1=1; wx1=1; P0=0x92; delay1(2); wx1=0; //S wx2=1; P0=0x8C; delay1(2); wx2=0; //P wx3=1; P0=0x81; delay1(2); wx3=0; //A wx4=1; P0=0xF0; delay1(2); wx4=0; //C wx5=1; P0=0xBF; delay1(2); wx5=0; //- wx6=1; P0=0xC0; delay1(2); wx6=0; //o wx7=1; P0=0x8E; delay1(2); wx7=0; //F wx8=1; P0=0x8E; delay1(2); wx8=0; //F } if( (K1num==4)&&(K5num==2) ) { TR1=1; wx1=1; P0=0x92; delay1(2); wx1=0; //S wx2=1; P0=0x8C; delay1(2); wx2=0; //P wx3=1; P0=0x81; delay1(2); wx3=0; //A wx4=1; P0=0xF0; delay1(2); wx4=0; //C wx5=1; P0=0xBF; delay1(2); wx5=0; //- wx6=1; P0=0xC0; delay1(2); wx6=0; //o wx7=1; P0=0xC8; delay1(2); wx7=0; //n wx8=1; P0=0xBF; delay1(2); wx8=0; //- } } //////////////////////////////////////////////////////////////////////////////////// ///////////////////按键功能设置///////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// void keycan() { /**********模式选择***********/ if( K1==0 ) { K1num++; delay(5); if( K1==0 ) { while(!K1); bi(350); if(K1num==5) { K1num=0;bi(650);TR0=1;TR1=0;} } } if(K1num!=0) { if( K2==0 ) { K2num++; K3num++; K4num++; K5num++; delay(5); if( K2==0 ) { while(!K2);bi(100); TR1=1; { if(K2num==5) { K2num=0;bi(400);TR1=0;} if(K3num==5) { K3num=0;bi(400);TR1=0;} if(K4num==5) { K4num=0;bi(400);TR1=0;} if(K5num==3) { K5num=0;bi(400);TR1=0;} }}} } if(K1num!=0) //加 { if( K3==0 ) { delay(5); if( K3==0 ) { while(!K3); bi(100); if((K1num==1)&&(K2num==1)) { qian++; if(qian==3 ) qian=0; } if((K1num==1)&&(K2num==2)) { bai++; if( bai==10) bai=0; } if((K1num==1)&&(K2num==3)) { shi++; if( shi==6 ) shi=0; } if((K1num==1)&&(K2num==4)) { ge++; if( ge==10) ge=0; } if((K1num==2)&&(K3num==1)) { n1++; if( n1==3 ) n1=0; } if((K1num==2)&&(K3num==2)) { n2++; if( n2==10) n2=0; } if((K1num==2)&&(K3num==3)) { z1++; if( z1==6 ) z1=0; } if((K1num==2)&&(K3num==4)) { z2++; if( z2==19) z2=0; } if((K1num==3)&&(K4num==1)) { H1++; if( H1==10) H1=0; } if((K1num==3)&&(K4num==2)) { H2++; if( H2==10) H2=0; } if((K1num==3)&&(K4num==3)) { L1++; if( L1==10) L1=0; } if((K1num==3)&&(K4num==4)) { L2++; if( L2==10) L2=0; } if((K1num==4)&&(K5num==1)) { BEEP=0; } } } if( K4==0 ) { delay(5); if( K4==0 ) { while(!K4); bi(100); if((K1num==1)&&(K2num==1)) { qian--; if(qian==-1) qian=2; } if((K1num==1)&&(K2num==2)) { bai--; if( bai==-1) bai=9; } if((K1num==1)&&(K2num==3)) { shi--; if( shi==-1) shi=5; } if((K1num==1)&&(K2num==4)) { ge--; if( ge==-1) ge=9; } if((K1num==2)&&(K3num==1)) { n1--; if( n1==-1) n1=2; } if((K1num==2)&&(K3num==2)) { n2--; if( n2==-1) n2=9; } if((K1num==2)&&(K3num==3)) { z1--; if( z1==-1) z1=5; } if((K1num==2)&&(K3num==4)) { z2--; if( z2==-1) z2=9; } if((K1num==3)&&(K4num==1)) { H1--; if( H1==-1) H1=9; } if((K1num==3)&&(K4num==2)) { H2--; if( H2==-1) H2=9; } if((K1num==3)&&(K4num==3)) { L1--; if( L1==-1) L1=9; } if((K1num==3)&&(K4num==4)) { L2--; if( L2==-1) L2=9; } if((K1num==4)&&(K5num==2)) { bi(); } } } } }//////////////////////////////////////////////////////////////***********主函数********************///////////////////////////////////////////////////////////// void main() { BEEP=0; init1(); init2(); qian=0;bai=6;shi=3;ge=0;miao2=0;miao1=0,H1=H2=L1=L2=2,n1=n2=z1=z2=1; while(1) { ReadTemperature(); keycan(); MODE(); }