導(dǎo)購網(wǎng)站如何做淘寶客站長(zhǎng)平臺(tái)網(wǎng)站
文章目錄
- 一、功能簡(jiǎn)介
- 二、軟件設(shè)計(jì)
- 三、實(shí)驗(yàn)現(xiàn)象
- 聯(lián)系作者
一、功能簡(jiǎn)介
本項(xiàng)目使用Proteus8仿真Arduino單片機(jī)控制器,使用LCD1602液晶顯示模塊、WIFI模塊、蜂鳴器、LED按鍵、ADC、DS18B20溫度傳感器等。
主要功能:
系統(tǒng)運(yùn)行后,LCD1602顯示溫度、電量、電壓、電流值;電量0-99%,電壓0-5V,電流0-5A;
可通過WIFI將檢測(cè)數(shù)據(jù)傳輸至終端顯示;
可通過按鍵K3進(jìn)入閾值設(shè)置模式,K3鍵用于切換選擇溫度/電量/電壓/電流閾值,
K1和K2用于調(diào)節(jié)對(duì)應(yīng)閾值,K4用于確定并返回主界面。
當(dāng)溫度超限,報(bào)警指示亮,蜂鳴器報(bào)警;
當(dāng)電量過低,報(bào)警指示,蜂鳴器報(bào)警;
當(dāng)電壓或電流過低,報(bào)警指示亮,蜂鳴器報(bào)警;
當(dāng)出現(xiàn)報(bào)警時(shí),WIFI會(huì)將報(bào)警信息發(fā)送到終端顯示。
二、軟件設(shè)計(jì)
/*
作者:嗨小易(QQ技術(shù)交流群:570487280)*///系統(tǒng)數(shù)據(jù)顯示
void sys_data_show(void)
{u8 buf[5];static u8 i=0;while(1){//正常模式顯示if(sys_ctrl.mode==0){//溫度顯示lcd1602_show_nums(5,0,sys_ctrl.temp,2,0);//電量顯示lcd1602_show_nums(13,0,sys_ctrl.power,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);//WIFI傳輸數(shù)據(jù),溫度、電量、電壓和電流i++;if(i%50==0) {UART_SendString("\r\n溫度:");buf[0]=sys_ctrl.temp/10+0x30;buf[1]=sys_ctrl.temp%10+0x30;buf[2]='\0';UART_SendString(buf);UART_SendString("°C\r\n");UART_SendString("電量:");buf[0]=sys_ctrl.power/10+0x30;buf[1]=sys_ctrl.power%10+0x30;buf[2]='\0';UART_SendString(buf);UART_SendString("%\r\n");UART_SendString("電壓:");buf[0]=sys_ctrl.vol/10+0x30;buf[1]='.';buf[2]=sys_ctrl.vol%10+0x30;buf[3]='\0';UART_SendString(buf);UART_SendString("V\r\n");UART_SendString("電流:");buf[0]=sys_ctrl.cur/10+0x30;buf[1]='.';buf[2]=sys_ctrl.cur%10+0x30;buf[3]='\0';UART_SendString(buf);UART_SendString("A\r\n"); }}//閾值設(shè)置顯示else{//溫度閾值顯示lcd1602_show_nums(4,0,sys_ctrl.temph,2,0);//電量閾值顯示lcd1602_show_nums(13,0,sys_ctrl.powerl,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);//閾值設(shè)定,數(shù)據(jù)位置閃爍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(13,0," ");delay_ms(100);lcd1602_show_nums(13,0,sys_ctrl.powerl,2,0);break;case 3://電壓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 4://電流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; }
}//系統(tǒng)數(shù)據(jù)設(shè)置
void sys_data_set(void)
{u8 key=0;static u8 oneflag=0;key=key_scan(0);//模式設(shè)置if(key==KEY3_PRESS){sys_ctrl.mode++;if(sys_ctrl.mode>4)sys_ctrl.mode=1;if(oneflag==0){oneflag=1;_parm_set_show();//系統(tǒng)參數(shù)設(shè)置顯示}}if(sys_ctrl.mode!=0){//在設(shè)置模式下,加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.powerl++;if(sys_ctrl.powerl>99)sys_ctrl.powerl=0;break;case 3://電壓 sys_ctrl.voll++;if(sys_ctrl.voll>50)sys_ctrl.voll=0;break;case 4://電流 sys_ctrl.curl++;if(sys_ctrl.curl>50)sys_ctrl.curl=0;break;} }//在設(shè)置模式下,減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.powerl--;if(sys_ctrl.powerl<0)sys_ctrl.powerl=99;break;case 3://電壓 sys_ctrl.voll--;if(sys_ctrl.voll<0)sys_ctrl.voll=50;break;case 4://電流 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();//系統(tǒng)開機(jī)界面顯示 } }
}//系統(tǒng)功能控制
void sys_fun_ctrl(void)
{static u8 wdoneflag=0;static u8 dloneflag=0;static u8 dydloneflag=0;//正常工作模式下if(sys_ctrl.mode==0){//溫度高于上限,指示燈亮,蜂鳴器報(bào)警if(sys_ctrl.temp>sys_ctrl.temph){LED_WD=0;beep_alarm(10,1000);UART_SendString("\r\n溫度高...\r\n");wdoneflag=1;}else{LED_WD=1;if(wdoneflag==1){wdoneflag=0; UART_SendString("\r\n溫度OK\r\n");}}//電量低于閾值,指示燈亮,蜂鳴器報(bào)警if(sys_ctrl.power<sys_ctrl.powerl){LED_DL=0;beep_alarm(10,1000);UART_SendString("\r\n電量低...\r\n");dloneflag=1;}else{LED_DL=1;if(dloneflag==1){dloneflag=0; UART_SendString("\r\n電量OK\r\n");}}//電壓或電流低于閾值,指示燈亮,蜂鳴器報(bào)警if(sys_ctrl.vol<sys_ctrl.voll || sys_ctrl.cur<sys_ctrl.curl){LED_DYDL=0;beep_alarm(10,1000);UART_SendString("\r\n電壓電流低...\r\n");dydloneflag=1; }else {LED_DYDL=1;if(dydloneflag==1){dydloneflag=0; UART_SendString("\r\n電壓電流OK\r\n");}} }
}
三、實(shí)驗(yàn)現(xiàn)象
B站演示視頻:https://space.bilibili.com/444388619
聯(lián)系作者
視頻地址:https://space.bilibili.com/444388619/video
專注于51單片機(jī)、STM32、國(guó)產(chǎn)32、DSP、Proteus、arduino、ESP32、物聯(lián)網(wǎng)軟件開發(fā),PCB設(shè)計(jì),視頻分享,技術(shù)交流。