一个基于C51单片机的温度控制器可设置温度上限控制继电器的按键设置程序例程
时间: 2023-10-03 21:09:17 浏览: 118
基于C51单片机的温度控制系统应用系统设计(附程序).docx
好的,以下是一个基于C51单片机的温度控制器可设置温度上限控制继电器的按键设置程序例程。
```c
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^0; // 控制LED的引脚
sbit relay=P1^1; // 控制继电器的引脚
uchar temp=0; // 存储当前温度
uchar set_temp=30; // 存储用户设置的温度
uchar key=0; // 存储按键值
// 延时函数
void delay(uint i)
{
while(i--);
}
// 初始化函数
void init()
{
TMOD=0x01; // 定时器0工作在模式1
TH0=(65536-50000)/256; // 初始值为50000us
TL0=(65536-50000)%256;
ET0=1; // 开启定时器0中断
EA=1; // 开启总中断
TR0=1; // 启动定时器0
}
// 数码管显示函数
void display(uchar n)
{
uchar code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 数码管显示表
P2=table[n];
}
// 获取温度函数
void get_temp()
{
uchar code table[9]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe}; // 温度传感器返回的数据表
uchar i;
for(i=0;i<9;i++)
{
P2=table[i];
delay(100);
if(P3==0xfe) // 如果温度传感器输出低电平
{
temp=i+1;
break;
}
}
}
// 按键扫描函数
void keyscan()
{
key=0;
if(P3!=0xff)
{
delay(1000); // 消抖
if(P3!=0xff)
{
switch(P3)
{
case 0xfe: set_temp++;break; // 按下K1键,温度上限+1
case 0xfd: set_temp--;break; // 按下K2键,温度上限-1
default: break;
}
while(P3!=0xff); // 等待按键松开
key=1;
}
}
}
// 主函数
void main()
{
init(); // 初始化
while(1)
{
get_temp(); // 获取当前温度
display(temp); // 数码管显示当前温度
if(temp>=set_temp) // 如果当前温度超过设定温度
{
led=0; // LED灯亮
relay=1; // 继电器断开
}
else
{
led=1; // LED灯灭
relay=0; // 继电器闭合
}
keyscan(); // 按键扫描
if(key==1) // 如果有按键按下
{
if(set_temp>99) set_temp=99; // 温度上限不能超过99度
if(set_temp<0) set_temp=0; // 温度上限不能小于0度
}
}
}
// 定时器0中断服务函数,用于定时扫描按键
void timer0() interrupt 1
{
TH0=(65536-50000)/256; // 初始值为50000us
TL0=(65536-50000)%256;
static uchar i=0;
i++;
if(i==20) // 20ms扫描一次按键
{
i=0;
keyscan();
}
}
```
这个程序例程中,我们使用了数码管、LED灯和继电器来实现温度的显示、警告和控制。程序中的按键K1和K2分别用于增加和减少温度上限的设定值。程序中使用了定时器0中断来定时扫描按键,保证了按键的及时响应。其中,获取温度和按键扫描的函数需要根据具体的硬件和传感器进行修改。
阅读全文