目录
一、主要功能
基于STM32单片机,通过滑动变阻器模拟电压传感器检测电压,通过12864显示显示电压和电压阈值,按键可以控制阈值的增加,并通过串口实时显示相关参数和状态
二、硬件资源
基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。
编辑
三、程序编程
#include "stm32f10x.h"#include "usart.h"#include "delay.h"#include "sys.h"#include "led.h"#include "adc.h"#include "key.h"#include "oled.h"#include "code.h"#include "bmp.h"u16 t;
u16 times=0;
u16 times1 = 0;
u16 times2 = 0;
u8 LsensVal=0; //将电压传感器的值赋值给LsensVal PF.7u8 key=0;void Check\_serial\_KEY(void);void Check(void);void serial_port(void);
int main(void)
{
LED_Init(); //初始化与LED连接的硬件接口
Adc\_Init(); delay\_init(); KEY\_Init(); Lsens\_Init(); //初始化电压传感器端口
uart\_init(57600); OLED\_Init(); OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
printf("开机测试完成!\\r\\n"); OLED\_Clear(); OLED\_Display_Sensitizer();//显示传感器种类
OLED\_Display\_Welcome();//
printf("开机测试完成!\\r\\n"); printf("\\r\\n欢迎使用!\\r\\n"); // 初始化完成并测试串口
LED0 = 1;
LED1 = 0; while(1)
{ Check\_serial\_KEY(); //按键控制函数
Check(); serial_port();
if(LsensVal > dyyz)
{
LED0 = 0;
LED1 = 1; if(times1 %20 == 1)
{ printf("电压过高,请注意\\r\\n");
}
times1++;
} else
{
LED0 = 1;
LED1 = 0; if(times2 %20 == 1)
{ printf("电压正常\\r\\n");
}
times2++;
}
}
} //串口传输函数,并检查void serial_port(){
LsensVal=Lsens\_Get\_Val(); //将电量传感器的值赋值
for(t=0;t<1;t++) //Proteus的STM32F103仿真模型只能正确接收第一个字符
{
USART1->DR=USART\_RX\_BUF\[t\]; while((USART1->SR&0X40)==0);//等待发送结束
} if(times%20 == 1)
{ printf("DIANYA= %d\\r\\n",LsensVal); printf("DIANYAYU= %d\\r\\n",dyyz); delay_ms(10);
USART\_RX\_STA=0;
}
times++;
delay_ms(10);
}
void Check\_serial\_KEY(void){
OLED\_Clear\_Down();
key=KEY_Scan(1); //0,不支持连续按;1,支持连续按;
if(key)
{
switch(key)
{
case WKUP_PRES: // 电压阈值增大
dyyz++; break;
case KEY1_PRES: //电压阈值减少
dyyz--; break;
default: break;
}
} else delay_ms(10);
}void Check(void){
times++; if(times%5==0)
{
OLED\_Display\_SensitizerNumber();//显示传感器数值
} delay_ms(10);
}
四、实现现象
具体动态效果看B站演示视频:
基于STM32的电压检测WIFI模拟
B站演示视频
虚拟串口讲解
全部资料(源程序、仿真文件、安装包、演示视频):
标签:void,WIFI,37,STM32,OLED,电压,printf,include,Check From: https://blog.csdn.net/ldejsy/article/details/144305933