关于程序

2019-07-15 12:32发布

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6; //开显示的段
sbit wela=P2^7; //开显示的位
sbit beep=P3^6; //蜂鸣器
uchar i;
uchar tempL,tempH,temperature;
sbit DQ=P3^7; //温度传感器
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
void delay2(uint k)
{
uint n;
n=0;
while(n < k)
{n++;}
return;
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
Init_DS18B20(void)
{
unsigned char x=0;
DQ=1; //DQ先置高
delay2(8); //延时
DQ=0; //发送复位脉冲
delay2(85); //延时(>480ms)
DQ=1; //拉高数据线
delay2(14); //等待(15~60ms)
}
/****************************************************************************
函数功能:向DS18B20读一字节数据
入口参数:
出口参数:dat
****************************************************************************/
ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat=0;
for (i=8;i>0;i--)
{
DQ=1;
delay2(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay2(4);
}
return(dat);
}
WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay2(5);
DQ=1;
dat>>=1;
}
delay(4);
}
ReadTemperature(void)
{
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作
WriteOneChar(0x44); //启动温度转换
delay2(125); //转换需要一点时间,延时
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作
WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)
tempL=ReadOneChar(); //读出温度的低位LSB
tempH=ReadOneChar(); //读出温度的高位MSB
//温度转换,把高低位做相应的运算转化为实际温度
temperature=((tempH*256)+tempL)*0.0625;
delay2(200);
return(temperature);
}
void display(uint j)
{
dula=1;
P0=table[j/10];
dula=0;
P0=0x00;
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1;
P0=table[j%10];
dula=0;
P0=0x00;
wela=1;
P0=0xfd;
wela=0;
delay(1);
}
void main()
{
while(1)
{
i=ReadTemperature() ;
if(i==X)//X是自己设定的温度值,这里你自己设定
beep=1;
else beep=0;//如果你想设定多个温度值,可以用switch语句
display(i);
}
}
//这个程序最关键的是怎样写好温度传感器的时序程序
//主要是下面的这个程序,显示你可以改成你自己的电路的显示
/*
void delay2(uint k) //这个延时一般不要改动他的时间
{
uint n;
n=0;
while(n < k)
{n++;}
return;
}
Init_DS18B20(void)
{
unsigned char x=0;
DQ=1; //DQ先置高
delay2(8); //延时
DQ=0; //发送复位脉冲
delay2(85); //延时(>480ms)
DQ=1; //拉高数据线
delay2(14); //等待(15~60ms)
}
/****************************************************************************
函数功能:向DS18B20读一字节数据
入口参数:
出口参数:dat
****************************************************************************/
/*ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat=0;
for (i=8;i>0;i--)
{
DQ=1;
delay2(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay2(4);
}
return(dat);
}
WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay2(5);
DQ=1;
dat>>=1;
}
delay(4);
}
ReadTemperature(void)
{
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作
WriteOneChar(0x44); //启动温度转换
delay2(125); //转换需要一点时间,延时
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作
WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)
tempL=ReadOneChar(); //读出温度的低位LSB
tempH=ReadOneChar(); //读出温度的高位MSB
//温度转换,把高低位做相应的运算转化为实际温度
temperature=((tempH*256)+tempL)*0.0625;
delay2(200);
return(temperature);
} */
keil无法转为.hex  求大神帮忙改正一下

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
houjue
1楼-- · 2019-07-15 13:42
 精彩回答 2  元偷偷看……
805570
2楼-- · 2019-07-15 19:25
好像没有数据存储送显示,这个程序网上很多,下一个用多好。
fan497172861
3楼-- · 2019-07-15 20:33
你这是不能编译吗  ?能编译就能生成 .hex文件啊
戁覾
4楼-- · 2019-07-15 22:35
编译有错误吗?没有的话就是工程设置里没点上生成。hex
houjue
5楼-- · 2019-07-16 01:05
这个问题难道还没解决吗?

一周热门 更多>