logic contention detected on net #00000
单片机源程序如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//????????????
sbit S1=P2^0; //??????????
sbit S2=P2^1; //??
sbit S3=P2^2; //??
//
#define LCDDATA P1
sbit rs=P3^0;
sbit rw=P3^1;
sbit e=P3^2;
sbit DQ1=P2^3; //??????
sbit LED1=P2^6; //?????????
sbit BUZ=P2^7; //??????
uchar DQ1_SET[2]; //DQ1?????????? DQ1_SET[0]???? DQ1_SET[1]?????
uchar Temp; //??????
uchar count; //?????????
uchar mode; //mode=1 ??????? mode=2???????? mode=3????????
uchar code table[]="Temper";
//DS18B20
uchar ng;
uchar code df_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9}; //???С????????
uchar CurrentT=0; //?????????????????
uchar Temp_Value[]={0x00,0x00}; //??DS18B20??????
uchar Display_Digit[]={0,0,0,0,0,0,0,0};//?????????λ??
bit DS18B20_IS_OK=1; //??????????
//???????
void delay_ms(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++);
}
void delay(uint x)
{
while(--x);
}
void delayms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
void write_com(uchar com) //LCD???
{
rs=0;
e=0;
LCDDATA=com;
delayms(1);
e=1;
delay(2);
e=0;
}
void write_date(uchar date) //LCD????
{
rs=1;
e=0;
LCDDATA=date;
delayms(1);
e=1;
delayms(2);
e=0;
}
void init_lcd (void) //LCD?????????????????
{
uchar num;
rw=0;
e=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<13;num++)
{
write_date(table[num]);
delay(10);
}
}
//DS18B20?????
uchar init_DS18B20()
{
uchar status;
DQ1=1;
delay(8);
DQ1=0;
delay(90);
DQ1=1;
delay(8);
status=DQ1;
delay(100);
DQ1=1;
return status;
}
uchar ReadOneByte() //????????
{
uchar i,dat=0;
DQ1=1;
_nop_();
for(i=0;i<8;i++)
{
DQ1=0;
dat>>=1;
DQ1=1;
_nop_();
_nop_();
if(DQ1)
dat=0x80;
delay(30);
DQ1=1;
};
return(dat);
}
void WriteOneByte(uchar dat) //д??????
{
uchar i;
for(i=0;i<8;i++)
{
DQ1=0;
DQ1=dat&0x01;
delay(5);
DQ1=1;
dat>>=1;
}
}
void Read_Temperature() //??????
{
EA=0;
if(init_DS18B20()==1)
DS18B20_IS_OK=0;
else
{
WriteOneByte(0xcc);
WriteOneByte(0x44);
init_DS18B20();
WriteOneByte(0xcc);
WriteOneByte(0xbe);
Temp_Value[0]=ReadOneByte(); //?????λ
Temp_Value[1]=ReadOneByte(); //?????λ
DS18B20_IS_OK=1;
}
EA=1;
}
void Display_Temperature() //????????
{
uchar t=150;
ng=0;
if((Temp_Value[1]&0xf8)==0xf8)
{
Temp_Value[1]=~Temp_Value[1];
Temp_Value[0]=~Temp_Value[0]+1;
if(Temp_Value[0]==0x00)
Temp_Value[1]++;
ng=1;
}
else
{
ng=0;
}
Display_Digit[0]=df_Table[Temp_Value[0]&0x0f];
CurrentT=((Temp_Value[0]&0xf0)>>4)|((Temp_Value[1]&0x07)<<4);
Display_Digit[3]=CurrentT/100; //??
Display_Digit[2]=CurrentT%100/10;//?
Display_Digit[1]=CurrentT%10; //??
Temp=CurrentT; //???????
if(ng==1) //????????????????ж?????????0
{
Temp=0;
}
}
void DIS_1602(void) //LED?????????
{
write_com(0x80+8); //???????
if(ng==0)
{
write_date(0x30+Display_Digit[3]);
}
else
{
write_date('-');
}
write_date(0x30+Display_Digit[2]);
write_date(0x30+Display_Digit[1]);
write_date('.');
write_date(0x30+Display_Digit[0]);
write_date('C');
write_com(0x80+0x40+0); //???????
write_date(' ');
}
void DIS_SET_SEG(void) //LED?????????
{
Display_Digit[7]=DQ1_SET[0]%100/10; //??????????????????????
Display_Digit[6]=DQ1_SET[0]%10;
Display_Digit[5]=DQ1_SET[1]%100/10; //??????????????????????
Display_Digit[4]=DQ1_SET[1]%10;
write_com(0x80+0x40+0); //???????
write_date('L');
write_date(' ');
write_date(0x30+Display_Digit[7]);
write_date(0x30+Display_Digit[6]);
write_date('C');
write_date(' ');
write_date(' ');
write_date(' ');
write_date('H');
write_date(' ');
write_date(0x30+Display_Digit[5]);
write_date(0x30+Display_Digit[4]);
write_date('C');
}
void S2_ADD(void) //???????
{
if(mode==2) //??????
{
DQ1_SET[0]++; //??????????????????
if(DQ1_SET[0]>90)
{
DQ1_SET[0]=90;
}
}
if(mode==3) //??????
{
DQ1_SET[1]++; //??????????????????
if(DQ1_SET[1]<90)
{
DQ1_SET[1]=90;
}
}
}
void S3_SUB(void)
{
if(mode==2) //??????
{
DQ1_SET[0]--; //??????????????????
if(DQ1_SET[0]<10)
{
DQ1_SET[0]=10;
}
}
if(mode==3) //??????
{
DQ1_SET[1]--; //??????????????????
if(DQ1_SET[1]<10)
{
DQ1_SET[1]=10;
}
}
}
void KEY_SCAN(void) //???????
{
if(S1==0)
{
delay_ms(10);
mode++;
if(mode>3) //??1??2??3???л?
{
mode=1;
}
while(!S1){;} //??????????
}
if(S2==0)
{
delay_ms(10);
S2_ADD();
while(!S2){;} //??????????
}
if(S3==0)
{
delay_ms(10);
S3_SUB();
while(!S3){;} //??????????
}
}
void init() //??????????
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; //?ж?
ET0=1;
TR0=0;
BUZ=1;
}
//??????
void main(void)
{
uchar i;
init_lcd(); //???3????
DQ1_SET[0]=10; //DQ1????10
DQ1_SET[1]=85; //DQ1????85
init(); //???????????
Read_Temperature(); //DQ1?????
delay_ms(1000);
Read_Temperature(); //??????
Read_Temperature();
if(DS18B20_IS_OK)
Display_Temperature(); //??????????
mode=1; //??????
while(1)
{
if(mode==1) //???
{
KEY_SCAN(); //???????
DIS_1602();
i++;
if(i>20)
{
Read_Temperature();
if(DS18B20_IS_OK) ////??????????
{
Display_Temperature();
}
i=0;
}
while(1) //???±???
{
if(Temp<DQ1_SET[0]) //???????
{
LED1=0;TR0=1;break;
}
else
{
LED1=1;BUZ=1;TR0=0;
}
if(Temp>DQ1_SET[1])
{
LED1=0;TR0=1;break;
}
else
{
LED1=1;BUZ=1;TR0=0;
}
break;
}
}
if(mode==2) //????????
{
KEY_SCAN(); //???????
DIS_SET_SEG(); //????????SEG??????
}
if(mode==3) //????????
{
KEY_SCAN();
DIS_SET_SEG(); //????????SEG??????
}
}
}
void timer0()interrupt 1 using 1 //??????????????
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==10)
{
count=0;
BUZ=~BUZ;
}
}
|