文章目录
一、功能简介二、软件设计三、实验现象联系作者一、功能简介
本项目使用Proteus8仿真51单片机控制器,使用LCD1602显示模块、蜂鸣器、按键模块、NE555模块、HC05蓝牙模块等。
主要功能:
系统运行后,LCD1602显示当前时间、心率和阈值。可通过按键K3进入阈值设置界面,通过K1/K2键进行加减数据,设置好后可按K3键保存并返回主菜单。系统不断检测比较当前传感器值与阈值,若超限控制对应的设备工作。
最终可实现:
1、实时监测心率显示
2、阈值参数设置
3、超限声光报警
4、数据传输移动端
二、软件设计
/*作者:嗨小易(QQ:344379)*///开机界面显示void open_show(void){lcd1602_show_string(0,0,"12:23:15");lcd1602_show_string(11,0,"H:120");lcd1602_show_string(0,1,"Rate: ");lcd1602_show_string(11,1,"L: 60");}//参数设定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=0;}//上限设置while(sys_ctrl.mode==1){//加if(key==KEY1_PRESS){if(sys_ctrl.rateh<250)sys_ctrl.rateh+=THRESHOLD_STEP;}//减else if(key==KEY2_PRESS){if(sys_ctrl.rateh>0)sys_ctrl.rateh-=THRESHOLD_STEP;}lcd1602_show_nums(13,0,sys_ctrl.rateh,3,0);lcd1602_show_cursor(1,15,1);delay_ms(150);lcd1602_show_cursor(1,15,0);delay_ms(150);break;}//下限设置while(sys_ctrl.mode==2){//加if(key==KEY1_PRESS){if(sys_ctrl.ratel<250)sys_ctrl.ratel+=THRESHOLD_STEP;}//减else if(key==KEY2_PRESS){if(sys_ctrl.ratel>0)sys_ctrl.ratel-=THRESHOLD_STEP;}lcd1602_show_nums(13,1,sys_ctrl.ratel,3,0);lcd1602_show_cursor(2,15,1);delay_ms(150);lcd1602_show_cursor(2,15,0);delay_ms(150);break;}}//数据采集void sys_get_data(void){while(sys_ctrl.mode==0){//读取时间ds1302_read_time();break;}}//采集数据显示void sys_data_show(void){u8 buf[9];static u8 i=0;while(sys_ctrl.mode==0){//采集完成if(sys_ctrl.sta==1){lcd1602_show_nums(5,1,sys_ctrl.rate,3,0);sys_ctrl.sta=0;t=0;EX0=1;//打开计数}//时间显示buf[0]=gDS1302_TIME[2]/16+0x30;buf[1]=gDS1302_TIME[2]%16+0x30;buf[2]=':';buf[3]=gDS1302_TIME[1]/16+0x30;buf[4]=gDS1302_TIME[1]%16+0x30;buf[5]=':';buf[6]=gDS1302_TIME[0]/16+0x30;buf[7]=gDS1302_TIME[0]%16+0x30;buf[8]='\0';lcd1602_show_string(0,0,buf);//阈值显示lcd1602_show_nums(13,0,sys_ctrl.rateh,3,0);lcd1602_show_nums(13,1,sys_ctrl.ratel,3,0);//串口数据传输i++;if(i%50==0){buf[0]=sys_ctrl.rate/100+0x30;if(buf[0]==0x30)buf[0]=' ';buf[1]=sys_ctrl.rate%100/10+0x30;buf[2]=sys_ctrl.rate%100%10+0x30;buf[3]='\0';UART_SendString("\r\n检测心率:");UART_SendString(buf);UART_SendString("\r\n");}break;}}//报警监测void alarm_check(void){while(sys_ctrl.mode==0){//如果检测心率高于上限,声光报警,上传上位机if(sys_ctrl.rate>sys_ctrl.rateh){LEDH=0;beep_alarm(100,20);UART_SendString("\r\n心率异常!!!\r\n");}//如果检测心率低于下限,声光报警,上传上位机else if(sys_ctrl.rate<sys_ctrl.ratel){LEDL=0;beep_alarm(100,20);UART_SendString("\r\n心率异常!!!\r\n");}//如果检测心率正常,关闭声光报警else{LEDH=1;LEDL=1;}break;}}//智能养殖装置的设计控制系统void appdemo_show(void){sys_para_init();//系统参数初始化lcd1602_init();UART_Init();time0_init();exti0_init();delay_ms(1000);//ds1302_init();open_show();//初始界面while(1){key_set_threshold();//参数设定sys_get_data();//数据采集sys_data_show();//采集数据显示alarm_check();//报警监测}}
三、实验现象
B站演示视频:/444388619
联系作者
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。