收藏 分享(赏)

DS18B20测温12864液晶显示.doc

上传人:j35w19 文档编号:6621384 上传时间:2019-04-18 格式:DOC 页数:7 大小:49KB
下载 相关 举报
DS18B20测温12864液晶显示.doc_第1页
第1页 / 共7页
DS18B20测温12864液晶显示.doc_第2页
第2页 / 共7页
DS18B20测温12864液晶显示.doc_第3页
第3页 / 共7页
DS18B20测温12864液晶显示.doc_第4页
第4页 / 共7页
DS18B20测温12864液晶显示.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、#include #include #define delayNOP(); _nop_();_nop_();_nop_();_nop_();typedef unsigned char uchar;typedef unsigned char uint;sbit DQ=P10;sbit rs=P00; /液晶 rs 接至 P00 口sbit rw=P01; /液晶 rw 接至 P01 口sbit lcden=P03; /液晶 lcden 接至 P03 口sbit lcdpsb=P02; /液晶 lcdpsb 接至 P02 口uchar code dis8 =“温度:“;uchar code dis

2、9 =“/C“;void delay(uint z) /延时子函数uint t1,y;for(t1=z;t10;t1-)for(y=110;y0;y-);uchar data temp_data2=0x00,0x00;uchar dispaly7,h;/*-函数声明-*/显示缓冲区/液晶函数开始void lcd_wcmd(uchar cmd); /LCD 初始化void lcd_wdat(uchar dat);/ 显示位置设定 /-void lcd_pos(uchar X,uchar Y) uchar pos;if (X=0)X=0x80;else if (X=1)X=0x90;else if

3、 (X=2)X=0x88;else if (X=3)X=0x98;pos = X+Y ; lcd_wcmd(pos); /显示地址/- / 检查 LCD 忙状态/ lcd_busy 为 1 时,忙,等待。lcd-busy 为 0 时,闲,可写指令与数据 /-bit lcd_busy() bit result;rs = 0;rw = 1;lcden = 1;delayNOP();result = (bit)(P2lcden = 0;return(result); /- / 写指令数据到 LCD / RS=L,RW=L,E=高脉冲 ,D0-D7=指令码。 /-void lcd_wcmd(uchar

4、 cmd) while(lcd_busy();rs = 0;rw = 0;lcden = 0;_nop_();_nop_(); P2 = cmd;delayNOP();lcden = 1;delayNOP();lcden = 0; void lcd_init() delay(10);lcdpsb = 1; /并口方式lcd_wcmd(0x34); /扩充指令操作delay(5);lcd_wcmd(0x30); /基本指令操作delay(5);lcd_wcmd(0x0C); /显示开,关光标delay(5);lcd_wcmd(0x01); /清除 LCD 的显示内容delay(5);/- / 写

5、显示数据到 LCD / RS=H,RW=L,E=高脉冲,D0-D7=数据。 /-void lcd_wdat(uchar dat) while(lcd_busy();rs = 1;rw = 0;lcden = 0;P2 = dat;delayNOP();lcden = 1;delayNOP();lcden = 0; /液晶函数结束/*/*以下是 DS18B20 温度传感相关函数/*/void inerDelay_us(unsigned char n)for(;n0;n-)_nop_();void delay1(uint i)for(;i0;i-); /*DS1820 复位函数*/void ds_

6、reset(void)char temp=1; while(temp) /BELL=0;while(temp)DQ=1;_nop_();_nop_();DQ=0;delay1(80);DQ=1;delay1(9);temp=DQ; delay1(64);temp=DQ; DQ=1;/*DS1820 写函数*/void write_byte(uchar value)uchar i;for(i=8;i0;i-)DQ=1;_nop_();_nop_();DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();DQ=valuedelay1(9);value=1; DQ

7、=1;delay1(1);/*DS1820 读函数*/uchar read_byte(void)uchar i;uchar value1=0;for(i=8;i0;i-)DQ=1;_nop_();_nop_();value1=1;DQ=0;_nop_();_nop_();_nop_();_nop_();DQ=1;_nop_();_nop_();_nop_();_nop_();if(DQ) value1|=0x80;delay1(9);DQ=1;return(value1);/*读取温度*/void read_temp()ds_reset(); /复位write_byte(0xcc); /跳过

8、ROMwrite_byte(0xbe); /温度转换temp_data0=read_byte(); /读低八位temp_data1=read_byte(); /读高八位ds_reset(); /复位,表示读取结束write_byte(0xcc); /写入跳过 ROM 的字节命令write_byte(0x44); /开始转换温度 转换好的温度会储存到暂存器字节 0 和 1。/*温度处理*/void work_temp()uchar n=0;if(temp_data1127)temp_data1=(256-temp_data1); /负值temp_data0=(256-temp_data0);n=

9、1;dispaly6=(temp_data0dispaly5=dispaly6/100;dispaly4=dispaly6%100; / /百位dispaly2=dispaly4/10; /十位dispaly1=dispaly4%10; /个位switch (temp_data0break;case 0x0e:dispaly0=9;break;case 0x0d:dispaly0=8;break;case 0x0c:dispaly0=8;break;case 0x0b:dispaly0=7;break;case 0x0a:dispaly0=6;break;case 0x09:dispaly0=

10、6;break;case 0x08:dispaly0=5;break;case 0x07:dispaly0=4;break;case 0x06:dispaly0=4;break;case 0x05:dispaly0=3;break;case 0x04:dispaly0=3;break;case 0x03:dispaly0=2;break;case 0x02:dispaly0=1;break;case 0x01:dispaly0=1;break;case 0x00:dispaly0=1;break;default:break;/*温度显示*/void disdignit() lcd_pos(0,

11、3); lcd_wdat(0x30+dispaly2); delay(5); lcd_pos(0,4); lcd_wdat(0x30+dispaly1); delay(5); lcd_pos(0,5); lcd_wdat(.); /显示 lcd_pos(0,6); lcd_wdat(0x30+dispaly0); delay(5); lcd_pos(0,7); h=0;while(dis9h != 0) lcd_wdat(dis9h); /显示 h+; /*主函数*/void main(void)lcd_init(); /液晶初始化InitUART(); /VB 初始化lcd_pos(0,0); /设定开始写数据的位置h=0;while(dis8h != 0) lcd_wdat(dis8h); /显示 h+;while(1)read_temp();work_temp();disdignit();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报