- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机轻松入门之十 DS18B20温度传感器+1602液晶显示
本文旨在介绍单片机入门的基础知识,为初接触或即将接触单片的新手提供一个入门指导。本文章会陆续推出,隔几天一个章节。所使用单片机为ATMEL公司的AT89C52,软件为PROTEUS和KEIL;只提供原理图和KEIL环境下的注释,希望对广大即将接触单片机的人有所帮助,如果有错误欢迎回帖指出与本人交流或QQ联系(QQ:1260514656)。
DS18B20数字温度传感器是由美国DALLAS公司生产的,体积小,使用方便,测温范围 -55℃~+125℃,测温分辨率0.5℃,工作电压DC3-5V,不需要任何外围元件,采用SPI单线接口方式,在与微处理器连接时仅需要一条口线即可实现双向通讯,广泛适用于各种温度控制领域。
原理图如下:
程序如下:
#includereg52.h#define uchar unsigned char#define uint unsigned intsbit RS=P3^0;sbit EN=P3^2;sbit RW=P3^1;sbit wela=P3^3;sbit DQ=P3^4;uchar i;uint num;????????????????? uint shi,ge,xiaoshu;uchar code t0[]=The temperature ;uchar code t1[]= is???????????? ;uchar code wendu[]=0123456789;???
void delay(uint x){uint m,n;for(m=x;m0;m--) ?? for(n=10;n0;n--); }
void delay1(uint x){uint a,b;for(a=x;a0;a--)?? for(b=110;b0;b--); }
/*****************液晶写指令***************/
void write_com(uchar com){wela=1;P2=com;wela=0;RS=0;EN=0;RW=0;delay(10);EN=1;delay(10);??? EN=0;}
/*****************液晶写数据指令***************/
void write_date(uchar date){wela=1;P2=date;wela=0;RS=1;EN=0;RW=0;delay(10);EN=1;delay(10);EN=0;}
/*****************液晶初始化指令***************/
void init(){write_com(0x38);delay(20);write_com(0x0f);delay(20);write_com(0x06);delay(20);write_com(0x80); for(i=0;i16;i++)?? {??? write_date(t0[i]);??? delay(0);?? }write_com(0x80+0x40);for(i=0;i16;i++)?? {??? write_date(t1[i]);??? delay(0);?? }
}
/*************DS18B20温度读取模块*************/
void tmpDelay(int u) //延时函数{while(u--) ;}
void Init_DS18B20() //初始化ds1820{unsigned char x=0;DQ = 1;???? //DQ复位tmpDelay(8); //稍做延时DQ = 0;??? //单片机将DQ拉低tmpDelay(80); //精确延时 大于 480usDQ = 1;??? //拉高总线tmpDelay(14);x=DQ;????? //稍做延时后,如果x=0则初始化成功 x=1则初始化失败tmpDelay(20);}
unsigned char ReadOneChar() //读一个字节{unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i--){?? DQ = 0; // 给脉冲信号?? dat=1;?? DQ = 1; // 给脉冲信号?? if(DQ)?? dat|=0x80;?? tmpDelay(4);}return(dat);}
void WriteOneChar(unsigned char dat) //写一个字节{unsign
文档评论(0)