********************************************************************/ void ds1820disp()//温度值在LCD显示 { uchar flagdat; disdata[0]=tvalue/1000+0x30; disdata[1]=tvalue00/100+0x30;//十位数 disdata[2]=tvalue0/10+0x30;//个位数 disdata[3]=tvalue+0x30;//小数位 if(tflag==0)
flagdat=0x20; /*正温度不显示符号,0x20对应为空白,可以从1602字符代
码表中查找相关字符所对应的数值*/
else
flagdat=0x2d; //负温度显示负号:- if(disdata[0]==0x30) {
disdata[0]=0x20;//如果百位为0,不显示 if(disdata[1]==0x30) { disdata[1]=0x20;//如果百位为0,十位为0也不显示 } } wr_com(0xc0); //设置下一个要存入数据的CGRAM的地址,即40H单元(40H+80H=C0H),即第二行第一个字节(每行可以显示16个字符,可以显示两行,即1602) wr_dat(flagdat);//显示符号位 wr_com(0xc1); //下一个数据显示在第二行第二个字节 wr_dat(disdata[0]);//显示百位 wr_com(0xc2); //下一个数据显示在第二行第三个字节 wr_dat(disdata[1]);//显示十位 wr_com(0xc3); //下一个数据显示在第二行第四个字节 wr_dat(disdata[2]);//显示个位 wr_com(0xc4); //下一个数据显示在第二行第五个字节 wr_dat(0x2e);//显示小数点 wr_com(0xc5); //下一个数据显示在第二行第六个字节 wr_dat(disdata[3]);//显示小数位 wr_com(0xc6); wr_dat(0xdf); wr_com(0xc7); wr_dat(0x43); }
/******************************************************** 扫描按键
*********************************************************/ uchar key_scan( ) {
36
uchar key_back; key_back=0;
if( !KEY1 | !KEY2 | !KEY3 ) {
delay1ms(5);
if( !KEY1 | !KEY2 | !KEY3 ) { if(!KEY1) key_back=1; else if(!KEY2) key_back=2; else if(!KEY3) key_back=3; while(!KEY1 | !KEY2 | !KEY3); // 等待按键释放 } } return key_back; }
/***************************************************** 函数功能:按键处理
***************************************************/ void key_action( uchar key_back) {
if(Switch==0) {
if(key_back==1) { mode++; if(mode>2) mode=0; }
else if(key_back==2) { if(mode==1) { H_temp++;
if(H_temp>125) H_temp=125; }
else if(mode==2) { L_temp++;
if(L_temp>125) L_temp=125; } }
else if(key_back==3) { if(mode==1) { H_temp--;
37
if(H_temp<-50) H_temp=-50; }
else if(mode==2) { L_temp--;
if(L_temp<-50) L_temp=-50; } } }
if(Switch==1) {
if(key_back==1) { mode2++; if(mode2>2) mode2=0; }
else if(key_back==2) { if(mode2==1) { H_temp2++;
if(H_temp2>125) H_temp2=125; }
else if(mode2==2) { L_temp2++;
if(L_temp2>125) L_temp2=125; } }
else if(key_back==3) { if(mode2==1) { H_temp2--;
if(H_temp2<-50) H_temp2=-50; }
else if(mode2==2) { L_temp2--;
if(L_temp2<-50) L_temp2=-50; } } } }
/***************************************************** 显示数据处理
38
***************************************************/ void display_transaction( ) {
if(Switch==0) /*如果拨动开关关闭,则调整显示传感器1相关数据*/ {
if(mode==0) //模式0,正常显示传感器测得温度 {
init_play(0);
read_temp(0);//读取温度 ds1820disp();//显示 }
if(mode==1) //模式1,显示高温限值TH1 {
init_play(1);
tvalue=H_temp*10; if(H_temp<0) tflag=1; else
tflag=0;
ds1820disp();//显示 }
if(mode==2) //模式2,显示低温限值TH1 {
init_play(2);
tvalue=L_temp*10; if(L_temp<0) tflag=1; else
tflag=0;
ds1820disp();//显示 } }
else /*拨动开关开,则显示温度传感器2相关数据*/ {
if(mode2==0) //模式0,正常显示传感器测得温度 {
init_play(3);
read_temp(1);//读取温度 ds1820disp();//显示 }
if(mode2==1) //模式1,显示高温限值TH1 {
init_play(4);
39