36 基于单片机的电磁炉系统设计

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于51单片机,通过DS18B20温度传感器检测温度,通过八位数码管显示,
如果温度超过阈值,则蜂鸣器报警,红灯亮起;若不超过阈值,则蜂鸣器停止报警,
红灯熄灭;然后两个按键,一个按键按下后进入设置定时模式,另一个按键按下后,
分增加定时时间,每次按下增加30秒;开始定时后,对应的LED灯亮起,倒计时结束后,
蜂鸣器报警;采用滑动变组器连接ADC0832数模转换器模拟功率因数,功率引述超过阈值,
则蜂鸣器报警,红灯亮起

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

编辑

原理图:

编辑

三、程序编程

复制代码
#include "hardware.h"  //此头文件已包含了<reg51.h>头文件#include "DS18B20.h"#include "software.h"#include<intrins.h>#include<stdio.h>sbit key = P3^0;
sbit key1 = P3^1;
sbit led = P3^5;
sbit led1 = P3^6;
sbit CS=P1^0;                 //adc0832引脚sbit CLK=P1^1;
sbit DIO=P1^2;
sbit beep = P3^7;int u;int u1;int flag=0;int num2 = 0;int flag1=0,flag2=0,flag3=0;static wdyz = 500,glyz=80;uchar get\_AD\_Res()            //ADC0832启动读取函数 心率{
	uchar i, data1=0, data2=0;
	CS=0;
	
	CLK=0;DIO=1;\_nop\_();
	CLK=1;\_nop\_();
	
	CLK=0;DIO=1;\_nop\_(); 
	CLK=1;\_nop\_();
	
	CLK=0;DIO=0;\_nop\_();
	CLK=1;\_nop\_();
	
	CLK=0;DIO=1;\_nop\_(); 
	
	for(i=0; i<8; i++)
	{
		CLK=1;\_nop\_();
		CLK=0;\_nop\_();
		data1=(data1<<1)|(uchar)DIO; 
	}	
	for(i=0; i<8; i++)
	{
		data2=data2|(uchar)DIO<<i;
		CLK=1;\_nop\_();
		CLK=0;\_nop\_();
	}
	CS=1;	
	return(data1 == data2)?data1:0;
}void main(){
	TMOD = 0X11;       //设置定时器1和定时器0为工作方式1,16位定时器/计数器
	TH0 = (65536-45872)/256; //装初值,11.0592M晶振,定时50ms,计数个数 N = 45872(在计数时需要预先填装初始计数个数)
	TL0 = (65536-45872)%256; //...
	TH1 = (65536-45872)/256; //...
	TL1 = (65536-45872)%256; //同上
	EA = 1; //全局中断允许位 | 打开总中断(相当于中断的总开关,打开之后其他中断发生时才能有效)
	ET0 = 1;//定时器/计数器0中断允许位 | 打开
	ET1 = 1;//定时器/计数器1中断允许位 | 打开
	TR0 = 1;//定时器0运行控制位 | 允许定时器0运行
	TR1 = 0;//定时器1运行控制位 | 允许定时器1运行
	led1 = 0;
	led = 0;
	beep =0;	while(1)  //主循环 不断对数码管服务函数扫描
	{		 SEGDisplay();//数码管服务函数(不断对数码管进行扫描)
		 u = get\_AD\_Res();		 if(u>99)
		 {
			 u = 99;
		 }		if(key == 0)
		{
			flag++;			if(flag > 2)
			{
				flag = 0;
			}			while(!key);
		}		if(flag == 1)
		{		if(key1 == 0)
		{
			num2 += 30;			while(!key1);
		}
	 }		switch(flag)
		{			case 0:TR1 = 0; led1 = 0 ;break; //开始计时
			case 1:TR1 = 0; led1 = 0;break;			case 2:TR1 = 1; led1= 1;
		}		
		if(temp > wdyz)  //温度大于阈值
		{
			flag1 = 1;
		}		else
		{
			flag1 = 2;
		}		
		if(u>glyz)
		{
			flag2 = 1;
		}		else
		{
			flag2 = 2;
		}
		flag3 = flag1*flag2;		if(flag3==1 || flag3 == 2)
		{
			beep = 1;
			led =  1;
		}		else if(flag3 == 4)
		{
			beep = 0;
			led =  0;
		}		
		if(flag5 == 1)
		{
			beep = 1;
		}
	}
}

四、实现现象

具体动态效果看B站演示视频:
B站演示视频

基于单片机的电磁炉系统设计

全部资料(源程序、仿真文件、安装包、演示视频、原理图):

百度网盘资料下载

相关推荐
爱可生开源社区15 分钟前
SQLShift 重磅更新:支持 SQL Server 存储过程转换至 GaussDB!
数据库
贾修行38 分钟前
SQL Server 空间函数从入门到精通:原理、实战与多数据库性能对比
数据库·sqlserver
傲祥Ax1 小时前
Redis总结
数据库·redis·redis重点总结
森焱森2 小时前
APM与ChibiOS系统
c语言·单片机·算法·架构·无人机
一屉大大大花卷2 小时前
初识Neo4j之入门介绍(一)
数据库·neo4j
周胡杰2 小时前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
wkj0012 小时前
navicate如何设置数据库引擎
数据库·mysql
赵渝强老师2 小时前
【赵渝强老师】Oracle RMAN的目录数据库
数据库·oracle
暖暖木头2 小时前
Oracle注释详解
数据库·oracle
御控工业物联网3 小时前
御控网关如何实现MQTT、MODBUS、OPCUA、SQL、HTTP之间协议转换
数据库·sql·http