51单片机恒压供水代码
时间: 2023-07-23 14:34:35 浏览: 104
参考资料-基于mcs51单片机的高楼恒压供水控制系统设计.zip
5星 · 资源好评率100%
以下是一个基于51单片机的恒压供水代码示例:
```c
#include <reg51.h>
sbit IN1=P1^0; //输入1引脚
sbit IN2=P1^1; //输入2引脚
sbit EN=P1^2; //使能引脚
sbit LED=P1^3; //指示灯引脚
unsigned int ADC_value; //ADC采集数值
unsigned int target_value=500; //目标电压值
unsigned char flag=0; //标志位
void ADC_Init()
{
ADC_CONTR = 0x85; //打开AD转换器,并设置转换时间
P1ASF = 0x01; //将P1.0口设为AD采集口
}
unsigned int Get_ADC_Result(unsigned char ch)
{
ADC_CONTR = ADC_CONTR & 0xf0 | ch; //选择通道
ADC_CONTR |= 0x08; //启动转换
while(!(ADC_CONTR & 0x10)); //等待转换完成
ADC_CONTR &= ~0x10; //清除转换完成标志位
return ADC_RES | ADC_RESL<<8; //返回转换结果
}
void main()
{
EN=0; //初始化使能引脚为低电平
LED=0; //初始化指示灯为关闭状态
ADC_Init(); //初始化ADC
while(1)
{
ADC_value=Get_ADC_Result(0); //获取ADC采集到的数值
if(ADC_value > target_value) //如果电压过高
{
IN1=1; //关闭输入1
IN2=0; //打开输入2
flag=1; //设置标志位
}
else if(ADC_value < target_value) //如果电压过低
{
IN1=0; //打开输入1
IN2=1; //关闭输入2
flag=1; //设置标志位
}
else
{
if(flag) //如果标志位被设置
{
EN=0; //关闭使能引脚
LED=1; //打开指示灯
flag=0; //清除标志位
}
IN1=0; //打开输入1
IN2=0; //打开输入2
}
}
}
```
上述代码实现了一个简单的恒压供水控制器,通过读取ADC采集到的电压值,并与设定的目标电压值进行比较,控制输入1和输入2引脚的状态,从而实现恒压供水的功能。同时,通过使能引脚和指示灯引脚的控制,可以实现控制器的启动和状态显示。请注意,此示例仅供参考,实际应用中需要根据具体情况进行修改和优化。
阅读全文