您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第四章 基于DS18B20的温度测量(数码管显示)模块设设计
//******************************************************************/*/******************************************************************知识点各位大侠,value=1;这句C程序什么意思??还有value|=0x80;???满意回答value=1;相当于value=value1;同理value|=0x80;也就相当于value=value|0x80;|和都是位操作符,前者表示或,后者表示右移的意思,针对二进制位进行操作。*//******************************************************************//******************************************************************//******************************************************************//以下是c语言程序代码/******************************************************************///包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义/??/******************************************************************/#includereg52.h#defineucharunsignedchar#defineuintunsignedint//DS18B20数据线?sbitDQ=P2^4;unsignedcharflag;/*负数标志*///行扫描数组ucharcodescan[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//row0-----row7//数码管显示的段码表7段数码管段码表共阴ucharcodetable[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x39,0x00};//显示段码值0123456789//小数部分显示查询表ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};uchardispbuf[8];//显示缓冲区uchartemper[2];//存放温度的数组//******************************************************************//延时函数//******************************************************************voiddelay(unsignedintus){while(us--);}//******************************************************************//DA18B20复位函数//******************************************************************voidreset(void){ucharx=0;DQ=1;delay(8);DQ=0;delay(80);DQ=1;delay(14);x=DQ;delay(20);}//******************************************************************//从DS18B20中读出一个字节//******************************************************************ucharreadbyte(void){uchari=0;uchardat=0;for(i=8;i0;i--){DQ=0;dat=1;DQ=1;if(DQ)dat|=0x80;delay(4);}return(dat);}//******************************************************************//向DS18B20中写一个字节//******************************************************************voidwritebyte(unsignedchardat){uchari=0;for(i=8;i0;i--){DQ=0;DQ=dat&0x01;delay(5);DQ=1;dat=1;}delay(4);}//******************************************************************//从中读取实时//******************************************************************voidreadtemp(void){uchara=0,b=0;reset();writebyte(0xCC);//跳过序列号writebyte(0x44);//启动温度转换reset();writebyte(0xCC);writebyte(0xBE);a=readbyte();b=readbyte();if(b0x0f){a=~a+1;if(a==0)b=~b+1;elseb=~b;flag=10;//是负数table[10]=0x04显示负数标志“-”}elseflag=12;//是正数table[12]=0x00不显示正数标志temper[0]=a&0x0f;a=a4;temper[1]=b4;temper[1]=temper[1]|a;}//******************************************************************//动态扫描函数//******************************************************************voidscandisp(){unsignedchari,value;for(i=0;i8;i++){P3=0xff;value=table[dispbuf[i]];if(i==3)value|=0x80;P0=value;P3=scan[i];delay(70);//delay(50)闪;}}//******************************************************************//主函数//******************************************************************voidmain(){uchartemp,temp1;while(1){scandisp();readtemp();temp1=temper[0];temp=temper[1];dispbuf[4]=ditab[temp1];//显示小数部分//dispbuf[4]=ditab[0];dispbuf[4]=ditab[1];//dispbuf[4]=ditab[2];dispbuf[4]=ditab[3];//dispbuf[4]=ditab[5]------dispbuf[4]=ditab[15];dispbuf[1]=temp/100;//显示百位部分dispbuf[3]=temp%10;//显示个位部分temp=temp/10;dispbuf[2]=temp%10;//显示十位部分dispbuf[0]=flag;//显示正负标志位dispbuf[5]=11;//显示C//scandisp();//在前后均可}}//******************************************************************//******************************************************************//******************************************************************//******************************************************************
本文标题:第四章 基于DS18B20的温度测量(数码管显示)模块设设计
链接地址:https://www.777doc.com/doc-4048931 .html