程序:#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P0^0;
sbit DQ2=P0^1;
sbit DS=P2^0;
sbit RS=P1^5;
sbit RW=P1^6;
sbit EN=P1^7;
sbit KEY1=P2^1;
sbit KEY2=P2^2;
sbit KEY3=P2^3;
sbit BEEP=P2^7;
sbit Switch=P2^0;
uchar code str0[]=("Temperature 1:");
uchar code str1[]=("TH 1: ");
uchar code str2[]=("TL 1: ");
uchar code str3[]=("Temperature 1:");
uchar code str4[]=("TH 2: ");
uchar code str5[]=("TL 2: ");
uchar data disdata[5];
char mode=0;
char mode2=0;
char H_temp=35;
char L_temp=1;
char H_temp2=40;
char L_temp2=2;
uint tvalue;
uchar tflag;
void delay1ms(uint ms)
{
uchar i;
uchar j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++);
}
void wr_com(uchar com)
{
delay1ms(1);
RS=0;
RW=0;
EN=0;
P3=com;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void wr_dat(uchar dat)
{
delay1ms(1);
RS=1;
RW=0;
EN=0;
P3=dat;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void lcd_init()
{
delay1ms(15);
wr_com(0x38);
delay1ms(5);
wr_com(0x08);
delay1ms(5);
wr_com(0x01);
delay1ms(5);
wr_com(0x06);
delay1ms(5);
wr_com(0x0c);
delay1ms(5);
}
void display(uchar*p)
{
while(*p!='\0')
{
wr_dat(*p);
p++;
delay1ms(1);
}
}
void init_play(uchar st)
{
wr_com(0x80);
switch(st)
{
case0: display(str0);break;
case1: display(str1);break;
case2: display(str2);break;
case3: display(str3);break;
case4: display(str4);break;
case5: display(str5);break;
}
}
void delay_18B20(uint i)
{
while(i--);
}
void ds1820rst(bit flag)
{
uchar x=0;
if(flag==0)
{
DQ=1;
delay_18B20(4);
DQ=0;
delay_18B20(100);
DQ=1;
delay_18B20(40);
}
if(flag==1)
{
DQ2=1;
delay_18B20(4);
DQ2=0;
delay_18B20(100);
DQ2=1;
delay_18B20(40);
}
}
uchar ds1820rd(bit flag)
{
uchar i=0;
uchar dat=0;
if(flag==0)
{
for(i=8;i>0;i--)
{
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay_18B20(10);
}
}
if(flag==1)
{
for(i=8;i>0;i--)
{
DQ2=0;
dat>>=1;
DQ2=1;
if(DQ2)
dat|=0x80;
delay_18B20(10);
}
}
return(dat);
}
void ds1820wr(uchar wdata,bit flag)
{
uchar i=0;
if(flag==0)
{
for(i=8;i>0;i--)
{
DQ=0;
DQ=wdata&0x01;
delay_18B20(10);
DQ=1;
wdata>>=1;
}
}
if(flag==1)
{
for(i=8;i>0;i--)
{
DQ2=0;
DQ2=wdata&0x01;
delay_18B20(10);
DQ2=1;
wdata>>=1;
}
}
}
uint read_temp(bit flag)
{
uchar a,b;
ds1820rst(flag);
ds1820wr(0xcc,flag);
ds1820wr(0x44,flag);
ds1820rst(flag);
ds1820wr(0xcc,flag);
ds1820wr(0xbe,flag);
a=ds1820rd(flag);
b=ds1820rd(flag);
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
{
tvalue=~tvalue+1;
tflag=1;
}
tvalue=tvalue*(0.625);
return(tvalue);
}
void ds1820disp()
{
uchar flagdat;
disdata[0]=tvalue/1000+0x30;
disdata[1]=tvalue%1000/100+0x30;
disdata[2]=tvalue%100/10+0x30;
disdata[3]=tvalue%10+0x30;
if(tflag==0)
flagdat=0x20;
else
flagdat=0x2d;
if(disdata[0]==0x30)
{
disdata[0]=0x20;
if(disdata[1]==0x30)
{
disdata[1]=0x20;
}
}
wr_com(0xc0);
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()
{
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--;
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;
}
}
}
}
void display_transaction()
{
if(Switch==0)
{
if(mode==0)
{
init_play(0);
read_temp(0);
ds1820disp();
}
if(mode==1)
{
init_play(1);
tvalue=H_temp*10;
if(H_temp<0)
tflag=1;
else
tflag=0;
ds1820disp();
}
if(mode==2)
{
init_play(2);
tvalue=L_temp*10;
if(L_temp<0)
tflag=1;
else
tflag=0;
ds1820disp();
}
}
else
{
if(mode2==0)
{
init_play(3);
read_temp(1);
ds1820disp();
}
if(mode2==1)
{
init_play(4);
tvalue=H_temp2*10;
if(H_temp<0)
tflag=1;
else
tflag=0;
ds1820disp();
}
if(mode2==2)
{
init_play(5);
tvalue=L_temp*10;
if(L_temp<0)
tflag=1;
else
tflag=0;
ds1820disp();
}
}
}
void beep(void)
{
int i;
for(i=0;i<100;i++)
{
BEEP=0;
delay1ms(4);
BEEP=1;
delay1ms(4);
}
}
void cheek_alarm(void)
{
read_temp(0);
if(tflag==0)
{
if(((tvalue/10.0)>=H_temp)||((tvalue/10.0)<=L_temp))
{
delay1ms(10);
read_temp(0);
if(tflag==0)
{
if(((tvalue/10.0)>=H_temp)||((tvalue/10.0)<=L_temp))
beep();
}
}
}
if(tflag==1)
{
tvalue=-tvalue;
if(((tvalue/10.0)>=H_temp)||((tvalue/10.0)<=L_temp))
{
delay1ms(10);
read_temp(0);
if(tflag==1)
{
tvalue=-tvalue;
if(((tvalue/10.0)>=H_temp)||((tvalue/10.0)<=L_temp))
beep();
}
}
}
read_temp(1);
if(tflag==0)
{
if(((tvalue/10.0)>=H_temp2)||((tvalue/10.0)<=L_temp2))
{
delay1ms(10);
read_temp(1);
if(tflag==0)
{
if(((tvalue/10.0)>=H_temp2)||((tvalue/10.0)<=L_temp2))
{
beep();
}
}
}
}
if(tflag==1)
{
tvalue=-tvalue;
if(((tvalue/10.0)>=H_temp2)||((tvalue/10.0)<=L_temp2))
{
delay1ms(10);
read_temp(1);
if(tflag==1)
{
tvalue=-tvalue;
if(((tvalue/10.0)>=H_temp2)||((tvalue/10.0)<=L_temp2))
{
beep();
}
}
}
}
}
void main()
{
uchar Key_Back;
BEEP=0;
lcd_init();
while(1)
{
Key_Back=key_scan();
if(Key_Back)
key_action(Key_Back);
display_transaction();
}
}
keil编译错误:
Build target '目标 1'
compiling 4.c...
4.c(89): warning C280: 'case0': unreferenced label
4.c(90): warning C280: 'case1': unreferenced label
4.c(91): warning C280: 'case2': unreferenced label
4.c(92): warning C280: 'case3': unreferenced label
4.c(93): warning C280: 'case4': unreferenced label
4.c(94): warning C280: 'case5': unreferenced label
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_DISPLAY?4
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?CHEEK_ALARM?4
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?CO?4
Program Size: data=27.2 xdata=0 code=3388
creating hex file from "24"...
"24" - 0 Error(s), 9 Warning(s).
|