赞
踩
本项目使用Proteus8仿真Arduino单片机控制器,使用LCD1602显示模块、DS18B20温度传感器、PCF8691 ADC模块、按键、LED蜂鸣器模块等。
主要功能:
系统运行后,LCD1602显示温度、电压、电流值;电压0-5V,电流0-5A;可通过按键K3进入阈值设置模式,K3键用于切换选择温度阈值、电压、电流,K1和K2用于调节对应阈值,K4用于确定并返回主界面。当温度超限,温度报警指示,蜂鸣器报警;当电压超限,电压报警指示,蜂鸣器报警;当电流超限,电流报警指示,蜂鸣器报警;
/* 作者:嗨小易(QQ:3443792007) */ //系统数据获取 void sys_data_get(void) { static u8 i=0; u8 temp=0; while(1) { //温度获取 i++; if(i%5==0) sys_ctrl.temp=DS18B20_GetTemperture(); //电压获取 temp=pcf8591_read_adcvalue(0); temp=pcf8591_read_adcvalue(0); sys_ctrl.vol=((float)temp*3.3/255)*10; //电流获取 temp=pcf8591_read_adcvalue(1); temp=pcf8591_read_adcvalue(1); sys_ctrl.cur=((float)temp*3.3/255)*10; break; } } //系统数据显示 void sys_data_show(void) { u8 buf[5]; while(1) { //正常模式显示 if(sys_ctrl.mode==0) { //温度显示 lcd1602_show_nums(5,0,sys_ctrl.temp,2,0); //电压显示 buf[0]=sys_ctrl.vol/10+0x30; buf[1]='.'; buf[2]=sys_ctrl.vol%10+0x30; buf[3]='\0'; lcd1602_show_string(2,1,buf); //电流显示 buf[0]=sys_ctrl.cur/10+0x30; buf[1]='.'; buf[2]=sys_ctrl.cur%10+0x30; buf[3]='\0'; lcd1602_show_string(12,1,buf); } //阈值设置显示 else { //温度阈值显示 lcd1602_show_nums(4,0,sys_ctrl.temph,2,0); //电压阈值显示 buf[0]=sys_ctrl.voll/10+0x30; buf[1]='.'; buf[2]=sys_ctrl.voll%10+0x30; buf[3]='\0'; lcd1602_show_string(3,1,buf); //电流阈值显示 buf[0]=sys_ctrl.curl/10+0x30; buf[1]='.'; buf[2]=sys_ctrl.curl%10+0x30; buf[3]='\0'; lcd1602_show_string(12,1,buf); //阈值设定,数据位置闪烁 switch(sys_ctrl.mode) { case 1://温度 lcd1602_show_string(4,0," "); delay_ms(100); lcd1602_show_nums(4,0,sys_ctrl.temph,2,0); break; case 2://电压 lcd1602_show_string(3,1," "); delay_ms(100); buf[0]=sys_ctrl.voll/10+0x30; buf[1]='.'; buf[2]=sys_ctrl.voll%10+0x30; buf[3]='\0'; lcd1602_show_string(3,1,buf); break; case 3://电流 lcd1602_show_string(12,1," "); delay_ms(100); buf[0]=sys_ctrl.curl/10+0x30; buf[1]='.'; buf[2]=sys_ctrl.curl%10+0x30; buf[3]='\0'; lcd1602_show_string(12,1,buf); break; } } break; } } //系统数据设置 void sys_data_set(void) { u8 key=0; static u8 oneflag=0; key=KEY_Scan(0); //模式设置 if(key==KEY3_PRESS) { sys_ctrl.mode++; if(sys_ctrl.mode>=4)sys_ctrl.mode=1; if(oneflag==0) { oneflag=1; _parm_set_show();//系统参数设置显示 } } if(sys_ctrl.mode!=0) { //在设置模式下,加 if(key==KEY1_PRESS) { switch(sys_ctrl.mode) { case 1://温度 sys_ctrl.temph++; if(sys_ctrl.temph>99)sys_ctrl.temph=0; break; case 2://电压 sys_ctrl.voll++; if(sys_ctrl.voll>50)sys_ctrl.voll=0; break; case 3://电流 sys_ctrl.curl++; if(sys_ctrl.curl>50)sys_ctrl.curl=0; break; } } //在设置模式下,减 else if(key==KEY2_PRESS) { switch(sys_ctrl.mode) { case 1://温度 sys_ctrl.temph--; if(sys_ctrl.temph<0)sys_ctrl.temph=99; break; case 2://电压 sys_ctrl.voll--; if(sys_ctrl.voll<0)sys_ctrl.voll=50; break; case 3://电流 sys_ctrl.curl--; if(sys_ctrl.curl<0)sys_ctrl.curl=50; break; } } //确定 else if(key==KEY4_PRESS) { sys_ctrl.mode=0; oneflag=0; sys_open_show();//系统开机界面显示 } } } //系统功能控制 void sys_fun_ctrl(void) { //正常工作模式下 if(sys_ctrl.mode==0) { //温度高于上限,温度高指示,蜂鸣器报警 if(sys_ctrl.temp>sys_ctrl.temph) { LED_WDH=0; beep_alarm(10,1000); } else { LED_WDH=1; } //电压低于阈值,电压报警指示,蜂鸣器报警 if(sys_ctrl.vol<sys_ctrl.voll) { LED_DYL=0; beep_alarm(10,1000); } else { LED_DYL=1; } //电流低于阈值,电流报警指示,蜂鸣器报警 if(sys_ctrl.cur<sys_ctrl.curl) { LED_DLL=0; beep_alarm(10,1000); } else { LED_DLL=1; } } }
B站演示视频:https://space.bilibili.com/444388619
视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。