文章目录

  • 一、主要功能
  • 二、硬件资源
  • 三、软件设计
  • 四、实验现象
  • 联系作者

一、主要功能

本项目使用Proteus8仿真51单片机控制器,使用LCD1602液晶模块、按键模块、雨滴传感器、ADC、LED模块等。

主要功能:
系统运行后,LCD1602显示雨刷器当前模式、雨量、档位和状态。
默认工作在手动模式,对应手动模式指示灯亮,K3键可控制雨刷启动和停止,可通过K4键调节雨刷档位速度。当按下K2键切换为自动模式,此时自动模式指示灯亮,若检测雨滴量值在阈值范围内,根据对应值匹配到速度档位运行,若超过最大值,则以最高速运行,若低于最低值,则关闭雨刷。可通过K1键设置阈值范围,K2和K3键进行加减调节。 系统整个过程会在LCD1602液晶上显示对应的速度档位、雨刷状态,雨量值和手动/自动模式。
主要功能:
按键控制:自动/手动切换,设定雨量阈值、速度等;
显示控制:LCD1602显示雨量、档位、阈值、雨刷状态等;
驱动电路:使用ULN2003控制步进电机模拟雨刷转动;
检测电路:使用传感器检测当前雨量,通过ADC转换;
调速控制:根据雨量大小控制雨刷转动速度;
自动模式:自动模式根据雨量自动控制;
手动模式:通过按键控制雨刷启停、速度。


二、硬件资源

1、51单片机核心模块
2、LCD1602液晶模块
3、雨滴传感器、ADC模块
4、按键、LED模块
5、步进电机驱动模块


三、软件设计

