写完之后发现数码管不亮 希望大佬们帮我看一看
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P2^7;
sbit LED0=P2^0;
sbit LED1=P2^1;
sbit LED2=P2^2;
sbit LED3=P2^3;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //7seg-mpx4-cc
uchar displaydata[]={0,0,0,0};
uchar time;
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<124;j++);
}
/*
ds18b20 chushihua
*/
uchar initds18b20()
{
bit flag;
DQ=1;
for(time=0;time<2;time++);
DQ=0;
for(time=0;time<200;time++);
DQ=1;
for(time=0;time<10;time++);
flag=DQ;
for(time=0;time<100;time++);
DQ=1;
return flag;
}
/*
read ds18b20
*/
uchar ds18b20read()
{
uchar i,dat;
DQ=1;
for(time=0;time<2;time++);
for(i=0;i<8;i++)
{
DQ=0;
_nop_();
_nop_();
DQ=1;
dat>>=1;
for(time=0;time<1;time++);
if(DQ==1)
dat|=0x80;
else
dat|=0x00;
for(time=0;time<10;time++);
}
return dat;
}
/*
write ds18b20
*/
void ds18b20write(uchar dat)
{
uchar i;
DQ=1;
for(time=0;time<2;time++);
for(i=0;i<8;i++)
{
DQ=0;
_nop_();
_nop_();
DQ=dat&0x01;
for(time=0;time<20;time++);
DQ=1;
for(time=0;time<1;time++);
dat>>=1;
}
}
/*
read temp ds18b20
*/
int ds18b20readtemp()
{
uchar a,b;
int temp=0;
while(initds18b20());
ds18b20write(0xcc);
ds18b20write(0x44);
while(initds18b20());
ds18b20write(0xcc);
ds18b20write(0xbe);
a=ds18b20read();
b=ds18b20read();
temp=b;
temp<<=8;
temp |=a;
return temp;
}
/*
xianshi
*/
void datapros(int temp)
{
float tp;
if(temp<0)
{
displaydata[0]=0x40;
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*10+0.5;
}
else
{
displaydata[0]=0x00;
tp=temp;
temp=tp*0.0625*10+0.5;
}
displaydata[1]=temp/100;
displaydata[2]=temp%100/10;
displaydata[3]=temp%10;
if(displaydata[0]==0x40)
{
LED0=0;
}
else
{
LED0=1;
}
P0=0x40;
delay(3);
LED0=1;
if(table[displaydata[1]==0x3f])
{
LED1=1;
}
else
{
LED1=0;
}
P0=table[displaydata[1]];
delay(3);
LED1=1;
LED2=0;
P0=table[displaydata[2]]+0x80;
delay(3);
LED2=1;
LED3=0;
P0=table[displaydata[3]];
delay(3);
LED3=1;
}
/*
main
*/
void main()
{
while(1)
{
datapros(ds18b20readtemp());
}
}
|