加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

基于51单片机DS18B20温度测量proteus仿真设计C语言源码+proteus仿真+报告+讲解

09/29 10:05
1074
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
    • 1 功能说明:
    • 2 讲解视频:
    • 3 仿真电路:
    • 4 程序:
    • 5 设计报告:
    • 6 资料清单&&网盘链接:
  • 相关文件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

仿真原版本:proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0014

1 功能说明:

运用所学单片机知识,完成温度信号的测量。要求如下:单片机系统选择使用AT89C51温度传感器采用DS18B20,在LED显示器上显示频率值,另外LED显示器使用动态方式显示。

2 讲解视频:

包含仿真讲解和代码讲解


51单片机DS18B20温度测量protues仿真设计(源码+仿真+讲解)

3 仿真电路:

imgimgimg

4 程序:

#include <reg52.h> 
#define uint unsigned int
#define uchar unsigned char   	//宏定义
sbit DQ=P3^7;     				//定义DS18B20 的 I/O	
sbit DIAN = P0^5;        		//显示小数点用

uchar x=0;      				//计数器
signed char m;     				//温度值全局变量
uchar n;      					//温度值全局变量
uint z;
uint c;
uint gaowen=35;  		       //高温报警温度,默认值为35
uint diwen=0; 				   //低温报警温度,默认值0
uchar code  LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,
			0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B};

/*****延时子程序*****/
void Delay_DS18B20(int num)
{
	while(num--) ;
}
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{
	unsigned char x=0;
	DQ = 1;         	//DQ复位
	Delay_DS18B20(8);   //稍做延时
	DQ = 0;        	   	//单片机将DQ拉低
	Delay_DS18B20(80);  //精确延时,大于480us
	DQ = 1;         	//拉高总线
	Delay_DS18B20(14);
	x = DQ;           	//稍做延时后,如果x=0则初始化成功,x=1则初始化失败
	Delay_DS18B20(20);
}
/*****读一个字节*****/
unsigned char ReadOneChar(void)
{
	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_DS18B20(4);
  	}
  	return(dat);
}
/*****写一个字节*****/
void WriteOneChar(unsigned char dat)
{
	unsigned char i=0;
  	for (i=8; i>0; i--)
  	{
    	DQ = 0;
    	DQ = dat&0x01;
    	Delay_DS18B20(5);
    	DQ = 1;
    	dat>>=1;
  	}
}
/*****读取温度*****/
unsigned int ReadTemperature(void)
{
	unsigned char a=0;
  	unsigned char b=0;
  	unsigned int t=0;
  	float tt=0;
  	Init_DS18B20();
  	WriteOneChar(0xCC);  //跳过读序号列号的操作
  	WriteOneChar(0x44);  //启动温度转换
  	Init_DS18B20();
  	WriteOneChar(0xCC);  //跳过读序号列号的操作
  	WriteOneChar(0xBE);  //读取温度寄存器
  	a=ReadOneChar();     //读低8位
  	b=ReadOneChar();	 //读高8位
  	t=b;				 //高8位转移到t
  	t<<=8;			     //t数据左移8位
  	t=t|a;			     //将t和a按位或,得到一个16位的数
  	tt=t*0.0625;		 //将t乘以0.0625得到实际温度值
					     //(温度传感器设置12位精度,最小分辨率是0.0625)
  	t= tt*10+0.5;        //放大10倍(将小数点后一位显示出来)输出并四舍五入
  	return(t);		     //返回温度值
}
/*****延时子程序*****/
void Delay(uint num)
{
	while( --num );
}			
/*****读取温度*****/
void check_wendu(void)
{
	uint a,b;
	c=ReadTemperature();  		//获取温度值
	a=c/100;     				//计算得到十位数字
	b=c/10-a*10;    			//计算得到个位数字
	m=c/10;      				//计算得到整数位
	if(m<=0)				    //如果温度小于0,限制显示为0
	{
		m=0;
	}
	n=c-a*100-b*10;    			//计算得到小数位
}
/*****显示开机初始化等待画面*****/
void Disp_init(void)    
{
	P0 = ~0x80;      		 //显示-
	P2 = 0x7F;
	Delay(200);
	P2 = 0xDF;
	Delay(200);   
	P2 = 0xF7;
	Delay(200);
	P2 = 0xFD;
	Delay(200);
	P2 = 0xFF;       		 //关闭显示
}
/*****显示温度子程序*****/
void Disp_Temperature(void)    
{
	P0 = ~0x98;        		//显示c
	P2 = 0x7F;
	Delay(1000);
	P2=0xff;				//关闭显示

	P0=~LEDData[n];     	//显示小数位
	P2 = 0xDF;
	Delay(1000);
	P2=0xff;			   //关闭显示

	P0 =~LEDData[m%10];    //显示个位
	DIAN = 0;         	   //显示小数点
	P2 = 0xF7;
	Delay(1000);
	P2=0xff;			   //关闭显示

	P0 =~LEDData[m/10];    //显示十位
	P2 = 0xFD;
	Delay(1000);
	P2 = 0xff;        	   //关闭显示
}

5 设计报告:

img

6 资料清单&&网盘链接:

�. 常见使用问题及解决方法–必读!!!!

1. 源程序

2. proteus仿真

3. 仿真视频

4. 开题报告

5. 设计报告

6. 讲解视频

Altium Designer 安装破解

KEIL+proteus 单片机仿真设计教程

KEIL安装破解

Proteus元器件查找

Proteus安装

Proteus简易使用教程

单片机学习资料

相关数据手册

答辩技巧

设计报告常用描述

鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url

img

网盘下载链接

  • 设计资料获取联系方式.doc

相关推荐

电子产业图谱