做网站一般用什么几号字,运行网站需要多少钱,搜索引擎广告案例,如何做擦边球网站文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介
本项目使用Proteus8仿真Arduino单片机控制器#xff0c;使用LCD1602液晶、按键、蜂鸣器、液位传感器、ADC转换器、水泵等。
主要功能#xff1a; 系统运行后#xff0c;LCD1602显示当前水位、上下限阈… 文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介
本项目使用Proteus8仿真Arduino单片机控制器使用LCD1602液晶、按键、蜂鸣器、液位传感器、ADC转换器、水泵等。
主要功能 系统运行后LCD1602显示当前水位、上下限阈值和工作模式系统默认处于自动模式。 若检测水位高于上限声光报警开启抽水。若检测水位低于下限声光报警开启加水。 可操作K4键切换为手动模式然后通过K1/K2键开启加水和开启抽水。再次按下K4键回到自动模式。 若要修改上下限阈值可通过K3键进入上下限设置光标定位修改的值K1和K2进行加减。 还可通过串口助手进行参数修改和模式切换指令(十六进制)如下 加–01 减–02 模式–03 确定/自手动–04 二、软件设计
/*
作者嗨小易QQ技术交流群570487280*///系统数据获取
void sys_data_get(void)
{u8 ad_value0;float vol0;while(1){//读取压力AD值ad_valuepcf8591_read_adcvalue(0);//计算电压vol(float)ad_value*5.0/256;//计算液位高度VOK*H∮0.038*H1.105(V) //H单位cmsys_ctrl.level(vol-1.105)/0.038;if(sys_ctrl.level0)sys_ctrl.level0;break;}
}//系统数据显示
void sys_data_show(void)
{while(1){//显示当前液位lcd1602_show_nums(5,0,sys_ctrl.level,3,0);//液位阈值显示lcd1602_show_nums(2,1,sys_ctrl.levell,3,0);lcd1602_show_nums(11,1,sys_ctrl.levelh,3,0);//自动手动模式显示if(sys_ctrl.auto_flag1)lcd1602_show_string(12,0,Manl);else lcd1602_show_string(12,0,Auto);//阈值设置位置闪烁switch(sys_ctrl.mode){case 1://液位下限lcd1602_show_string(2,1, );delay_ms(100);lcd1602_show_nums(2,1,sys_ctrl.levell,3,0);break;case 2://液位上限lcd1602_show_string(11,1, );delay_ms(100);lcd1602_show_nums(11,1,sys_ctrl.levelh,3,0);break;}break; }
}//系统数据设置
void sys_data_set(void)
{u8 key0;keyKEY_Scan(0);//模式设置if(keyKEY3_PRESS || USART1_RX_BUF[0]MODE_CMD){USART1_RX_BUF[0]0;//自动模式下模式设置if(sys_ctrl.auto_flag0){sys_ctrl.mode;if(sys_ctrl.mode2)sys_ctrl.mode1;}//手动模式下停止开关else{MOTOR_JS1;MOTOR_CS1; }}//在设置模式下加else if(keyKEY1_PRESS || USART1_RX_BUF[0]ADD_CMD){USART1_RX_BUF[0]0;switch(sys_ctrl.mode){case 1://液位下限 sys_ctrl.levell;if(sys_ctrl.levell100)sys_ctrl.levell0;break;case 2://液位上限 sys_ctrl.levelh;if(sys_ctrl.levelh100)sys_ctrl.levelh0;break;}//手动模式加水控制if(sys_ctrl.auto_flag1){MOTOR_JS0;MOTOR_CS1;}}//在设置模式下减else if(keyKEY2_PRESS || USART1_RX_BUF[0]MIN_CMD){USART1_RX_BUF[0]0;switch(sys_ctrl.mode){case 1://液位下限 sys_ctrl.levell--;if(sys_ctrl.levell0)sys_ctrl.levell100;break;case 2://液位上限 sys_ctrl.levelh--;if(sys_ctrl.levelh0)sys_ctrl.levelh100;break;}//手动模式抽水控制if(sys_ctrl.auto_flag1){MOTOR_JS1;MOTOR_CS0; }}//确定/自手动else if(keyKEY4_PRESS || USART1_RX_BUF[0]SWITCH_CMD) {USART1_RX_BUF[0]0;if(sys_ctrl.mode!0)//确定sys_ctrl.mode0;else//自动/手动切换{sys_ctrl.auto_flag!sys_ctrl.auto_flag;//自动模式下关闭加水/抽水if(sys_ctrl.auto_flag0){MOTOR_JS1;MOTOR_CS1; } } }
}//系统功能控制
void sys_fun_ctrl(void)
{//正常模式if(sys_ctrl.mode0){//自动模式下控制if(sys_ctrl.auto_flag0){//如果液位高于上限声光报警开启抽水if(sys_ctrl.levelsys_ctrl.levelh){MOTOR_JS1;MOTOR_CS0;beep_alarm(100,20);}//如果液位低于下限声光报警开启加水else if(sys_ctrl.levelsys_ctrl.levell){MOTOR_JS0;MOTOR_CS1;beep_alarm(100,20);}//正常液位关闭加水抽水else{MOTOR_JS1;MOTOR_CS1;}}}
}//应用控制系统
void appdemo_show(void)
{sys_parm_init();//系统参数初始化KEY_Init();BEEP_Init();ctrl_pin_init();USART1_Init(9600);printf(USART1 Init OK...\r\n);pcf8591_init();lcd1602_init();//LCD1602初始化sys_open_show();//系统开机界面显示while(1){sys_data_get();//系统数据获取sys_data_show();//系统数据显示sys_data_set();//系统数据设置sys_fun_ctrl();//系统功能控制 }
} 三、实验现象
B站演示视频https://space.bilibili.com/444388619 联系作者
视频地址https://space.bilibili.com/444388619/video 专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发PCB设计视频分享技术交流。