#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P1^4; //ds18b20ä¸åçæºè¿æ¥å£
unsigned char code str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40} ; //å
±é´æ°ç 管åç 表
unsigned char code str1[]={0x0bf,0x86,0x0db,0x0cf,0x0e6,0x0ed,0x0fd,0x87,0x0ff,0x0ef}; //个ä½å¸¦å°æ°ç¹åç 表
unsigned char code wei[]={0x0fe,0x0fd,0x0fb,0x0f7};
uchar data disdata[5];
uint tvalue; //温度å¼
uchar tflag; //温度æ£è´æ å¿
/**********ds1820ç¨åº************/
void delay_18B20(unsigned int i) //延æ¶1å¾®ç§
{
while(i--);
}
void ds1820rst() /*ds1820å¤ä½*/
{
unsigned char x=0;
DQ = 1; //DQå¤ä½
delay_18B20(4); //延æ¶
DQ = 0; //DQæä½
delay_18B20(100); //精确延æ¶å¤§äº 480us
DQ = 1; //æé«
delay_18B20(40);
}
uchar ds1820rd() /*读æ°æ®*/
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; //ç»èå²ä¿¡å·
dat>>=1;
DQ = 1; //ç»èå²ä¿¡å·
if(DQ) dat|=0x80;
delay_18B20(10);
}
return(dat);
}
void ds1820wr(uchar wdata) /*åæ°æ®*/
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = wdata&0x01;
delay_18B20(10);
DQ = 1;
wdata>>=1;
}
}
read_temp() /*读å温度å¼å¹¶è½¬æ¢*/
{
uchar a,b;
ds1820rst();
ds1820wr(0xcc); // è·³è¿è¯»åºåå·
ds1820wr(0x44); // å¯å¨æ¸©åº¦è½¬æ¢
ds1820rst();
ds1820wr(0xcc); // è·³è¿è¯»åºåå·
ds1820wr(0xbe); // 读å温度
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
{
tvalue=~tvalue+2; tflag=1; //è´æ¸©åº¦
}
tvalue=tvalue*(0.625); //温度å¼æ©å¤§10åï¼ç²¾ç¡®å°1ä½å°æ°
return(tvalue);
}
/*********************************/
void ds1820disp() //温度å¼æ¾ç¤º
{
uchar i;
disdata[0]=tvalue/1000; //ç¾ä½æ°
disdata[1]=tvalue%1000/100; //åä½æ°
disdata[2]=tvalue%100/10; //个ä½æ°
disdata[3]=tvalue%10; //å°æ°ä½
if(tflag==0)
{
if(disdata[0]==0x00)
{
disdata[0]=0x0a; //ç¾ä½æ°ä½ä¸º0ä¸æ¾ç¤º
if(disdata[1]==0x00) disdata[1]=0x0a; //åä½æ°ä½ä¸º0ä¸æ¾ç¤º
}
}
else //è´æ¸©åº¦
{
disdata[0]=0x0b; //è´æ¸©åº¦ç¾ä½æ¾ç¤ºè´å·:-
if(disdata[1]==0x00) disdata[1]=0x0a; //åä½æ°ä½ä¸º0ä¸æ¾ç¤º
}
for(i=0;i<150;i++)
{
P2=wei[0];
P0=str[disdata[3]];
delay_18B20(20);
P2=wei[1];
P0=str1[disdata[2]];
delay_18B20(20);
P2=wei[2];
P0=str[disdata[1]];
delay_18B20(20);
P2=wei[3];
P0=str[disdata[0]];
delay_18B20(20);
}
}
/************主ç¨åº**********/
void main()
{
ds1820rst(); //åå§åæ¾ç¤º
while(1)
{
read_temp(); //读å温度
ds1820disp(); //æ¾ç¤º
}
}
急需用温度传感器ds18b20,数码管显示温度的单片机的C语言程序,运用的是...
include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit DQ=P1^4; \/\/ds18b20与单片机连接口 unsigned char code str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40} ; \/\/共阴数码管字码表unsigned char code str1[]={0x0bf,0x86,...
求STC89C52单片机与DS18B20传感器用Keil c语言设计程序
str[1]=tab[temp%10]; \/\/个位温度 if(flag_get==1) \/\/定时读取当前温度 { temp=ReadTemperature();flag_get=0;} } } void tim(void) interrupt 1 using 1\/\/中断,用于数码管扫描和温度检测间隔 { TH0=0xef;\/\/定时器重装值 TL0=0xf0;num++;if (num==50){num=0;flag_get=1;\/...
我需要stc89c52单片机ds18b20温度控制的c语言程序,要求可显示当前温度...
void delay(unsigned char i) \/\/ds18b20的延时程序 { while(i--);} unsigned char resetds() \/\/DS18B20初始化 { unsigned char i=0;unsigned char flag=0;DQ=0; \/\/拉低总线 delay(81); \/\/精确延时 497us DQ=1; \/\/释放总线 delay(20);flag=DQ;delay(60); \/\/ return ...
...温度传感器是DS18B20) 寻高手帮在C语言程序中加个报警程序。急需...
if(flag)\/\/温度为正数 由于实际的焊的板子只有三个数码管 所以,没加“+” 了。如 45.0度 { \/\/DIN=1;P2=0xff;P2=seg[0];P0=tab[0];delay1(4);P2=0xff;P2=seg[1];P0=tab[ge];DIN=0; \/\/ 问题问什么 加小数点要在P2口上加才能正常显示。delay1(4);DIN=1;P2=0xff;P2=...
求基于AT89C51单片机的DS18B20温度检测程序(用C语言)
\/\/DS18B20的读写程序,数据脚P3.3 \/\/ \/\/温度传感器18B20汇编程序,采用器件默认的12位转化 \/\/ \/\/最大转化时间750微秒,显示温度-55到+125度,显示精度 \/\/ \/\/为0.1度,显示采用4位LED共阳显示测温值 \/\/ \/\/P0口为段码输入,P24~P27为位选 \/\/ \/***\/ include "reg51.h"include...
...单片机和DS18B20温度传感器、LCD1602液晶显示的高精度数字温度计程序...
void Init_DS18B20(void){ unsigned char x=0;DQ = 1; \/\/DQ复位 delay_18B20(8); \/\/稍做延时 DQ = 0; \/\/单片机将DQ拉低 delay_18B20(80); \/\/精确延时 大于 480us DQ = 1; \/\/拉高总线 delay_18B20(4);x=DQ; \/\/稍做延时后 如果x=0则初始化成功 x=1则初始化失败...
求:基于AT89C51单片机的多路DS18B20测温显示
bit DS18B20_FLG = 0; \/\/“1”:DS18B20存在 ;“0”:不存在 unsigned char LEDBuf[4];void delay(unsigned int i);\/\/延时 display();\/\/DS18B20温度采集子程序\/\/\/DS18B20温度采集子程序\/\/\/DS18B20温度采集子程序\/\/\/ unsigned char Init_DS18B20(void);unsigned char Read_DS18B20(void); ...
用AT89C51单片机和温度传感器DS18B20S设计数字式温度计
3.3 按键程序设计 134实物制作及调试 145电子综合设计体会 15参考文献 161 引言本系统所设计的数字温度计采用的是DS18B20数字温度传感器测温,DS18B20直接输出的就是数字信号,与传统的温度计相比,具有读数方便,测温范围广,测温准确,上下限报警功能。其输出温度采用LED数码管显示,主要用于对测温比较准确的场所。该设计...
理解89c52单片机开发板的电路原理图
这个图应该很清楚了,各个功能模块都归纳到一个方框里面:1、LCD1602显示模块接口2、LCD12864显示模块接口3、LED接口4、蜂鸣器接口5、ISP下载接口6、PL2303驱动电路7、电源电路8、数码管电路接口及独立按键接口9、DS18B20温度传感器接口及红外接收电路接口10、CPU11、复位电路和时钟电路。这个开发板缺少4*4矩阵...
用51单片机和18b20做一个温度计,求一个完整程序,要求用12864显示。
用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的范围在-20度到+100度之间,用8位数码管显示出来。5. 电路原理图 6. 系统板上硬件连线 (1). 把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“动态数码显示”区域中的ABCDEFGH端子上。(2). 把“单片机系统”...