视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ds18b20温度传感C语言程序、LCD1602显示
2025-10-02 19:22:00 责编:小OO
文档
程序主体

#include

#define uchar unsigned char 

#define uint unsigned int

extern TemperatuerResult();                                       //声明引用外部函数

extern unsigned int  idata Temperature;    

sbit lcd_e=P2^7;

sbit lcd_rs=P2^6;

sbit lcd_rw=P2^5;

void delay_ms(uchar i)                 //延时毫秒

{

    int j;

for(i;i>0;i--)

     for(j=110;j>0;j--);    

}

bit lcd_check()                        //检测忙

{

    bit result;

    lcd_rs=0;

    lcd_rw=1;

    lcd_e=1;

    delay_ms(1);

    result=(bit)(P0&0x80);

    lcd_e=0;

    return (result);

}

void write_cmd(uchar cmd)              //向lcd写命令

{

    while(lcd_check());

    lcd_rs=0;

    delay_ms(1);

    lcd_rw=0;

    delay_ms(1);

    P0=cmd;

    delay_ms(1);

    lcd_e=1;

    delay_ms(1);

    lcd_e=0;    

}

void write_data(uchar shuju)              //向lcd写数据

{

    while(lcd_check());

    lcd_rs=1;

    delay_ms(1);

    lcd_rw=0;

    delay_ms(1);

    P0=shuju;

    delay_ms(1);

    lcd_e=1;

    delay_ms(1);

    lcd_e=0;    

}

void lcd_init()                           //初始化

{

    delay_ms(15);

     write_cmd(0x38);

     delay_ms(5);

     write_cmd(0x0c);

     delay_ms(5);

     write_cmd(0x06);

     delay_ms(5);

     write_cmd(0x01);

}

void display(uchar i,uchar j,uchar shuju)    //在指定位置显示

{

    write_cmd(0x80+j*0x40+i);

    delay_ms(1);

    write_data(shuju);

    delay_ms(1);

}

void main()

{

    lcd_init();

    while(1)

    {

        TemperatuerResult();

        display(0,0,'T');

        display(1,0,'e');

        display(2,0,'m');

        display(3,0,'p');

        display(4,0,'e');

        display(5,0,'r');

        display(6,0,'a');

        display(7,0,'t');

        display(8,0,'u');

        display(9,0,'r');

        display(10,0,'e');

        display(11,0,' ');

        display(12,0,'i');

        display(13,0,'s');

        display(0,1,(Temperature/16%10000/1000+0x30));

        display(1,1,(Temperature/16%1000/100+0x30));

        display(2,1,(Temperature/16%100/10+0x30));

        display(3,1,(Temperature/16%10+0x30));

        display(4,1,'.');

        display(5,1,(Temperature*10/16%10+0x30));

        display(6,1,'`');

        display(7,1,'C');

    }

}

温度采集子程序

 /*************************此部分为18B20的驱动程序*************************************/

#include

#include

sbit    D18B20=P3^7;

#define  NOP()   _nop_()   /* 定义空指令 */

#define  _Nop()  _nop_()   /*定义空指令*/

bit  flag;

unsigned int  idata Temperature;

unsigned char idata temp_buff[9]; //存储读取的字节,read scratchpad为9字节,read rom ID为8字节

unsigned char idata id_buff[8];

unsigned char idata *p,TIM;

unsigned char idata crc_data;

//************************************************************

void TempDelay (unsigned char idata us)

{

    while(us--);

}

//************************************************************

void Init18b20 (void)

{

    D18B20=1;

    _nop_();

    D18B20=0;

    TempDelay(80);   //delay 530 uS//80

    _nop_();

    D18B20=1;

    TempDelay(14);   //delay 100 uS//14

    _nop_();

    _nop_();

    _nop_();

    

    if(D18B20==0)

        flag = 1;   //detect 1820 success!

    else

        flag = 0;    //detect 1820 fail!

    TempDelay(20);       //20

    _nop_();

    _nop_();

    D18B20 = 1;

}

//************************************************************

void WriteByte (unsigned char idata wr)  //单字节写入

{

    unsigned char idata i;

for (i=0;i<8;i++)

    {

        D18B20 = 0;

        _nop_();

        D18B20=wr&0x01;

        TempDelay(3);   //delay 45 uS //5

        _nop_();

        _nop_();

        D18B20=1;

     wr >>= 1;

    }

}

//************************************************************

unsigned char ReadByte (void)     //读取单字节

{

    unsigned char idata i,u=0;

for(i=0;i<8;i++)

    {

        D18B20 = 0;

     u >>= 1;

        D18B20 = 1;

        if(D18B20==1)

        u |= 0x80;

        TempDelay (2);

        _nop_();

    }

    return(u);

}

//************************************************************

void read_bytes (unsigned char j)

{

     unsigned char idata i;

for(i=0;i     {

          *p = ReadByte();

          p++;

     }

}

//************************************************************

void TemperatuerResult(void)

{

    Init18b20 ();

    WriteByte(0xcc);   //skip rom

    WriteByte(0x44);   //Temperature convert

    Init18b20 ();

    WriteByte(0xcc);   //skip rom

    WriteByte(0xbe);   //read Temperature

    p = temp_buff;

    read_bytes (2);

    Temperature = temp_buff[1]*0x100 + temp_buff[0];

    TempDelay(1);

}下载本文

显示全文
专题