第四章 基于DS18B20的温度测量(数码管显示)模块设设计

发布时间:2012-07-25 21:21:47   来源:文档文库   
字号:

//******************************************************************

/*/******************************************************************

知识点

各位大侠, value>>=1;这句C程序什么意思??还有value|=0x80; ???

满意回答 value>>=1;

相当于

value = value >>1;

同理

value|=0x80;

也就相当于

value = value | 0x80;

| >>都是位操作符,前者表示或,后者表示右移的意思,针对二进制位进行操作。

*//******************************************************************

//******************************************************************

//******************************************************************

//以下是c 语言程序代码

/******************************************************************/

//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 /??

/******************************************************************/

#include

#define uchar unsigned char

#define uint unsigned int

//DS18B20数据线?

sbit DQ =P2^4;

unsigned char flag ; /*负数标志*/

//行扫描数组

uchar code scan[8] ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//row0-----row7

//数码管显示的 段码表 7段数码管段码表共阴

uchar code table[13] ={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x39,0x00};// 显示段码值0123456789

//小数部分显示查询表

uchar code ditab[16]= {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,

0x07,0x08,0x08,0x09,0x09};

uchar dispbuf[8];//显示缓冲区

uchar temper[2];//存放温度的数组

//******************************************************************

//延时函数

//******************************************************************

void delay (unsigned int us)

{

while (us --);

}

//******************************************************************

//DA18B20复位函数

//******************************************************************

void reset(void)

{

uchar x =0;

DQ=1;

delay(8);

DQ=0;

delay(80);

DQ=1;

delay(14);

x=DQ;

delay(20);

}

//******************************************************************

//DS18B20中读出一个字节

//******************************************************************

uchar readbyte(void)

{

uchar i= 0;

uchar dat =0;

for(i=8;i>0;i--)

{

DQ=0;

dat>>=1;

DQ=1;

if(DQ)

dat|=0x80;

delay(4);

}

return(dat);

}

//******************************************************************

//DS18B20中写一个字节

//******************************************************************

void writebyte(unsigned char dat)

{

uchar i=0;

for(i=8;i>0;i--)

{

DQ=0;

DQ=dat&0x01;

delay(5);

DQ=1;

dat>>=1;

}

delay(4);

}

//******************************************************************

//从中读取实时

//******************************************************************

void readtemp(void)

{

uchar a=0, b=0;

reset();

writebyte(0xCC); //跳过序列号

writebyte(0x44); //启动温度转换

reset();

writebyte(0xCC);

writebyte(0xBE);

a=readbyte();

b=readbyte();

if(b>0x0f)

{

a= ~ a +1;

if(a==0)

b= ~b + 1;

else b= ~b;

flag =10; //是负数table[10]=0x04显示负数标志“-

}

else flag =12;//是正数table[12]=0x00不显示正数标志

temper[0]=a&0x0f;

a=a>>4;

temper[1]=b<<4;

temper[1]=temper[1]|a;

}

//******************************************************************

//动态扫描函数

//******************************************************************

void scandisp()

{

unsigned char i,value;

for(i=0;i<8;i++)

{

P3=0xff;

value=table[dispbuf[i]];

if(i==3)

value|=0x80;

P0=value;

P3=scan[i];

delay(70) ; // delay(50);

}

}

//******************************************************************

//主函数

//******************************************************************

void main()

{

uchar temp,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();//在前后均可

}

}

//******************************************************************

//******************************************************************

//******************************************************************

//******************************************************************

本文来源:https://www.2haoxitong.net/k/doc/565d330bba1aa8114431d98a.html

《第四章 基于DS18B20的温度测量(数码管显示)模块设设计.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式