×
单片机 > 单片机程序设计 > 详情

51单片机控制八个DS18B20温度传感器显示

发布时间:2020-08-26 发布时间:
|

 


单片机源程序如下:

#include

#include


#define                DATA        P1      //1602驱动端口

//ROM操作命令

#define                 READ_ROM                       0x33                    //读ROM 

#define                 SKIP_ROM                       0xCC                    //跳过ROM 

#define                 MATCH_ROM               0x55                    //匹配ROM 

#define                 SEARCH_ROM              0xF0                    //搜索ROM 

#define                 ALARM_SEARCH            0xEC                    //告警搜索


//存储器操作命令

#define                 ANEW_MOVE                     0xB8                    //重新调出E^2数据

#define                 READ_POWER              0xB4                    //读电源

#define                 TEMP_SWITCH             0x44                    //启动温度变换 

#define                 READ_MEMORY             0xBE                    //读暂存存储器

#define                 COPY_MEMORY             0x48                    //复制暂存存储器

#define                 WRITE_MEMORY            0x4E                    //写暂存存储器


//数据存储结构

typedef struct tagTempData

{

        unsigned char                                         btThird;                                                        //百位数据                                        

        unsigned char                                         btSecond;                                                        //十位数据

        unsigned char                                         btFirst;                                                        //个位数据

        unsigned char                                         btDecimal;                                                        //小数点后一位数据

        unsigned char                                        btNegative;                                                        //是否为负数                

}TEMPDATA;

TEMPDATA m_TempData;



//引脚定义

sbit                                                         DQ = P2^7;                                                        //数据线端口

sbit                 RS=                P2^0;

sbit                 RW=                P2^1;

sbit                 E=                P2^2;



//DS18B20序列号,通过调用GetROMSequence()函数在P1口读出(读8次)

const unsigned char code ROMData1[8] = {0x28, 0x33, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xD7};        //U1

const unsigned char code ROMData2[8] = {0x28, 0x30, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x8E};        //U2

const unsigned char code ROMData3[8] = {0x28, 0x31, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xB9};        //U3

const unsigned char code ROMData4[8] = {0x28, 0x32, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xE0};        //U4

const unsigned char code ROMData5[8] = {0x28, 0x34, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x52};        //U5

const unsigned char code ROMData6[8] = {0x28, 0x35, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x65};        //U6

const unsigned char code ROMData7[8] = {0x28, 0x36, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x3C};        //U7

const unsigned char code ROMData8[8] = {0x28, 0x37, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x0B};        //U8


//判断忙指令

void Busy()

{

        DATA = 0xff;

        RS = 0;

        RW = 1;

           while(DATA & 0x80)

           {

                E = 0;

                   E = 1;

           }

           E = 0;

}


//写指令程序

void WriteCommand(unsigned char btCommand)

{

        Busy();

        RS = 0;

        RW = 0;

        E = 1;

        DATA = btCommand;

        E = 0;

}


//写数据程序

void WriteData(unsigned char btData)

{

        Busy();

        RS = 1;

        RW = 0;

        E = 1;

        DATA = btData;

        E = 0;

}


//清屏显示

void Clear()

{

        WriteCommand(1);

}


//初始化

void Init()

{

        WriteCommand(0x0c);        //开显示,无光标显示

        WriteCommand(0x06);        //文字不动,光标自动右移

        WriteCommand(0x38);        //设置显示模式:8位2行5x7点阵

}


//显示单个字符

void DisplayOne(bit bRow, unsigned char btColumn, unsigned char btData, bit bIsNumber)

{

        if (bRow)                 WriteCommand(0xc0 + btColumn);

        else                      WriteCommand(0x80 + btColumn);


        if (bIsNumber)         WriteData(btData + 0x30);

        else                   WriteData(btData);

}


//显示字符串函数

void DisplayString(bit bRow, unsigned char btColumn, unsigned char *pData)

{

        while (*pData != '')

           {

                   if (bRow) WriteCommand(0xc0 + btColumn);        //显示在第1行

                   else            WriteCommand(0x80 + btColumn);        //显示在第0行

                WriteData(*(pData++));                                                //要显示的数据

btColumn++;


关键字:51单片机控制  DS18B20  温度传感器 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法