
我在KEIL中编写的程序一直提示有语法错误,但是我感觉没语法错误啊,求大神帮忙看看!!!感激不尽!
#include<reg51.h>#include<temp.h>sbitDQ=P3^7;sbitSA=P2^2;sbitSB=P2^3;sbitSC=P2^4;unsi...
#include <reg51.h>
#include <temp.h>
sbit DQ = P3^7;
sbit SA = P2^2;
sbit SB = P2^3;
sbit SC = P2^4;
unsigned int Code[10] = {0x003F,0x0006,0x005B,0x004F,0x0066, 0x006D,0x007D,0x0007,0x007F,0x006F};//共阴极接法
void delay10ms(unsigned int t)
{
unsigned int i,j;
for(i = t;i>0;i--)
for(j = 245;j>0;j--);
}
unsigned int InitDs18b20()
{
unsigned int i;
DQ = 1;
i = 140;//延时尽可能短 延时2US
DQ = 0;
while(i)//延时至少480us 560us
{
i--;
}
DQ = 1;
i = 15;
while(i) //拉高总线 等待60us
{
i--;
}
if(DQ == 0)
return 1;
else
return 0;
}
void WriteOneByte(unsigned char data) //写一个字节
{
unsigned char bit;
unsigned int i;
unsigned int j = 0;
for(i = 0;i<8;i++)
{
bit = data &0x01;
data = data>>1;
DQ = 1;
j++;//延时2US
DQ = 0;
j++;//延时2us
if(bit)//写1
{
DQ = 1;
j = 120;
while(j)//延时30us
{
j--;
}
}
else
{
DQ = 0;
j = 120;
while(j)//延时30us
{
j--;
}
}
DQ = 1;//拉高总线
j = 120;
while(j)
{
j--;
}
}
}
unsigned char ReadOneByte() //读取一个字节
{
unsigned int i;
unsigned int j;
unsigned char uidata;
unsigned char data;
data = 0;
j = 0;
for(i = 0;i<8;i++)
{
DQ = 0;
j++;//延时2us
DQ = 1;//释放总线
j = 1;
while(j) //延时5us等待数据稳定
{
j--;
}
uidata = DQ;
data = data | (uidata<<i);
j = 12;
while(j)//等待48us后读取下一位
{
j--;
}
}
return data;
}
void WriteChangeTemp()
{
InitDs18b20();
WriteOneByte(0xcc);//跳过读ROM操作
WriteOneByte(0x44);//开始温度转换
}
unsigned int GetTempture()
{
unsigned char b1,b2;
unsigned int temp;
WriteChangeTemp();//启动温度转化
delay10ms(10);//延时等待100ms
InitDs18b20();
WriteOneByte(0xbe);//读取温度命令
b1 = ReadOneByte();
b2 = ReadOneByte();
temp = b2;
temp = (temp<<8) | b1;
return temp;
}
void Display(unsigned int temp)
{
unsigned int TLow,THigh;//温度的低位和高位
unsigned int i = 1000;
TLow = temp%10;
THigh = temp/10;
while(i--)
{
SA= 0,SB = 0,SC = 0;
P0 = Code[THigh];
delay10ms(1);
SA = 1,SB = 0,SC = 0;
P0 = Code[TLow];
delay10ms(1);
}
这是上面的提示信息 展开
#include <temp.h>
sbit DQ = P3^7;
sbit SA = P2^2;
sbit SB = P2^3;
sbit SC = P2^4;
unsigned int Code[10] = {0x003F,0x0006,0x005B,0x004F,0x0066, 0x006D,0x007D,0x0007,0x007F,0x006F};//共阴极接法
void delay10ms(unsigned int t)
{
unsigned int i,j;
for(i = t;i>0;i--)
for(j = 245;j>0;j--);
}
unsigned int InitDs18b20()
{
unsigned int i;
DQ = 1;
i = 140;//延时尽可能短 延时2US
DQ = 0;
while(i)//延时至少480us 560us
{
i--;
}
DQ = 1;
i = 15;
while(i) //拉高总线 等待60us
{
i--;
}
if(DQ == 0)
return 1;
else
return 0;
}
void WriteOneByte(unsigned char data) //写一个字节
{
unsigned char bit;
unsigned int i;
unsigned int j = 0;
for(i = 0;i<8;i++)
{
bit = data &0x01;
data = data>>1;
DQ = 1;
j++;//延时2US
DQ = 0;
j++;//延时2us
if(bit)//写1
{
DQ = 1;
j = 120;
while(j)//延时30us
{
j--;
}
}
else
{
DQ = 0;
j = 120;
while(j)//延时30us
{
j--;
}
}
DQ = 1;//拉高总线
j = 120;
while(j)
{
j--;
}
}
}
unsigned char ReadOneByte() //读取一个字节
{
unsigned int i;
unsigned int j;
unsigned char uidata;
unsigned char data;
data = 0;
j = 0;
for(i = 0;i<8;i++)
{
DQ = 0;
j++;//延时2us
DQ = 1;//释放总线
j = 1;
while(j) //延时5us等待数据稳定
{
j--;
}
uidata = DQ;
data = data | (uidata<<i);
j = 12;
while(j)//等待48us后读取下一位
{
j--;
}
}
return data;
}
void WriteChangeTemp()
{
InitDs18b20();
WriteOneByte(0xcc);//跳过读ROM操作
WriteOneByte(0x44);//开始温度转换
}
unsigned int GetTempture()
{
unsigned char b1,b2;
unsigned int temp;
WriteChangeTemp();//启动温度转化
delay10ms(10);//延时等待100ms
InitDs18b20();
WriteOneByte(0xbe);//读取温度命令
b1 = ReadOneByte();
b2 = ReadOneByte();
temp = b2;
temp = (temp<<8) | b1;
return temp;
}
void Display(unsigned int temp)
{
unsigned int TLow,THigh;//温度的低位和高位
unsigned int i = 1000;
TLow = temp%10;
THigh = temp/10;
while(i--)
{
SA= 0,SB = 0,SC = 0;
P0 = Code[THigh];
delay10ms(1);
SA = 1,SB = 0,SC = 0;
P0 = Code[TLow];
delay10ms(1);
}
这是上面的提示信息 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询