资源简介
用51单片机读取DS18B20的温度数据,并在1602上面显示,包含完整工程和proteus仿真

代码片段和文件信息
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define delay4us() {_nop_();_nop_();_nop_();_nop_();}
sbit DQ=P3^4;
uchar code df_Table[]={0112334456678899}; //温度小数位对照表
uchar CurrentT=0;//当前读取的温度整数部分
uchar Temp_Value[]={0x000x00}; //从DS18B20读取的温度值
uchar Display_Digit[11]={00000000000}; //待显示的各温度数位
bit DS18B20_IS_OK=1; //DS18B20正常标志
void DelayXus(uint x) //延时1
{
uchar i;
while(x--)
{
for(i=0;i<200;i++);
}
}
void Delay(uint x) //延时2
{
while(x--);
}
uchar Init_DS18B20() //初始化18B20
{
uchar status;
DQ=1;
Delay(8);
DQ=0;
Delay(90);
DQ=1;
Delay(8);
status=DQ;
Delay(100);
DQ=1;
return status;
}
uchar ReadOneByte() //从DS18B20读一字节数据
{
uchar idat=0;
DQ=1;
_nop_();
for(i=0;i<8;i++)
{
DQ=0;
dat>>=1;
DQ=1;
_nop_();
_nop_();
if(DQ)
dat|=0x80;
Delay(30);
DQ=1;
}
return dat;
}
void WriteOneByte(uchar dat) //从DS18B20写一字节数据
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
Delay(5);
DQ=1;
dat>>=1;
}
}
void Read_Temperature()// 从DS18B20读取温度值
{
if(Init_DS18B20()==1) //DS18B20故障
DS18B20_IS_OK=0;
else
{
WriteOneByte(0xcc); //跳过序列号命令
WriteOneByte(0x44); //启动温度转换命令
Init_DS18B20();//复位DS18B20
WriteOneByte(0xcc);//跳过序列号命令
WriteOneByte(0xbe);//读取温度寄存器
Temp_Value[0]=ReadOneByte(); //读取温度低字节
Temp_Value[1]=ReadOneByte(); //读取温度高字节
DS18B20_IS_OK=1; //DS18B20正常
}
}
void Display_Temperature()
{
uchar i;
uchar t=150ng=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;
}
Display_Digit[5]=df_Table[Temp_Value[0]&0x0f]+‘0‘; //由低四位确定小数值
CurrentT=(((Temp_Value[0]&0xf0)>>4)|((Temp_Value[1]&0x07)<<4));
if(CurrentT/100==0)
Display_Digit[1]=‘ ‘;
else
Display_Digit[1]=CurrentT/100+‘0‘;
Display_Digit[2]=(CurrentT%100)/10+‘0‘;
Display_Digit[3]=CurrentT%10+‘0‘;
Display_Digit[4]=‘.‘;
Display_Digit[6]=‘0‘;
Display_Digit[7]=‘0‘;
Display_Digit[8]=‘ ‘;
Display_Digit[9]=‘c‘;
if(ng==1)
Display_Digit[0]=‘-‘;
else
Display_Digit[0]=‘+‘;
LCD_Write_String(61Display_Digit);
LCD_Write_String(20“thermometry“);
LCD_Write_String(11“Temp“);
}
void main()
{
LCD_Init();
Read_Temperature();
Delay(50000);
Delay(50000);
while(1)
{
Read_Temperature();
if(DS18B20_IS_OK)
Display_Temperature();
DelayXus(100);
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 12522 2015-08-02 08:35 DS18B20\DS18B20
文件 2757 2015-08-02 08:35 DS18B20\DS18B20.c
文件 2508 2015-08-02 08:35 DS18B20\DS18B20.hex
文件 62 2015-08-02 08:35 DS18B20\DS18B20.lnp
文件 6001 2015-08-02 08:35 DS18B20\DS18B20.LST
文件 19143 2015-08-02 08:35 DS18B20\DS18B20.M51
文件 14055 2015-08-02 08:35 DS18B20\DS18B20.OBJ
文件 159 2015-08-13 10:28 DS18B20\DS18B20.plg
....... 57076 2015-08-13 10:58 DS18B20\DS18B20.uvopt
文件 13576 2015-07-31 22:40 DS18B20\DS18B20.uvproj
....... 56272 2015-08-12 23:11 DS18B20\DS18B20_uvopt.bak
文件 0 2015-07-31 19:14 DS18B20\DS18B20_uvproj.bak
文件 121665 2015-07-31 22:40 DS18B20\Last Loaded show.DBK
文件 3488 2014-05-08 15:35 DS18B20\lcd1602.h
文件 121681 2015-08-02 08:36 DS18B20\show.DSN
文件 1028 2015-08-13 10:58 DS18B20\show.PWI
文件 6376 2005-03-22 15:22 DS18B20\STARTUP.A51
文件 14049 2015-07-31 22:02 DS18B20\STARTUP.LST
文件 749 2015-07-31 22:02 DS18B20\STARTUP.OBJ
文件 819712 2015-07-31 21:04 DS18B20\参考资料.doc
目录 0 2015-08-13 10:58 DS18B20
----------- --------- ---------- ----- ----
1272879 21
- 上一篇:labview编写的串口调试助手
- 下一篇:sed.exe 64位
相关资源
- 程序员专用字体YaHei.Consolas.1.11b42517
- STC8951系列单片机中方指南
- 基于MCS_51单片机的工业屏柜散热方案
- 清翔电子MCS51开发板资料_新版 01_开发
- MCS_51单片机与8255A的接口设计
- Rtx51_tiny_RTOS中文版.pdf
- 51单片机PWM程序,占空比、周期可调整
- 51单片机多功能自行车测速仪
- proteus仿真 AT89C51输出各种波形
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 单片机与温度传感器DS18B20的程序设计
- 毕业论文之温度传感器DS18B20(源码
- 51单片机基于protues的几个仿真实例
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51模拟SPI读写SD卡(包括Fat和Fat32文件
- NRF24L01实现51与STM32双向通讯
- 基于c8051f020的AD转换程序及LCD显示程序
- stm32 ds18b20 温度传感器 测试通过
- 51单片机控制舵机程序
- [免费]msp430f149控制PS2键盘并用1602显示
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- vhdl与lcd1602实现的多控制电子钟
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- DS18B20分布式多点测温的Proteus仿真
- ADC0809数字电压表 LCD1602显示 汇编程序
- 单片机 DS18B20 温度控制系统
评论
共有 条评论