久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2599|回復: 2
收起左側

STM32過欠壓檢測設備代碼

[復制鏈接]
ID:73370 發表于 2021-9-2 21:45 | 顯示全部樓層 |閱讀模式
自己寫的過欠壓檢測設備,可累計單次運行時間及總運行時間,也可以進行閾值判斷并警報、記錄,通過12864顯示出來
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "oled.h"
  4. #include "rtc.h"
  5. #include "key.h"
  6. #include "spi.h"
  7. #include "flash.h"
  8. #include "adc.h"


  9. unsigned char r_sec; //單次老煉 秒
  10. unsigned char r_min; //單次老煉 分
  11. unsigned int r_hor;  //單次老煉 時

  12. unsigned char a_sec; //累積老煉 秒
  13. unsigned char a_min; //累積老煉 分
  14. unsigned int a_hor;  //累積老煉 時

  15. #define N 10 //每通道采10次
  16. #define M 2 //為2個通道

  17. vu16 AD_Value[10][2]; //用來存放ADC轉換結果,也是DMA的目標地址
  18. vu16 After_filter[2]; //用來存放求平均值之后的結果
  19. u16 i;

  20. u16 ad1;
  21. u16 ad2;

  22. u32 rcounter;        //RTC運行秒數
  23. u8 Buffer[4] = {0};  //累積老煉總秒數的8位數據緩存數組
  24. u32 acount;          //flash存儲的累積老煉秒數
  25. u32 nacount;         //運行時累積老煉秒數

  26. #define SIZE sizeof(Buffer) //緩存數組的大小

  27. u32 count4;

  28. #define temp2 count4%86400  //單天運行的秒數

  29. #define FLASH_SIZE 8*1024*1024  //FLASH字節個數
  30.   
  31. int main(void)
  32. {        
  33.    u8 t;
  34.          u32 count3 = 0;
  35.          u32 count2 = 0;   //運行時與RTC的差值
  36.          u32 count1 = 0;   //運行時RTC的初值
  37.          u8  fcount1 = 0;  //初值鎖存標志
  38.          u16 hcur1;
  39.          u8  lcur1;
  40.          u16 hcur2;
  41.          u8  lcur2;
  42.           NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設置中斷優先級分組2
  43.           delay_init();                     //延時函數初始化          
  44.           KEY_Init();          //開關初始化
  45.           SPI_Flash_Init();    //flash初始化
  46.           Adc_Init();
  47.           DMA_Configuration();
  48.     OLED_Init();         //OLED初始化
  49.     /*****************開機顯示字符******************/         
  50.           OLED_ShowString(20,0, "****TEST",16);
  51.          
  52.     OLED_ShowString(0,16, "h:",12);
  53.           OLED_ShowString(12,16,"0000",16);
  54.     OLED_ShowString(56,16, "m:",12);
  55.           OLED_ShowString(68,16,"00",16);
  56.     OLED_ShowString(92,16, "s:",12);
  57.           OLED_ShowString(104,16,"00",16);
  58.              
  59.     OLED_ShowString(0,32, "h:",12);
  60.                 OLED_ShowString(12,32,"0000",16);
  61.     OLED_ShowString(56,32, "m:",12);
  62.                 OLED_ShowString(68,32,"00",16);
  63.     OLED_ShowString(92,32, "s:",12);
  64.                 OLED_ShowString(104,32,"00",16);
  65.          
  66.                 OLED_ShowString(0,48, "u:",12);
  67.                 OLED_ShowString(12,48,"000.0A",16);
  68.                
  69.                 OLED_ShowString(68,48, "d:",12);
  70.                 OLED_ShowString(80,48,"000.0A",16);
  71.                
  72.     OLED_Refresh_Gram();
  73.                
  74.         while(RTC_Init())                //RTC初始化        ,一定要初始化成功                                                                                                 
  75.   {
  76.                 delay_ms(800);
  77.   }
  78.        
  79.         while(SPI_Flash_ReadID()!=W25Q64)//Flash ID檢測
  80.         {
  81.                 delay_ms(1800);
  82.   }
  83.        
  84.   SPI_Flash_Read(Buffer,FLASH_SIZE-100,SIZE); //讀上次累積的時間
  85.        
  86.   acount = Buffer[0] + Buffer[1]*255 + Buffer[2]*65536 + Buffer[3]*16777216;
  87.   a_sec = ((acount%86400)%3600)%60; //上次老煉秒
  88.         a_min = ((acount%86400)%3600)/60; //上次老煉分
  89.         a_hor = acount/3600;              //上次老煉時
  90.        
  91.         while(1)
  92.         {                                                                    
  93.                
  94.                 filter();
  95.                 ad1 = GetVolt(After_filter[0]);
  96.                 ad2 = GetVolt(After_filter[1]);
  97.                
  98.                 hcur1 = ad1/10;
  99.                 lcur1 = ad1%10;
  100.                
  101.                 hcur2 = ad2/10;
  102.                 lcur2 = ad2%10;
  103.                
  104.                
  105.                 if(KEY0 == 0)                  //判斷是否正常運行,0為正常,1為異常
  106.                 {
  107.                         LED0 = 1;
  108.                         if(fcount1 == 0)             //獲取此時RTC的值
  109.       {                               
  110.                     count1 = RTC_GetCounter();
  111.                                 delay_ms(500);
  112.         fcount1 = 1;
  113.                         }
  114.       if(fcount1 == 1)
  115.       {                               
  116.                           count2 = rcounter - count1; //獲取差值
  117.                        
  118.                           count4 = count3 + count2;
  119.                        
  120.                           nacount = acount + count4;
  121.                        
  122.                           a_sec = ((nacount%86400)%3600)%60; //獲取此次累積運行秒
  123.                           a_min = ((nacount%86400)%3600)/60; //獲取此次累積運行分
  124.                           a_hor = nacount/3600;                                                         //獲取此次累積運行時
  125.                           
  126.                           Buffer[0] = nacount;               
  127.                           Buffer[1] = nacount>>8;
  128.                     Buffer[2] = nacount>>16;
  129.                           Buffer[3] = nacount>>24;
  130.                           
  131.                           SPI_Flash_Write((u8*)Buffer,FLASH_SIZE-100,SIZE); //保存此次累積運行的時間
  132.                        
  133.                                 r_sec = (temp2%3600)%60;  //獲取單次運行秒
  134.                                 r_min = (temp2%3600)/60;  //獲取單次運行分
  135.                                 r_hor =  count4/3600;     //獲取單次運行時
  136.                                 if(r_hor>=999)
  137.                                 {
  138.                                         r_hor = 0;
  139.                                 }
  140.                         }
  141.     }
  142.                
  143.                 else
  144.                 {       
  145.                   fcount1 = 0;
  146.                         count3 = count4;
  147.                         LED0 = 0;//蜂鳴器響;
  148.     }
  149.                
  150.                 if(KEY1 == 0) //單次運行各狀態復位
  151.                 {
  152.                         fcount1= 0;
  153.                         count2 = 0;
  154.                         count3 = 0;
  155.                         count4 = 0;
  156.       r_sec = 0;
  157.                   r_min = 0;
  158.                   r_hor = 0;
  159.       acount = Buffer[0] + Buffer[1]*255 + Buffer[2]*65536 + Buffer[3]*16777216;                       
  160.                 }
  161.                
  162.                 if(WK_UP == 1) //累積運行及單次運行各狀態復位
  163.                 {
  164.                         acount = 0;
  165.                         nacount = 0;
  166.                         fcount1= 0;
  167.                         count2 = 0;
  168.                         count3 = 0;
  169.                         count4 = 0;
  170.       r_sec = 0;
  171.                   r_min = 0;
  172.                   r_hor = 0;
  173.                         a_sec = 0;
  174.                   a_min = 0;
  175.                   a_hor = 0;
  176.                   Buffer[0] = 0;
  177.                         Buffer[1] = 0;
  178.                         Buffer[2] = 0;
  179.                         Buffer[3] = 0;
  180.                         SPI_Flash_Write(Buffer,FLASH_SIZE-100,SIZE);
  181.     }
  182.                
  183.                 if(t!=calendar.sec) //更新屏幕顯示
  184.                 {
  185.                        
  186.                         t = calendar.sec;
  187.                        
  188.                         OLED_ShowNum(12,16,r_hor,4,16);                                                                  
  189.                         OLED_ShowNum(68,16,r_min,2,16);                                                                          
  190.                         OLED_ShowNum(104,16,r_sec,2,16);
  191.                        
  192.                   OLED_ShowNum(12,32,a_hor,4,16);                                                                  
  193.                         OLED_ShowNum(68,32,a_min,2,16);                                                                          
  194.                         OLED_ShowNum(104,32,a_sec,2,16);
  195.                        
  196.                         OLED_ShowNum(12,48,hcur1,3,16);                                                                  
  197.                         OLED_ShowNum(44,48,lcur1,1,16);
  198.                        
  199.                         OLED_ShowNum(80,48,hcur2,3,16);                                                                  
  200.                         OLED_ShowNum(112,48,lcur2,1,16);
  201.                        
  202.                         OLED_Refresh_Gram();
  203.                        
  204.                 }                                                                  
  205.         }                                                                                              
  206. }
