DS18B20温度用lcd显示(ds18b20)

您好,今天琪琪来为大家解答以上的问题。ds18b20温度用lcd显示相信很多小伙伴还不知道,现在让我们一起来看看吧!

DS18B20温度用lcd显示(ds18b20)DS18B20温度用lcd显示(ds18b20)


DS18B20温度用lcd显示(ds18b20)


1、/读取DS18B20温度,通过LCD1602显示出来行: 实时温度值第二行: 值和小值/ /头文件/#include #include #define uint unsigned int#define uchar unsigned char#define _Nop() _nop_()it DQ =P2^2; //定义DS18B20通信端口it lcd_rs_port = P3^5; /定义LCD控制端口/it lcd_rw_port = P3^6;it lcd_en_port = P3^4;#define lcd_data_port P0////////////////////////////////////////it WELA=P2^7; //数码管的位选信号void delay1 (void)//关闭数码管延时程序{int k;for (k=0; k}////////////////////////////////////// //////////////以下是LCD1602驱动程序////////////////void lcd_delay(uchar ms) /LCD1602 延时/{uchar j;while(ms--){for(j=0;j{;}}} void lcd_busy_wait() /LCD1602 忙等待/{lcd_rs_port = 0;lcd_rw_port = 1;lcd_en_port = 1;lcd_data_port = 0xff;while (lcd_data_port&0x80);lcd_en_port = 0;} void lcd_command_write(uchar command) /LCD1602 命令字写入/{lcd_busy_wait();lcd_rs_port = 0;lcd_rw_port = 0;lcd_en_port = 0;lcd_data_port = command;lcd_en_port = 1;lcd_en_port = 0;} void lcd__reset() /LCD1602 初始化/{lcd_delay(20);lcd_command_write(0x38);lcd_delay(100);lcd_command_write(0x38);lcd_delay(50);lcd_command_write(0x38);lcd_delay(10);lcd_command_write(0x08);lcd_command_write(0x01);lcd_command_write(0x06);lcd_command_write(0x0c);} void lcd_char_write(uchar x_,y_,lcd_dat) /LCD1602 字符写入/{x_ &= 0x0f; / X位置范围 0~15 /y_ &= 0x01; / Y位置范围 0~ 1 /if(y_==1) x_ += 0x40;x_ += 0x80;lcd_command_write(x_);lcd_busy_wait();lcd_rs_port = 1;lcd_rw_port = 0;lcd_en_port = 0;lcd_data_port = lcd_dat;lcd_en_port = 1;lcd_en_port = 0;} void lcd_bad_check() /LCD1602 坏点检查/{char i,j;for(i=0;ifor(j=0;jlcd_char_write(j,i,0xff);}}lcd_delay(200);lcd_delay(200);lcd_delay(200);lcd_delay(100);lcd_delay(200);lcd_command_write(0x01); / clear lcd disp /}//////////////////以上是LCD1602驱动程序//////////////// //////////////////以下是DS18B20驱动程序//////////////////延时函数void delay(unsigned int i){while(i--);}//初始化函数Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //延时 大于 480usDQ = 1; //拉高总线delay(14);x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败delay(20);}//读一个字节ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ) dat|=0x80;delay(4);}return(dat);}//写一个字节WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay(5);DQ = 1;dat>>=1;}}//读取温度ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的作WriteOneChar(0x44); // 启动温度转换Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar();b=ReadOneChar();t=b;tt=t|a;tt=t0.0625; //将温度的高位与低位合并t= tt10+0.5; //对结果进行4舍5入return(t);}//////////////////以上是DS18B20驱动程序//////////////// /定义数字ascii编码/unsigned char mun_char_table[]={"0123456789abcdef"};unsigned char temp_table[] ={"Temp: . 'C"};unsigned char temp_high_low[]={"H: . L: . "}; /1MS为单位的延时程序/void delay_1ms(uchar x){uchar j;while(x--){for(j=0;j{;}}}main(){unsigned int i=0;unsigned int temp_high;unsigned int temp_low;ReadTemperature(); /读取当前温度/lcd__reset(); /LCD1602 初始化/////////////////////////////////////////////////////////////////P0=0XFF;//关掉数码管的位选信号。

2、阻止数码管受到P0口信号的影响。

3、delay();WELA=1;delay();WELA=0;////////////////////////////////////////////////////////////////lcd_bad_check(); /LCD1602 坏点检查/for (i=0;ifor (i=0;ii=ReadTemperature(); /读取当前温度/temp_high = i;temp_low = i;while(1){i=ReadTemperature(); //读取当前温度if(temp_highif(temp_low>i) temp_low=i;lcd_char_write(6,0,mun_char_table[i/100]); /把温度显示出来/lcd_char_write(7,0,mun_char_table[i%100/10]);lcd_char_write(9,0,mun_char_table[i%10]);lcd_char_write(2,1,mun_char_table[temp_high/100]); /显示温度/lcd_char_write(3,1,mun_char_table[temp_high%100/10]);lcd_char_write(5,1,mun_char_table[temp_high%10]);lcd_char_write(10,1,mun_char_table[temp_low/100]); /显示温度/lcd_char_write(11,1,mun_char_table[temp_low%100/10]);lcd_char_write(13,1,mun_char_table[temp_low%10]);delay_1ms(100);}}。

本文到这结束,希望上面文章对大家有所帮助。


版权声明:本文内容由互联网用户自发贡献。如发现本站有涉嫌抄袭侵权/违法违规的内容, 836084111@qq.com 举报,一经查实,本站将立刻删除。

随便看看