基于51单片机的数字温度计DS18B20全部注释 联系客服

发布时间 : 星期一 文章基于51单片机的数字温度计DS18B20全部注释更新完毕开始阅读fb8aed54804d2b160b4ec0ab

#include #define uint unsigned int #define uchar unsigned char

sbit rs=P2^4;//向液晶控制器器写数据,写命令选择端 sbit rw=P2^5;//向液晶器读,写选择端 sbit en=P2^6;//使能信号端,lcd1602

sbit DQ=P3^3;//温度传输线,一线双向数据传输 uchar s;

uchar code a[]=%uchar code b[]=%uchar code c[]=%uchar code d[]=%uchar code e[]=\

void delay(uint x)//延时x毫秒,晶振为12MHz { uint i,j; for(i=x;i>0;i--) for(j=120;j>0;j--); }

void lcdxie_zhiling(uchar zhiling);//lcd1602写指令 void lcdxie_shuju(uchar shuju);//lcd1602写数据 void lcdchushihua();//初始化lcd1602 void dschushihua();//18B20初始化 bit dubit();//读一位数据函数

uchar du_zijie();//读一个字节数据函数 void xie_zijie(uchar dat);//向18B20写一个字节 void fenpin1(uchar t);//分频显示整数温度

void fenpin2(uchar t);//分频显示小数温度 void hanshuchushihua();//函数初始化 void main() {

uchar H,L,N,D;

hanshuchushihua();//函数初始化

while(1) {

dschushihua();//18B20初始化 } }

void hanshuchushihua()//函数初始化 {

lcdchushihua();//初始化lcd1602

lcdxie_zhiling(0x80+0x01);

delay(1); //小延时,做缓冲 fenpin1(N);//显示温度的整数部分 fenpin2(D);//显示温度的小数部分 L=du_zijie();//先读的是温度值低位 H=du_zijie();//接着读的是温度值高位

N=H*16+L/16;//整数部分,实际温度值=(H*256+L)/16,即:H*16+L/16 D=(L)*10/16;//小数部分,将余数乘以10再除以16取整,即第一位小数

for(s=0;s<14;s++)//显示\爱到花开\ { }

lcdxie_zhiling(0x80+0x40+0x02); for(s=0;s<6;s++) {

lcdxie_shuju(b[s]);//显示\今天\ delay(5); }

lcdxie_zhiling(0x80+0x40+0x0a); lcdxie_shuju(d[0]);//显示\

lcdxie_zhiling(0x80+0x40+0x0c); lcdxie_shuju(d[1]);//显示\ delay(5);

if(du_zijie()==1)//如果du_zijie()返回的值为1,则18B20可能以坏,将进入死循环 {

lcdxie_zhiling(0x80+0x04); for(s=0;s<5;s++)//显示\; {

lcdxie_shuju(e[s]); delay(5); }

lcdxie_shuju(a[s]); delay(5);

}

while(1);//进入死循环

delay(10); }

void lcdxie_zhiling(uchar zhiling)//lcd1602写指令 {

rs=0; //选择写命令模式

P0=zhiling;//将要写的命令字送到数据总线上 delay(5); //稍作延时以待数据稳定 en=1;

//使能端给一高脉冲,因为初始化函数中已经将lcden置0

delay(5); //稍作延时 en=0; }

void lcdxie_shuju(uchar shuju)//lcd1602写数据 {

rs=1; //选择写数据模式

P0=shuju;//将要写的数据字送到数据总线上 delay(5); //稍作延时以待数据稳定 en=1;

//使能端给一高脉冲,因为初始化函数中已经将lcden置0 //将使能端置0以完成高脉冲

delay(5);//稍作延时 en=0; }

void lcdchushihua()//初始化lcd1602 { rs=0;

//将使能端置0以完成高脉冲