/*
作者:嗨小易(QQ:3443792007)
*///参数初始化
void sys_parm_init(void)
{sys_ctrl.dir=0;sys_ctrl.gear=3;sys_ctrl.run=0;sys_ctrl.ad_valh=50;sys_ctrl.ad_vall=20;sys_ctrl.mode=0;sys_ctrl.setflag=0;   sys_ctrl.zeroflag=1;
}//系统初始界面显示
void sys_open_show(void)
{lcd1602_clear();lcd1602_show_string(0,0,"RN:   %");lcd1602_show_string(8,0,"SD");lcd1602_show_string(11,0," ");lcd1602_show_string(13,0,"OFF");lcd1602_show_string(0,1,"MAX:  %");lcd1602_show_string(9,1,"MIN:  %");//初始手动模式SD_LED=0;ZD_LED=1;
}//系统参数获取
void sys_parm_get(void)
{while(1){//读取雨量AD值sys_ctrl.ad_val=pcf8591_read_adcvalue(0);//将范围0-255映射到0-100sys_ctrl.ad_val=cal_map(sys_ctrl.ad_val,0,255,0,100);break;}
}//系统参数设定
void sys_parm_set(void)
{u8 key=0;key=key_scan(0);//阈值设置if(key==KEY1_PRESS){sys_ctrl.setflag++;if(sys_ctrl.setflag>=3)sys_ctrl.setflag=0;sys_ctrl.run=0;if(sys_ctrl.run)lcd1602_show_string(13,0,"ON ");else lcd1602_show_string(13,0,"OFF");}//上限设置if(sys_ctrl.setflag==1){if(key==KEY2_PRESS)//加{sys_ctrl.ad_valh++;if(sys_ctrl.ad_valh>=100)sys_ctrl.ad_valh=0;}else if(key==KEY3_PRESS)//减{sys_ctrl.ad_valh--;if(sys_ctrl.ad_valh<=0)sys_ctrl.ad_valh=99;}lcd1602_show_string(4,1,"  ");    }//下限设置if(sys_ctrl.setflag==2){if(key==KEY2_PRESS)//加{sys_ctrl.ad_vall++;if(sys_ctrl.ad_vall>=100)sys_ctrl.ad_vall=0;}else if(key==KEY3_PRESS)//减{sys_ctrl.ad_vall--;if(sys_ctrl.ad_vall<=0)sys_ctrl.ad_vall=99;}lcd1602_show_string(13,1,"  ");    }//未设置阈值if(sys_ctrl.setflag==0){//雨刷开启/关闭if(key==KEY3_PRESS){sys_ctrl.run=!sys_ctrl.run;if(sys_ctrl.run)lcd1602_show_string(13,0,"ON ");else lcd1602_show_string(13,0,"OFF");}//自动/手动模式切换else if(key==KEY2_PRESS){sys_ctrl.mode=!sys_ctrl.mode;if(sys_ctrl.mode){SD_LED=1;ZD_LED=0;}else {SD_LED=0;ZD_LED=1;}sys_ctrl.run=0;if(sys_ctrl.run)lcd1602_show_string(13,0,"ON ");else lcd1602_show_string(13,0,"OFF");}//手动模式下档位调节if(sys_ctrl.mode==0){if(key==KEY4_PRESS){sys_ctrl.gear++;if(sys_ctrl.gear>=6)sys_ctrl.gear=1;  }   }}
}//系统参数显示
void sys_parm_show(void)
{while(1){//雨量值显示lcd1602_show_nums(3,0,sys_ctrl.ad_val,3,0);//雨量阈值显示lcd1602_show_nums(4,1,sys_ctrl.ad_valh,2,0);lcd1602_show_nums(13,1,sys_ctrl.ad_vall,2,0);//档位显示lcd1602_show_nums(11,0,sys_ctrl.gear,1,0);break;}
}//系统参数控制
void sys_parm_ctrl(void)
{static u16 i=0;u16 len=0;//手动模式if(sys_ctrl.mode==0){//雨刷开启后,以初始档位运行if(sys_ctrl.run){i++;if(i==1){step_motor_28BYJ48_send_pulse(4,0,gspeed[sys_ctrl.gear-1],1,sys_ctrl.run); sys_ctrl.zeroflag=0;}      if(i==3){i=0;step_motor_28BYJ48_send_pulse(4,1,gspeed[sys_ctrl.gear-1],1,sys_ctrl.run);sys_ctrl.zeroflag=1;}        }//雨刷关闭else{step_motor_28BYJ48_send_pulse(4,1,gspeed[sys_ctrl.gear-1],1,sys_ctrl.run);      }       }//自动模式else{if(sys_ctrl.run)lcd1602_show_string(13,0,"ON ");else lcd1602_show_string(13,0,"OFF");//采集雨水量大于上限值,已最高档位运行雨刷if(sys_ctrl.ad_val>=sys_ctrl.ad_valh){sys_ctrl.gear=5;//最高档位sys_ctrl.run=1;i++;if(i==1)step_motor_28BYJ48_send_pulse(4,0,gspeed[sys_ctrl.gear-1],1,sys_ctrl.run);   if(i==3){i=0;step_motor_28BYJ48_send_pulse(4,1,gspeed[sys_ctrl.gear-1],1,sys_ctrl.run);}     }//采集雨量小于下限值,雨刷停止else if(sys_ctrl.ad_val<=sys_ctrl.ad_vall){sys_ctrl.run=0; step_motor_28BYJ48_send_pulse(4,1,gspeed[sys_ctrl.gear-1],1,sys_ctrl.run);}//在阈值范围内,根据雨量大小自动调节速度else{sys_ctrl.run=1;len=(sys_ctrl.ad_valh-sys_ctrl.ad_vall)/3;if(sys_ctrl.ad_val>sys_ctrl.ad_vall && sys_ctrl.ad_val<=sys_ctrl.ad_vall+len){sys_ctrl.gear=1;  }else if(sys_ctrl.ad_val>sys_ctrl.ad_vall+len && sys_ctrl.ad_val<=sys_ctrl.ad_vall+2*len){sys_ctrl.gear=2;}else if(sys_ctrl.ad_val>sys_ctrl.ad_vall+2*len && sys_ctrl.ad_val<=sys_ctrl.ad_vall+3*len){sys_ctrl.gear=3;}else if(sys_ctrl.ad_val>sys_ctrl.ad_vall+3*len && sys_ctrl.ad_val<=sys_ctrl.ad_vall+4*len){sys_ctrl.gear=4;    }i++;if(i==1)step_motor_28BYJ48_send_pulse(4,0,gspeed[sys_ctrl.gear-1],1,sys_ctrl.run); if(i==3){i=0;step_motor_28BYJ48_send_pulse(4,1,gspeed[sys_ctrl.gear-1],1,sys_ctrl.run);}}    }   }//应用控制系统
void appdemo_show(void)
{sys_parm_init();//系统参数初始化lcd1602_init();//LCD1602初始化sys_open_show();//系统初始界面显示while(1){sys_parm_set();sys_parm_get();sys_parm_show();sys_parm_ctrl();      }
}

四、实验现象

B站演示视频:https://space.bilibili.com/444388619




联系作者

B站演示视频:https://space.bilibili.com/444388619
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

【Proteus仿真】【51单片机】智能雨刷器设计相关推荐

  1. 基于51单片机智能有毒气体检测仪设计(煤气、酒精、co)(转发分享)

    本设计由STC89C52单片机电路+LCD1602液晶显示电路+MQ-2甲烷传感器模块电路+MQ-3酒精传感器模块电路+MQ-9 CO传感器电路+A/D采样PCF8591电路+蜂鸣器报警电路+LED指 ...

  2. 单片机四路抢答器课程C语言设计,基于51单片机四路抢答器设计

    内容简介: 毕业设计 基于51单片机四路抢答器设计 共25页,9905字 随着经济水平的不断提高,人们在物质文明得到满足的同时更注重精神文明的追求,各种娱乐节目不断涌现,提高节目的质量尤为重要..本次 ...

  3. 单面机51小车程序_车辆工程学院举行“51单片机智能小车”电子设计成果答辩展示...

    用理论指导实践,以实践检验理论.6月28日,车辆工程学院在汽车科技馆二楼举行了"51单片机智能小车"电子设计成果展示,旨在加强学生学以致用能力,提升学生实践创新水平.2017级教改 ...

  4. Proteus仿真51单片机生日快乐音乐播放器

    实验名称:基于51单片机音乐播放器 实验目的: 声音的音调不同是因为声音的频率不同造成的.那么,就可以通过单片机发送不同频率的脉冲信号给蜂鸣器,来达到让蜂鸣器发出不同音调声音的目的.不同频率的脉冲信号 ...

  5. 51单片机 Proteus仿真 基于单片机的篮球计分器设计 LCD

    基于单片机的篮球计分器设计 设计LCD显示篮球比分牌 通过加分按钮可以给A队或B队加分 设计对调功能,A队和B队分数互换,意味着中场交换场地 显示比赛倒计时功能 创新内容:如显示第几小节

  6. 使用proteus仿真51单片机来实现十字路口红绿灯

    一.实验内容 1.需要仿真的元件:51单片机,一个动态显示的双数码管,六个LED灯. 2.实验要求:做一个十字路口红绿灯,每一向各一个,红绿灯要求能够按照通行的要求来亮灯.南北向红绿灯,红灯亮60秒, ...

  7. 毕业设计 单片机智能录音器设计与实现 - 物联网 嵌入式

    文章目录 1 简介 2 绪论 2.1 课题背景与目的 3 系统设计 3.1 系统架构 3.2 硬件部分 3.3 软件部分 主程序流程 录放声音程序设计 LCD12864 程序设计 DS1302 程序设 ...

  8. 基于51单片机智能指纹锁设计

    资料编号:181 功能讲解: 本设计师以51单片机作为核心微控制器通过单片机串口通信发送指令控制指纹识别模块进行存贮指纹比对指纹的作业.具体工作原理如下 1.指纹登陆的过程 指纹登陆时通过51单片机发 ...

  9. 基于51单片机智能温控风扇设计PWM调速套件电子制作仿真

    演示视频:http://v.youku.com/v_show/id_XMzk0OTM5Nzk5Ng==.html?spm=a2hzp.8244740.0.0 将链接复制至IE浏览器打开!!! 功能操作 ...

最新文章

  1. js 选择 checkbox
  2. php单表查询语句,单表查询
  3. VTK:非结构化网格之ClipUnstructuredGridWithPlane2
  4. Java黑皮书课后题第7章:7.4(分析成绩)编写一个程序,读入个数不确定的考试分数,并且判断有多少个分数是大于或等于平均分,多少个分数是低于平均分的。输入一个负数表示输入结束。假设最高分是100
  5. ML.NET 示例:图像分类模型训练-首选API(基于原生TensorFlow迁移学习)
  6. BugkuCTF-Reverse题游戏过关多解法
  7. Error: Cannot Determine the location of the VS common tools folder
  8. 【论文研读】【医学图像分割】【BCRNN】Fine-grained Recurrent Neural Networks for Automatic Prostate Segmentation ...
  9. 无本经营?2021做电商跨境shopee平台赚钱很轻松!
  10. 如何去掉桌面图标快捷方式的小箭头(小技巧)
  11. 用JAVA时间类计算今天到指定日期的天数统计
  12. c语言循环中怎样读取多行,c++循环读取多行文本文件
  13. 蜜蜂在挡板外和框梁顶造赘脾的几个要素及处理方法
  14. 洛谷P1080 [NOIP2012 提高组] 国王游戏(贪心,高精度)
  15. Jacobi 和 Gauß-Seidel 迭代方法
  16. 李彦宏:未来五年语音图片搜索将超过文字
  17. 说说WM_DESTROY和WM_NCDESTROY的区别
  18. PTA-c语言 水仙花数
  19. cad快看_CAD看图软件览图模式及其功能介绍
  20. Sony xperia xz1compact - 重刷固件ROM和解锁ROOT教程

热门文章

  1. ubuntu 18.04安装vnc
  2. Mybatis中foreach的三种用法
  3. 如何查看Win11可以升级22h2?Win11升级22h2的方法
  4. vue中进度条写法_vue中自制进度条
  5. ConvertUtils.register注册转换器
  6. [UE4]不错的音效插件WWISE
  7. HTML5与CSS3总结
  8. md本地免费编辑器推荐-marktext
  9. Win11C盘满了怎么清理?Win11清理C盘的方法
  10. rap2使用姿势——前端、后端、测试必看(多gif图)