欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 基于单片机的电磁炉系统设计

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

2024/10/25 14:23:01 来源:https://blog.csdn.net/zs849644371/article/details/142511983  浏览:    关键词:基于单片机的电磁炉系统设计

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于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站演示视频:

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

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

百度网盘资料下载icon-default.png?t=O83Ahttps://pan.baidu.com/s/1srPGXe0rPOZpKCPAgQ7g0w?pwd=ckb4

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com