基于51单片机的温度计-数码管显示(-25~25度)

基于51单片机的温度计-25~25°C

(仿真+程序)

功能介绍

具体功能:

1.DS18B20测温;

2.74HC595驱动数码管显示测得温度;

3.温度显示范围为-25~25°C;

​演示视频:

基于51单片机的温度计-数码管显示(-25~25度) 

添加图片注释,不超过 140 字(可选)

程序

/***微信公众号:木子单片机****
************************************/
#include<reg51.h>
#include<stdio.h>
#include<ds18b20.h>
//74HC595引脚定义
sbit MOSIO=P2^1;
sbit R_CLKa=P2^2;
sbit S_CLKa=P2^0;
sbit LED = P0^0 ;
/
uchar vision_cnt = 0 ; 	//数码管动态扫描计数变量
bit updat = 0 ;		 	//动态刷新标志
uint cnt = 0 ;
uchar sec = 0 ;	   		//温度数据暂存变量
bit read_t = 0 ;		//温度读取标志位
bit fg = 0 ;			//温度符号存储标志位
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x07,
0x39,0x5e,0x79,0x71,
0x40,0x39
}; 
//共阴极数码管显示数组0-f
/*
********************************************************************************
** 函数名称 : send595(uchar dat)
** 函数功能 : 数据输入
********************************************************************************
*/
void send595(uchar dat)	   //数据输入
{  
	uchar i; 	
	for(i=0;i<8;i++) 
	{
		if((dat<<i)&0x80) 
			MOSIO = 1 ;
		else 
			MOSIO = 0 ;
		S_CLKa=0;
		S_CLKa=1;	
	}	
}
/*
********************************************************************************
** 函数名称 : out595(void)
** 函数功能 : 数据输出
********************************************************************************
*/
void out595(void)	  // 数据输出
{
	R_CLKa=0;
	R_CLKa=1;	     //上升沿
} 
/*
********************************************************************************
** 函数名称 : vision(uchar dat,uchar pos)
** 函数功能 : 显示函数
********************************************************************************
*/ //在数码管某个位置上显示某个数字
void vision(uchar dat,uchar pos,uchar point)
{
	uchar buf = 0 ;
	send595(~pos);
	if(point==1)
		buf = 0x80|table[dat];
	else 
		buf = table[dat];
	send595(buf);
	out595();
}
//定时器初始化函数,
void timer_config(void)
{
	 TMOD |= 0x01 ;				//设置定时器0和定时器1工作在方式1--16位计数模式
	 TH0 = (65535-60000)/256 ; 	//设置定时器初值高位
	 TL0 = (65535-60000)%256 ; 	//设置定时器初值低位
	 TR0 = 1 ;					//启动定时器0
	 ET0 = 1 ;					//开启定时器0中断
	 EA = 1 ;					//开启总中断
}
//定时器0中断函数
void timer0_isr() interrupt 1
{
	TH0 = 0xfc ; 				//设置定时器初值高位	1ms定时
	TL0 = 0x17 ; 				//设置定时器初值低位
	updat = 1 ;					//置位标志位
	if(cnt<500)		 			//温度采集周期,大约500多ms一次,不建议作太快的采集
	{
		cnt++;
	}else
	{
		cnt = 0 ;
		read_t = 1 ;   			//更新采集标志位 
	}
}

硬件设计

使用元器件:

单片机:AT89C51;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

添加图片注释,不超过 140 字(可选)

设计资料

01仿真图

本设计使用proteus7.8和proteus8.9两个版本设计!具体如图!

添加图片注释,不超过 140 字(可选)

02程序

本设计使用软件keil5版本编程设计!具体如图!

添加图片注释,不超过 140 字(可选)

03设计资料

        资料获取请关注同名公众号,全部资料包括程序(含注释)、仿真源文件等。具体内容如下,全网最全!!

添加图片注释,不超过 140 字(可选)

可以关注下方公众号!

点赞分享一起学习成长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值