找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1828|回复: 1
收起左侧

logic contention detected on net #00000 Proteus仿真出现2种错误

[复制链接]
ID:777633 发表于 2020-6-13 15:53 | 显示全部楼层 |阅读模式
51hei图片_20200613154937.png 3.png
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;
}
}

回复

使用道具 举报

ID:777633 发表于 2020-6-13 15:53 | 显示全部楼层
程序检查过了,没有错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表