标题:
STM32过欠压检测设备代码
[打印本页]
作者:
张明明明
时间:
2021-9-2 21:45
标题:
STM32过欠压检测设备代码
自己写的过欠压检测设备,可累计单次运行时间及总运行时间,也可以进行阈值判断并警报、记录,通过12864显示出来
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "rtc.h"
#include "key.h"
#include "spi.h"
#include "flash.h"
#include "adc.h"
unsigned char r_sec; //单次老炼 秒
unsigned char r_min; //单次老炼 分
unsigned int r_hor; //单次老炼 时
unsigned char a_sec; //累积老炼 秒
unsigned char a_min; //累积老炼 分
unsigned int a_hor; //累积老炼 时
#define N 10 //每通道采10次
#define M 2 //为2个通道
vu16 AD_Value[10][2]; //用来存放ADC转换结果,也是DMA的目标地址
vu16 After_filter[2]; //用来存放求平均值之后的结果
u16 i;
u16 ad1;
u16 ad2;
u32 rcounter; //RTC运行秒数
u8 Buffer[4] = {0}; //累积老炼总秒数的8位数据缓存数组
u32 acount; //flash存储的累积老炼秒数
u32 nacount; //运行时累积老炼秒数
#define SIZE sizeof(Buffer) //缓存数组的大小
u32 count4;
#define temp2 count4%86400 //单天运行的秒数
#define FLASH_SIZE 8*1024*1024 //FLASH字节个数
int main(void)
{
u8 t;
u32 count3 = 0;
u32 count2 = 0; //运行时与RTC的差值
u32 count1 = 0; //运行时RTC的初值
u8 fcount1 = 0; //初值锁存标志
u16 hcur1;
u8 lcur1;
u16 hcur2;
u8 lcur2;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
delay_init(); //延时函数初始化
KEY_Init(); //开关初始化
SPI_Flash_Init(); //flash初始化
Adc_Init();
DMA_Configuration();
OLED_Init(); //OLED初始化
/*****************开机显示字符******************/
OLED_ShowString(20,0, "****TEST",16);
OLED_ShowString(0,16, "h:",12);
OLED_ShowString(12,16,"0000",16);
OLED_ShowString(56,16, "m:",12);
OLED_ShowString(68,16,"00",16);
OLED_ShowString(92,16, "s:",12);
OLED_ShowString(104,16,"00",16);
OLED_ShowString(0,32, "h:",12);
OLED_ShowString(12,32,"0000",16);
OLED_ShowString(56,32, "m:",12);
OLED_ShowString(68,32,"00",16);
OLED_ShowString(92,32, "s:",12);
OLED_ShowString(104,32,"00",16);
OLED_ShowString(0,48, "u:",12);
OLED_ShowString(12,48,"000.0A",16);
OLED_ShowString(68,48, "d:",12);
OLED_ShowString(80,48,"000.0A",16);
OLED_Refresh_Gram();
while(RTC_Init()) //RTC初始化 ,一定要初始化成功
{
delay_ms(800);
}
while(SPI_Flash_ReadID()!=W25Q64)//Flash ID检测
{
delay_ms(1800);
}
SPI_Flash_Read(Buffer,FLASH_SIZE-100,SIZE); //读上次累积的时间
acount = Buffer[0] + Buffer[1]*255 + Buffer[2]*65536 + Buffer[3]*16777216;
a_sec = ((acount%86400)%3600)%60; //上次老炼秒
a_min = ((acount%86400)%3600)/60; //上次老炼分
a_hor = acount/3600; //上次老炼时
while(1)
{
filter();
ad1 = GetVolt(After_filter[0]);
ad2 = GetVolt(After_filter[1]);
hcur1 = ad1/10;
lcur1 = ad1%10;
hcur2 = ad2/10;
lcur2 = ad2%10;
if(KEY0 == 0) //判断是否正常运行,0为正常,1为异常
{
LED0 = 1;
if(fcount1 == 0) //获取此时RTC的值
{
count1 = RTC_GetCounter();
delay_ms(500);
fcount1 = 1;
}
if(fcount1 == 1)
{
count2 = rcounter - count1; //获取差值
count4 = count3 + count2;
nacount = acount + count4;
a_sec = ((nacount%86400)%3600)%60; //获取此次累积运行秒
a_min = ((nacount%86400)%3600)/60; //获取此次累积运行分
a_hor = nacount/3600; //获取此次累积运行时
Buffer[0] = nacount;
Buffer[1] = nacount>>8;
Buffer[2] = nacount>>16;
Buffer[3] = nacount>>24;
SPI_Flash_Write((u8*)Buffer,FLASH_SIZE-100,SIZE); //保存此次累积运行的时间
r_sec = (temp2%3600)%60; //获取单次运行秒
r_min = (temp2%3600)/60; //获取单次运行分
r_hor = count4/3600; //获取单次运行时
if(r_hor>=999)
{
r_hor = 0;
}
}
}
else
{
fcount1 = 0;
count3 = count4;
LED0 = 0;//蜂鸣器响;
}
if(KEY1 == 0) //单次运行各状态复位
{
fcount1= 0;
count2 = 0;
count3 = 0;
count4 = 0;
r_sec = 0;
r_min = 0;
r_hor = 0;
acount = Buffer[0] + Buffer[1]*255 + Buffer[2]*65536 + Buffer[3]*16777216;
}
if(WK_UP == 1) //累积运行及单次运行各状态复位
{
acount = 0;
nacount = 0;
fcount1= 0;
count2 = 0;
count3 = 0;
count4 = 0;
r_sec = 0;
r_min = 0;
r_hor = 0;
a_sec = 0;
a_min = 0;
a_hor = 0;
Buffer[0] = 0;
Buffer[1] = 0;
Buffer[2] = 0;
Buffer[3] = 0;
SPI_Flash_Write(Buffer,FLASH_SIZE-100,SIZE);
}
if(t!=calendar.sec) //更新屏幕显示
{
t = calendar.sec;
OLED_ShowNum(12,16,r_hor,4,16);
OLED_ShowNum(68,16,r_min,2,16);
OLED_ShowNum(104,16,r_sec,2,16);
OLED_ShowNum(12,32,a_hor,4,16);
OLED_ShowNum(68,32,a_min,2,16);
OLED_ShowNum(104,32,a_sec,2,16);
OLED_ShowNum(12,48,hcur1,3,16);
OLED_ShowNum(44,48,lcur1,1,16);
OLED_ShowNum(80,48,hcur2,3,16);
OLED_ShowNum(112,48,lcur2,1,16);
OLED_Refresh_Gram();
}
}
}
复制代码
以上代码下载:
过欠压过流检测设备.rar
(348.49 KB, 下载次数: 23)
2021-9-2 21:45 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
heicad
时间:
2021-9-8 18:03
这个是用的什么传感器?原理图能分享一下吗?
作者:
徒步千里
时间:
2021-11-20 14:37
分享整套学习下 谢谢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1