先貼代碼:
#include <reg52.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P2^3;
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
uchar fcode[8];
uint tvalue;
uchar tflag;
uchar code str1[]={" "};
uchar code str2[]={" "};
void delay1ms(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<110;j++);
}
}
void wr_com(uchar com)
{
delay1ms(1);
RS=0;
RW=0;
EN=0;
P1=com;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void wr_dat(uchar dat)
{
delay1ms(1);
RS=1;
RW=0;
EN=0;
P1=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()
{
lcd_init();
wr_com(0x80);
display(str1);
wr_com(0x80);
display(str2);
}
void uart_init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
void delay(uint i)
{
while(i--);
}
void rst()
{
uchar x=0;
DQ=1;
delay(4);
DQ=0;
delay(100);
DQ=1;
delay(40);
}
uchar read()
{
uchar i=0;
uchar dat=0;
for(i=8;i>0;i--)
{
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay(10);
}
return dat;
}
void write(uchar wdata)
{
uchar i=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=wdata&0x10;
delay(10);
DQ=1;
wdata>>=1;
}
}
uint read_temp()
{
uchar a,b;
rst();
write(0xcc);
write(0x44);
rst();
write(0xcc);
write(0xbe);
a=read();
b=read();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0xfff)
tflag=0;
else
{
tvalue=~tvalue+1;
tflag=1;
}
tvalue=tvalue*(0.0625);
return tvalue;
}
void discode()
{
uchar i,temp;
rst();
write(0x33);
for(i=0;i<8;i++)
{
fcode[i]=read();
}
wr_com(0x80+0x40);
for(i=0;i<8;i++)
{
temp=fcode[i]>>4;
if(temp<10)
wr_dat(temp+0x30);
else
wr_dat(temp+0x37);
temp=fcode[i]&0x0f;
if(temp<10)
wr_dat(temp+0x30);
else
wr_dat(temp+0x37);
}
}
void main()
{
init_play();
discode();
delay1ms(100);
while(1);
}
程序運行,輸出的全部為FFFFFFFFFFFFF;之前用串口輸出,里面也是這種情況,換了個18B20,還是一樣,求指導下
|