目录
一、主要功能
基于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站演示视频
基于单片机的电磁炉系统设计
全部资料(源程序、仿真文件、安装包、演示视频、原理图):