资源简介
51单片机每隔1s读取一次DS18B20温度传感器数据,将温度数据不断存储到SD存储卡中,同时有串口不断输出温度数据。带proteus仿真。
代码片段和文件信息
#include
#include
#include
//#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[12]={00000000000‘\r‘}; //待显示的各温度数位
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() //将08B20温度数据读取到Display_Digit[]里面
{
//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 temp_18b20() //实现温度的读
{
uchar i=1;
//LCD_Init();
Read_Temperature();
Delay(5000);
Delay(5000);
while(i--)
{
Read_Temperature();
if(DS18B20_IS_OK)
Display_Temperature();
DelayXus(100);
}
}
main()
{
unsigned long addr_sd=0x00000000; //SD卡地址
UART(); //单片机串口初始化
SdInit(); //初始化SD卡
while(1)
{
temp_18b20(); //读出温度数据
SdWriteBlock(Display_Digitaddr_sd16); //将温度数据写入addr_sd指向内存
Sen_Stri
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 422850 2015-08-13 13:25 截图02_副本.jpg
文件 802 2015-08-13 11:38 temp_show_p\chuankou.h
文件 2787 2015-08-13 10:45 temp_show_p\DS18B20.h
文件 117326 2015-08-13 10:58 temp_show_p\Last Loaded show.DBK
文件 3305 2015-08-13 13:16 temp_show_p\main.c
文件 7126 2015-08-13 13:16 temp_show_p\main.LST
文件 18373 2015-08-13 13:16 temp_show_p\main.OBJ
文件 5051 2015-08-13 12:46 temp_show_p\sd.h
文件 128280 2015-08-13 13:18 temp_show_p\SD_card.mmc
文件 123286 2015-08-13 13:06 temp_show_p\show.DSN
文件 1107 2015-08-13 13:28 temp_show_p\show.PWI
文件 6376 2005-03-22 15:22 temp_show_p\STARTUP.A51
文件 14049 2015-08-13 13:05 temp_show_p\STARTUP.LST
文件 749 2015-08-13 13:05 temp_show_p\STARTUP.OBJ
文件 15889 2015-08-13 13:16 temp_show_p\temp_s
文件 3696 2015-08-13 13:16 temp_show_p\temp_s.hex
文件 58 2015-08-13 13:16 temp_show_p\temp_s.lnp
文件 23280 2015-08-13 13:16 temp_show_p\temp_s.M51
文件 469 2015-08-13 13:28 temp_show_p\temp_s.plg
....... 57605 2015-08-13 13:28 temp_show_p\temp_s.uvopt
....... 13401 2015-08-12 23:15 temp_show_p\temp_s.uvproj
....... 57601 2015-08-13 13:06 temp_show_p\temp_s_uvopt.bak
....... 0 2015-08-12 22:31 temp_show_p\temp_s_uvproj.bak
文件 187540 2015-08-13 13:22 截图01_副本.jpg
目录 0 2015-08-13 13:28 temp_show_p
----------- --------- ---------- ----- ----
1211006 25
- 上一篇:分治法快速排序算法QuickSort C
- 下一篇:GUI银行管理系统
相关资源
- 【单片机】51单片机数码管显示万年历
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- DS18B20分布式多点测温的Proteus仿真
- 单片机 DS18B20 温度控制系统
- 课程设计蔬菜大棚自动控制系统,包
- 基于AT89C51的数据采集系统设计新方法
- C51单片机汇编指令查询、学习工具集
- 基于8051单片机的红外接收程序
- 基于89c51的数字钟
- 8251 全双工异步通信
- 8051F040SMBUS多机通信
- 基于单片机交通灯设计
- 51单片机频率计(很简单)
- modbus51_c代码
- 51多机通信(内附Proteus及.hex文件)
- AT89S ISP下载编程软件(串口)
- 基于51单片机的智能温控器
- 基于51单片机的16*16点阵动态显示
- 基于51单片机的模数转换与数模转换
- 解封SHOW 51VV 9158 封机器码类游戏机
- radmin3.51完美破解版(支持win10)
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
- 8051单片机教程第二十七课:单片机几
- 8051单片机教程第二十六课:矩阵式键
- 适用于STC单片机和51单片机的SX1262驱动
- 基于89C51计算机锁定加密键盘设计
- 在s = 510 GeV的p + p碰撞中以正向速度测
- 爱普生(EPSON)L3151 3153 3156 3157 3158不
- 基于51单片机的计算器(C51编写,有
评论
共有 条评论