微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > DS18B20 求大虾指点

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();
}

基于单片机的温湿度采集系统

哪里看不太懂也没说清楚

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top