復制代碼

以上代碼下載: 過欠壓過流檢測設備.rar (348.49 KB, 下載次數: 23)
回復

使用道具 舉報

ID:262 發表于 2021-9-8 18:03 | 顯示全部樓層
這個是用的什么傳感器?原理圖能分享一下嗎?
回復

使用道具 舉報

ID:977059 發表于 2021-11-20 14:37 | 顯示全部樓層
分享整套學習下  謝謝
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精国产品一区二区三区四季综 | 午夜av毛片 | 国产成人精品午夜视频免费 | 91在线网站 | 精品国产乱码久久久久久丨区2区 | 久久精品99| 欧美色专区 | 国产中文区二幕区2012 | 日韩欧美福利视频 | 国产www.| 99久久精品国产一区二区三区 | 黄色亚洲| 成人免费共享视频 | 九九精品久久久 | 伊人av在线播放 | 丝袜美腿一区二区三区 | 91精品国产综合久久久久 | 久久精品欧美一区二区三区不卡 | 久久综合欧美 | 日韩欧美一区二区三区四区 | 日韩av在线一区二区三区 | 国产精品视频yy9299一区 | 日韩免费视频 | 日韩91 | 中文字幕色站 | 久久综合99 | 亚洲精品一区二区三区丝袜 | 免费特级黄毛片 | 97在线观视频免费观看 | 久久精品亚洲欧美日韩久久 | 中文字幕视频在线观看 | 久久99精品久久久久 | 日韩成人在线观看 | www.婷婷亚洲基地 | 97国产精品 | 中日韩欧美一级片 | 久久久久免费精品国产 | 久久99精品国产自在现线小黄鸭 | 国产精品久久精品 | 久久久免费毛片 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 |