基于51单片机的测温报警系统(NTC)

本文介绍了一种基于51单片机的测温报警系统,利用NTC热敏电阻的特性,通过单片机采集电压并进行A/D转换,再通过查表得到温度值,实现实时显示在LCD上。详细阐述了电路原理图,并提供了main、eeprom52和ADC0832的源码实现。
摘要由CSDN通过智能技术生成


一、电路原理图

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
本课题用一种基于单片机的数据采集系统方案,该方案根据热敏电阻随温度变化而变化的特性,采用串联分压电路。单片机采集热敏电阻的电压,通过A/D转换将模拟量电压信号转换成数字量电压信号,经过查表转换得到温度值,控制LCD实时显示温度值。

二、源码

1.main

代码如下:

#include<reg52.h>				 
#include<intrins.h>
#include"eeprom52.h"		  //调用STC89C52单片机的EEPROM控制程序
#include "math.h"
#include"ADC0832.H"
#define uchar unsigned char		 
#define uint unsigned int		 
#define LCD1602_dat P0			 //LCD1602的数据传输IO口

sbit LCD1602_rs=P2^5;
sbit LCD1602_rw=P2^6; 
sbit LCD1602_e=P2^7;  
sbit beep=P2^0;	 //蜂鸣器IO
sbit led_1=P1^5; //超上限指示灯
sbit led_2=P1^6;//超下限指示灯

sbit key_1=P3^5;  //设置按键
sbit key_2=P3^6;//加按键
sbit key_3=P3^7;//减按键

uchar dat=0;       //AD值
uint c,d;
uint DY_dat=0;    
uchar ad_dat1=0;   //读取滤波后的AD值

float zhi;	//暂存读取的输入变量

int temp;	//读取
char temp_h,temp_l;	//温度上下限制存储变量
uchar state,ms;	   //系统设置项变量、50ms定时变量

bit s1,beep1;	//设置闪烁标志位、报警标志位

void delay(uint T)		//系统延时程序
{
   
	while(T--);
}

//延时函数,i=1时,大约延时10us
void delay10us(uint c)
{
   
	uchar a,b;
	for (; c>0; c--)
	{
   
		 for (b=199;b>0;b--)
		 {
   
		  	for(a=1;a>0;a--);
		 }      
	}	
}

void Read_ad()
{
   

  static uint AD_DAT=0;		 
	float ad_buf=0;				
	static uchar i=0;			//定义三个变量
	if(i<5)		 		//累加,然后除以5,求取5次的平均值
	{
   
		i++;
		AD_DAT+=A_D();		// 波
	}
	else					
	{
   
		i=0;				//清零,方便下次计算 
		ad_dat1=(uchar)(AD_DAT/5);		 //求取平均值
		ad_buf=(float)(ad_dat1/0.51);	 
		DY_dat=(uint)(ad_buf);			 
		AD_DAT=0;						 //清零
	}
}
//1602写如数据函数
void LCD1602_write(uchar order,dat)				  //1602 一个字节  
{
   
    LCD1602_e=0;
    LCD1602_rs=order;
    LCD1602_dat=dat;
    LCD1602_rw=0;
    LCD1602_e=1;
    delay(1);
    LCD1602_e=0;																								     
}

//1602写入数据函数  指针式
void LCD1602_writebyte(uchar *prointer)				
{
   
    while(*prointer!='\0')
    {
   
        LCD1602_write(1,*prointer);
        prointer++;
    }
}

//初始化1602液晶 
void LCD1602_cls()				
{
   
	LCD1602_write(0,0x01);     //1602 清屏 指令
	delay(1500);
	LCD1602_write(0,0x38);     // 功能设置 8位、5*7点阵
	delay(1500);
	LCD1602_write(0,0x0c);     //设置 光标   
	LCD1602_write(0,0x06);
	LCD1602_write(0,0xd0);
	delay(1500);
}

//LCD1602液晶显示程序 
void show()			//显示数据
{
   
		LCD1602_write(0,0x80);		   //显示位置设定
		LCD1602_writebyte("Temp:"
  • 15
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值