技术标签: 51单片机 c语言 proteus 嵌入式硬件 【Proteus仿真】【51单片机】趣味项目设计
1、压力液位检测
2、阈值设定,超限报警
3、压力液位显示
4、补排水自动控制
1、51单片机核心模块
2、PCF8591 AD/DA模块
3、LCD1602液晶模块
4、蜂鸣器模块
5、排水、补水控制电路
6、按键模块
#include "appdemo.h"
#include "lcd1602.h"
#include "key.h"
#include "beep.h"
#include "pcf8591.h"
#include "exti.h"
//定义补水控制脚
sbit MOTOR_BS=P1^0;
//定义排水控制脚
sbit MOTOR_PS=P1^1;
//定义结构体
_sys_ctrl sys_ctrl;
//阈值设定
void key_set_threshold(void)
{
u8 key=0;
key=key_scan(0);
//模式设定显示
if(key==KEY3_PRESS)
{
sys_ctrl.mode++;
if(sys_ctrl.mode>=3)sys_ctrl.mode=1;
lcd1602_clear();
switch(sys_ctrl.mode)
{
case 1://液位上限设置显示界面
lcd1602_show_string(0,0,"LevelH Set:");
break;
case 2://液位下限设置显示界面
lcd1602_show_string(0,0,"LevelL Set:");
break;
default :
lcd1602_show_string(0,0,"Display Error");
break;
}
}
//确定,返回主界面
else if(key==KEY4_PRESS)
{
sys_ctrl.mode=0;
lcd1602_clear();
lcd1602_show_string(0,0," Current Level ");
lcd1602_show_string(0,1," mm");
}
//液位上限设置
if(sys_ctrl.mode==1)
{
if(key==KEY1_PRESS)//加
{
sys_ctrl.levelh+=THRESHOLD_STEP;
if(sys_ctrl.levelh>MAX_VALUE)sys_ctrl.levelh=0;
}
else if(key==KEY2_PRESS)//减
{
sys_ctrl.levelh-=THRESHOLD_STEP;
if(sys_ctrl.levelh<0)sys_ctrl.levelh=MAX_VALUE;
}
lcd1602_show_nums(0,1,sys_ctrl.levelh,4,0);
}
//液位下限设置
else if(sys_ctrl.mode==2)
{
if(key==KEY1_PRESS)//加
{
sys_ctrl.levell+=THRESHOLD_STEP;
if(sys_ctrl.levell>MAX_VALUE)sys_ctrl.levell=0;
}
else if(key==KEY2_PRESS)//减
{
sys_ctrl.levell-=THRESHOLD_STEP;
if(sys_ctrl.levell<0)sys_ctrl.levell=MAX_VALUE;
}
lcd1602_show_nums(0,1,sys_ctrl.levell,4,0);
}
}
//参数初始化
void sys_para_init(void)
{
sys_ctrl.mode=0;
sys_ctrl.levelh=80;
sys_ctrl.levell=20;
}
//数据采集
void sys_get_data(void)
{
u8 i=0;
u8 ad_value=0;
float vol=0;
while(sys_ctrl.mode==0)
{
i++;
if(i%200==0)
{
//读取压力AD值
ad_value=pcf8591_read_adcvalue(0);
//计算电压
vol=(float)ad_value*5.0/256;
//计算液位高度VO=K*H+∮=0.038*H+1.105(V) //H单位mm
sys_ctrl.level=(vol-1.105)/0.038;
if(sys_ctrl.level<=0)sys_ctrl.level=0;
break;
}
delay_ms(1);
}
}
//采集数据显示
void sys_data_show(void)
{
while(sys_ctrl.mode==0)
{
lcd1602_show_nums(0,1,sys_ctrl.level,4,0);
break;
}
}
//液位自动控制
void auto_control(void)
{
while(sys_ctrl.mode==0)
{
//上限阈值,排水开启,补水关闭,蜂鸣器报警
if(sys_ctrl.level>sys_ctrl.levelh)
{
MOTOR_PS=0;
MOTOR_BS=1;
beep_alarm(100,20);
}
//下限阈值,排水关闭,补水开启,蜂鸣器报警
else if(sys_ctrl.level<sys_ctrl.levell)
{
MOTOR_PS=1;
MOTOR_BS=0;
beep_alarm(100,20);
}
//正常液位,排水关闭,补水关闭
else
{
MOTOR_PS=1;
MOTOR_BS=1;
}
break;
}
}
//智能温湿度大棚控制系统
void appdemo_show(void)
{
lcd1602_init();
//初始界面
lcd1602_show_string(0,0," Current Level ");
lcd1602_show_string(0,1," mm");
sys_para_init();//系统参数初始化
sys_get_data();
while(1)
{
key_set_threshold();//阈值设定
sys_get_data();//数据采集
sys_data_show();//采集数据显示
auto_control();//温湿度自动控制
}
}
B站演示视频:https://space.bilibili.com/444388619
B站演示视频:https://space.bilibili.com/444388619
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。
1. 特征检测方法1.1. 特征定义1.2. 角点检测原理1.2.1. Harris角点检测原理1.2.2. Tomasi角点检测原理1.2.3. SURF特征检测1.2.4. SIFT特征点检测1.2.5. HOG 特征检测1.2.6. LBP 特征提取1.2.6.1. 原始LBP1.2.6.2. 圆形LBP算子1.3. HAAR特征提取1.3.1. 1.什么是haar特征?1.3.2. 2.如何利用特征 区分目标?1.3.3. 3.如何得到这个判决?1..._opencv扩展模块学习
Docker-部署SonarQube_docker 部署sonar
1. 查看网卡UUIDnmcli con show2. 查看网卡MAC地址ip addr3. 修改网卡信息我的虚拟机之前只有一个网卡ifcfg-enp0s3, 现在将原有的网卡拷贝一份, 并进行修改[root@localhost donl]# cd /etc/sysconfig/network-scripts/[root@localhost network-scripts]#..._centos虚拟机如何修改enp0s8网卡ip
1,给vue组件绑定事件时候,必须加上native ,否则会认为监听的是来自Item组件自定义的事件2,等同于在子组件中: 子组件内部处理click事件然后向外发送click事件:$emit(“click”.fn)1<Item @click.native = “shijian()”>...
360安全浏览器是基于IE内核的浏览器。360极速浏览器,采用双核设计,IE内核和Chromium内核。_360浏览器java
文章目录*交集选择器作用格式注意点并集选择器作用格式注意点相邻兄弟选择器作用格式注意点通用兄弟选择器作用格式注意点*交集选择器作用给所有选择器选中的标签中,相交的那部分设置属性。格式选择器1 选择器2{ 属性:值;}注意点1.选择器和选择器之间没有任何连接符号;2.选择器可以使用标签名称/id名称/class名称;3.仅了解。并集选择器作用给所有选择器选中的标签设置属性。格式选择器1,选择器2{属性:值;}注意点1.并集选择器必须使用,来连接;2.选择器可以使用
root@master-node:/tmp/k8s-1.6/production/memcached# kubectl get pod --all-namespacesNAMESPACE NAME READY STATUS RESTARTS AGEdefault pro-w-mem-1448348793-..._error: error contacting notary server: dial tcp: lookup notary.docker.io on
运算符的优先级是怎样的?c语言中各种运算符的优先级运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符()和逗号运算符c语言上运算符优先级是怎样的啊简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符。c语..._c语言运算符优先级
相信了解过Python语言的同学都听过这样一句话“人生苦短,我用Python”,那么大家为什么这么说呢,下面带大家好好说说,为什么“人生苦短,我用Python”。海风教育在线辅导0元一对一试听课等你来领取,领取课程方法:1、私信留下您的手机号和姓名,需要补习的科目。2、也可以在海风教育官网留下您的手机号领取 https://www.hfjy.com一个语言的崛起不可分割的就是使用的开发者...
迭代SDV是针对当前迭代内所有Story的完整测试(也会有针对前次迭代问题修改的回归),包括功能的、非功能的。SDV测试的主体是测试人员,项目也可能根据实际情况调整人员一起完成本迭代的SDV测试。SDV测试在Story测试(ST)的基础上,增加针对Story之间的依赖相关的用例和测试代码,当然测试的前提条件也是所有Story的AT和ST要能全部测试通过。对实现了..._sdv阶段需要关注系统基本功能测试
“告诉我,你买用友了吗”上证指数重返3000点,两市成交额突破万亿,创业板指涨超2%再创3年新高,尾盘金融股发力上攻,恒指收盘涨0.99%,港股三大股指至此全部步入技术性牛市;在美联储释..._大牛市,拉软件股
python_python在matplotlib用ransac拟合直线