高职物联网Flash计数器

高职组物联网模拟1

题目:

通电后 LED2 灭,液晶屏显示如下信息(N 为自然数)。 
		|--------------- |
		|     计数器	 |
                |   数值:N       |
		|   结果:Y       |
		|-----------------|
1. 当按下 Key2 时当前数值为 N-1。
2. 当按下 Key3 时当前数值为 N+1。
3. 结果 Y 由公式将 N 代入得出。
4. 当按下 Key4 时把当前 N 数值保存到模块上的 Flash 中,同时 LED2 亮 1 秒后灭。 
5. 模块断电重新上或重置,液晶屏的 N 显示最后一次保存在 Flash 中的数 值。

没有公式先设公式为N*N

分析

  • 读写flash 要加头文件 #include "flash.h"
  • 地址尽量写800D000-800F000之间的
  • 用到函数 STMFLASH_Read() STMFLASH_Write()
  • 要传参数 (地址,uint32 类型数组,长度 )

代码

/**
  ******************************************************************************
  * File Name          : main.c
  * Description        : Main program body
  ******************************************************************************
  */
#include <string.h>
#include "board.h"
#include "hal_key.h"
#include "tim-board.h"
#include "timer_handles.h"
#include "flash.h"

#define Address 0x800F000


/*--------------------------------- 取模-----------------------------------------*/

uint8_t arr1[] = {0x40,0x40,0x42,0xCC,0x00,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x00,
                0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00};//计
uint8_t arr2[] = {0x90,0x52,0x34,0x10,0xFF,0x10,0x34,0x52,0x80,0x70,0x8F,0x08,0x08,0xF8,0x08,0x00,
                0x82,0x9A,0x56,0x63,0x22,0x52,0x8E,0x00,0x80,0x40,0x33,0x0C,0x33,0x40,0x80,0x00};//数
uint8_t arr3[] = {0x80,0x80,0x9E,0x92,0x92,0x92,0x9E,0xE0,0x80,0x9E,0xB2,0xD2,0x92,0x9E,0x80,0x00,
                0x08,0x08,0xF4,0x94,0x92,0x92,0xF1,0x00,0x01,0xF2,0x92,0x94,0x94,0xF8,0x08,0x00};//器

uint8_t arr4[] = {0x00,0x80,0x60,0xF8,0x07,0x04,0xE4,0xA4,0xA4,0xBF,0xA4,0xA4,0xE4,0x04,0x00,0x00,
                0x01,0x00,0x00,0xFF,0x40,0x40,0x7F,0x4A,0x4A,0x4A,0x4A,0x4A,0x7F,0x40,0x40,0x00};//值

uint8_t arr5[] = {0x20,0x30,0xAC,0x63,0x20,0x18,0x08,0x48,0x48,0x48,0x7F,0x48,0x48,0x48,0x08,0x00,
                0x22,0x67,0x22,0x12,0x12,0x12,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00};//结

uint8_t arr6[] = {0x00,0x00,0x00,0xFE,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x00,
                0x44,0x44,0x24,0x25,0x14,0x0C,0x04,0xFF,0x04,0x0C,0x14,0x25,0x24,0x44,0x44,0x00};//果




/*----------------------------------------------------------------------------------*/






/**********************************************************************************************
*函数:void Init( void )
*功能:平台初始化
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/
void Init() {
    // 开发板平台初始化
    BoardInitMcu();
    BoardInitPeriph();
    keys_init();//按键初始化
    setTimer2Callback(Time2Handler);
    Tim2McuInit(1);//定时器初始化,设置定时中断1ms中断一次
	 
}

/**********************************************************************************************
*函数:void KeyDownHandler( void )
*功能:按钮事件监听
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/

uint8_t flag = 0;
uint8_t  t = 0;

void KeyDownHandler(void) {



}

/**********************************************************************************************
*函数:void handlerPre10Ms( void )
*功能:10毫秒循环
*输入:无
*输出:无
*特殊说明:循环处理总时长300ms
**********************************************************************************************/
void handlerPre10Ms(void) {
    for (int delay = 0; delay < 30; delay++) {
        HAL_Delay(10);
        
    }
}

uint32_t time[2] = {'\0'};
uint8_t arr0[10];
uint8_t arr[10];


/**
 * Main application entry point.
 */
int main(void)
{
    Init();
    OLED_Init();
    OLED_Clear();
    STMFLASH_Read(Address,time,2);
    
    while( 1 )
    {
      OLED_ShowCHineseArray(40,0,arr1);OLED_ShowCHineseArray(40+16,0,arr2);OLED_ShowCHineseArray(40+32,0,arr3);
      OLED_ShowCHineseArray(32,2,arr2);OLED_ShowCHineseArray(48,2,arr4);OLED_ShowString(64,2,":");
      OLED_ShowCHineseArray(32,4,arr5);OLED_ShowCHineseArray(48,4,arr6);OLED_ShowString(64,4,":");
      
       
      


      if(isKey2Pressed()){

        
        resetKey2();

         --time[0];

      }
      if(isKey3Pressed()){

        

        resetKey3();

         ++time[0];
      }
      if(isKey4Pressed()){
        
        resetKey4();
        STMFLASH_Write(Address,time,2);
        GpioWrite(&Led2,0);
        HAL_Delay(1000);
        GpioWrite(&Led2,1);
      }


       sprintf(arr,"%3d",time[0]);
        sprintf(arr0,"%3d",time[0]*time[0]);
      OLED_ShowString(80,2,arr);
      OLED_ShowString(80,4,arr0);

			
    }
}

posted @ 2022-10-17 10:31  ~内个臣呐~  阅读(284)  评论(0)    收藏  举报