基于单片机的多点温度采集系统 下载本文

********************************************************************/ 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