DS18B20 求大虾指点
时间:10-02
整理:3721RD
点击:
正在学DS18B20求大虾指点
,看不太懂,求指点
/*****************************************************************/
/* 工程: DS18B20测量温度系统 */
/* 模块:DS18B20、LCD1602 */
/* 日期: 2012.12 */
/*****************************************************************/
#include <reg52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit com=P2^0;
typedef unsigned char BYTE;
unsigned long LedOut[7];
BYTE code dis1[] = {"Wen du:"},dis2[]={"-"}; //显示用数组
BYTE code dis3[] = {"hello ni hao"};
extern uint Temperature; // 声明引用外部变量
extern bit flag,flag_temp;
extern TemperatureResult(); //声明引用外部函数
extern LCD_ini();
extern Write_LCD(uchar cmd,uchar i);
extern uchar count;
void sys_init(void);
void jbxs(void);
void xswd(void);
void xs(void);
void xianshi(void);
void delay();
/*****************************************************************/
/* 主函数 */
/*****************************************************************/
void main()
{
sys_init();
xs();
while(1)
{
TemperatureResult();
xianshi(); //显示函数
if(Temperature%1000<=400)
com=0;
if(Temperature%1000>=450)
com=1;
}
}
/*****************************************************************/
/*系统初始化 */
/*4位总线双行显示5*7字符,控制整体显示开关,光标右移 */
/*****************************************************************/
void sys_init(void)
{
P0=0; //1602数据清空
LCD_ini(); //lcd初始化
}
/*****************************************************************/
/*基本显示 */
/*从第一行第一列开始并显示温度 */
/*****************************************************************/
void xs(void)
{
unsigned char i,j;
Write_LCD(0x80,0); //0x80 从第一行第一列显示
i = 0;
while(dis3[ i ] != '\0')
{
Write_LCD(dis3[ i ],1); //显示hello ni hao
i++;
}
Write_LCD(0xc0,0); //0xc0 从第二行第一列显示
j = 0;
while(dis1[ j ] != '\0')
{
Write_LCD(dis1[ j ],1); //显示wen du
j++;
}
}
/*****************************************************************/
/* 以下将读18b20的数据送到LCD显示 */
/* 数据显示 */
/*****************************************************************/
void xswd(void)
{
unsigned char i;
if(flag_temp) //flag_temp=1时表示温度为负数否则为正数
{
Write_LCD(0xc7,0); //0xc7 从第2行第8列显示
Write_LCD(dis2[0],1); //显示负号,1是数据0是命令
}
else //flag_temp=0要把1602上已经显示的负号清掉
{
Write_LCD(0xc7,0);
Write_LCD(0x20,1); //0x20是显示一个空字符
}
LedOut[0]=Temperature%10000/1000+0x30;
LedOut[1]=Temperature%1000/100+0x30; //十位 0x30因为1602的数字是从30开始存的
LedOut[2]=Temperature%100/10+0x30; //个位
LedOut[3]=0x2e; //小数点
LedOut[4]=Temperature%10+0x30; //十分位数
LedOut[5]=0xdf; //温度号
LedOut[6]=0x43; //c
Write_LCD(0xc8,0); // 从第2行第9列显示
for(i=0;i<=6;i++)
Write_LCD(LedOut[i],1); //显示温度数值和单位
}
/*****************************************************************/
/*综合显示 */
/*****************************************************************/
void xianshi(void)
{
xs();
xswd();
}
,看不太懂,求指点
/*****************************************************************/
/* 工程: DS18B20测量温度系统 */
/* 模块:DS18B20、LCD1602 */
/* 日期: 2012.12 */
/*****************************************************************/
#include <reg52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit com=P2^0;
typedef unsigned char BYTE;
unsigned long LedOut[7];
BYTE code dis1[] = {"Wen du:"},dis2[]={"-"}; //显示用数组
BYTE code dis3[] = {"hello ni hao"};
extern uint Temperature; // 声明引用外部变量
extern bit flag,flag_temp;
extern TemperatureResult(); //声明引用外部函数
extern LCD_ini();
extern Write_LCD(uchar cmd,uchar i);
extern uchar count;
void sys_init(void);
void jbxs(void);
void xswd(void);
void xs(void);
void xianshi(void);
void delay();
/*****************************************************************/
/* 主函数 */
/*****************************************************************/
void main()
{
sys_init();
xs();
while(1)
{
TemperatureResult();
xianshi(); //显示函数
if(Temperature%1000<=400)
com=0;
if(Temperature%1000>=450)
com=1;
}
}
/*****************************************************************/
/*系统初始化 */
/*4位总线双行显示5*7字符,控制整体显示开关,光标右移 */
/*****************************************************************/
void sys_init(void)
{
P0=0; //1602数据清空
LCD_ini(); //lcd初始化
}
/*****************************************************************/
/*基本显示 */
/*从第一行第一列开始并显示温度 */
/*****************************************************************/
void xs(void)
{
unsigned char i,j;
Write_LCD(0x80,0); //0x80 从第一行第一列显示
i = 0;
while(dis3[ i ] != '\0')
{
Write_LCD(dis3[ i ],1); //显示hello ni hao
i++;
}
Write_LCD(0xc0,0); //0xc0 从第二行第一列显示
j = 0;
while(dis1[ j ] != '\0')
{
Write_LCD(dis1[ j ],1); //显示wen du
j++;
}
}
/*****************************************************************/
/* 以下将读18b20的数据送到LCD显示 */
/* 数据显示 */
/*****************************************************************/
void xswd(void)
{
unsigned char i;
if(flag_temp) //flag_temp=1时表示温度为负数否则为正数
{
Write_LCD(0xc7,0); //0xc7 从第2行第8列显示
Write_LCD(dis2[0],1); //显示负号,1是数据0是命令
}
else //flag_temp=0要把1602上已经显示的负号清掉
{
Write_LCD(0xc7,0);
Write_LCD(0x20,1); //0x20是显示一个空字符
}
LedOut[0]=Temperature%10000/1000+0x30;
LedOut[1]=Temperature%1000/100+0x30; //十位 0x30因为1602的数字是从30开始存的
LedOut[2]=Temperature%100/10+0x30; //个位
LedOut[3]=0x2e; //小数点
LedOut[4]=Temperature%10+0x30; //十分位数
LedOut[5]=0xdf; //温度号
LedOut[6]=0x43; //c
Write_LCD(0xc8,0); // 从第2行第9列显示
for(i=0;i<=6;i++)
Write_LCD(LedOut[i],1); //显示温度数值和单位
}
/*****************************************************************/
/*综合显示 */
/*****************************************************************/
void xianshi(void)
{
xs();
xswd();
}
基于单片机的温湿度采集系统
哪里看不太懂也没说清楚