DS18B20测温12864液晶显示.doc_第1页
DS18B20测温12864液晶显示.doc_第2页
DS18B20测温12864液晶显示.doc_第3页
DS18B20测温12864液晶显示.doc_第4页
DS18B20测温12864液晶显示.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#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 dis9 =/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 (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)(P2&0x80); lcden = 0; return(result); /- / 写指令数据到LCD / RS=L,RW=L,E=高脉冲,D0-D7=指令码。 /-void lcd_wcmd(uchar 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);/- / 写显示数据到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_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=value&0x01; delay1(9); value=1; DQ=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); /跳过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=1;dispaly6=(temp_data0&0xf0)4)|(temp_data1&0x0f)4);dispaly5=dispaly6/100;dispaly4=dispaly6%100;/百位dispaly2=dispaly4/10;/十位dispaly1=dispaly4%10;/个位switch(temp_data0&0x0f)/小数位case 0x0f:dispaly0=9;break;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=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,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+; /*主函数*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论