高职物联网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);
}
}

浙公网安备 33010602011771号