学校违纪分数记录,按键,1.3寸OLED显示,数据掉电保存

1、项目简介

2、实现逻辑


#如上图为显示屏显示内容
#三个物理按键,一个是选择对哪一项进行控制,两个是加减对应项的分数
#控制范围±10,精度0.1
#对所有分数进行求和运算然后显示
#将所有数据保存到单片机flash

3、应用场景

#对学生违纪情况进行记录

4、核心代码梳理

int8_t big_small(int32_t value, uint8_t handle)
{if(handle)//++{if(value < 100)value++;}else//--{if(value > -100)value--;}return value;
}uint32_t addr = 0x08007000;//FLASH写入数据测试
void writeFlashTest(void)
{//1、解锁FLASHHAL_FLASH_Unlock();//2、擦除FLASH//初始化FLASH_EraseInitTypeDefFLASH_EraseInitTypeDef f;f.TypeErase = FLASH_TYPEERASE_PAGES;f.PageAddress = addr;f.NbPages = 1;//设置PageErroruint32_t PageError = 0;//调用擦除函数HAL_FLASHEx_Erase(&f, &PageError);//3、对FLASH烧写HAL_FLASH_Program(TYPEPROGRAM_WORD, addr, Wei_Ji);HAL_FLASH_Program(TYPEPROGRAM_WORD, addr+10, SuShe_WeiSheng);HAL_FLASH_Program(TYPEPROGRAM_WORD, addr+20, JiaoShi_WeiSheng);HAL_FLASH_Program(TYPEPROGRAM_WORD, addr+30, Pao_Cao);//4、锁住FLASHHAL_FLASH_Lock();
}OLED_Init();OLED_ColorTurn(0);//0正常显示,1 反色显示OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示OLED_Refresh();OLED_Clear();//OLED_ShowString(0,0," weiji:   .    C ",16);OLED_ShowChinese(2,0,0,16); //一个汉字横15个格 冒号加12  竖加16OLED_ShowChinese(17,0,1,16);OLED_ShowChinese(29,0,2,16);OLED_ShowChinese(2,16,3,16);OLED_ShowChinese(17,16,4,16);OLED_ShowChinese(32,16,7,16);OLED_ShowChinese(47,16,8,16);OLED_ShowChinese(59,16,2,16);OLED_ShowChinese(2,32,5,16);OLED_ShowChinese(17,32,6,16);OLED_ShowChinese(32,32,7,16);OLED_ShowChinese(47,32,8,16);OLED_ShowChinese(59,32,2,16);OLED_ShowChinese(2,48,9,16);OLED_ShowChinese(17,48,10,16);OLED_ShowChinese(29,48,2,16);OLED_ShowChinese(70,48,11,16);OLED_ShowChinese(85,48,12,16);OLED_ShowChinese(97,48,2,16);OLED_Refresh();Wei_Ji = *(__IO uint32_t*)(addr);SuShe_WeiSheng = *(__IO uint32_t*)(addr+10);JiaoShi_WeiSheng = *(__IO uint32_t*)(addr+20);Pao_Cao = *(__IO uint32_t*)(addr+30);writeFlashTest();/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_Delay(5);if(!HAL_GPIO_ReadPin(GPIOA, SET_Pin))set_a++;elseset_a = 0;if(!HAL_GPIO_ReadPin(GPIOB, BIG_Pin))big_a++;elsebig_a = 0;if(!HAL_GPIO_ReadPin(GPIOB, SMALL_Pin))small_a++;elsesmall_a = 0;if(set_a==5){set_a = 0;set_num++;set_num = set_num%5;}if(big_a==5){big_a = 0;if(set_num == 1)Wei_Ji = big_small(Wei_Ji, 1);else if(set_num == 2)SuShe_WeiSheng = big_small(SuShe_WeiSheng, 1);else if(set_num == 3)JiaoShi_WeiSheng = big_small(JiaoShi_WeiSheng, 1);else if(set_num == 4)Pao_Cao = big_small(Pao_Cao, 1);writeFlashTest();}if(small_a==5){small_a = 0;if(set_num == 1)Wei_Ji = big_small(Wei_Ji, 0);else if(set_num == 2)SuShe_WeiSheng = big_small(SuShe_WeiSheng, 0);else if(set_num == 3)JiaoShi_WeiSheng = big_small(JiaoShi_WeiSheng, 0);else if(set_num == 4)Pao_Cao = big_small(Pao_Cao, 0);writeFlashTest();}if(set_num == 0){OLED_ShowChinese(29,0,2,16);OLED_ShowChinese(59,16,2,16);OLED_ShowChinese(59,32,2,16);OLED_ShowChinese(29,48,2,16);}else if(set_num == 1){OLED_ShowString(29,0,".",12);OLED_ShowChinese(59,16,2,16);OLED_ShowChinese(59,32,2,16);OLED_ShowChinese(29,48,2,16);}else if(set_num == 2){OLED_ShowChinese(29,0,2,16);OLED_ShowString(59,16,".",12);OLED_ShowChinese(59,32,2,16);OLED_ShowChinese(29,48,2,16);}else if(set_num == 3){OLED_ShowChinese(29,0,2,16);OLED_ShowChinese(59,16,2,16);OLED_ShowString(59,32,".",12);OLED_ShowChinese(29,48,2,16);}else if(set_num == 4){OLED_ShowChinese(29,0,2,16);OLED_ShowChinese(59,16,2,16);OLED_ShowChinese(59,32,2,16);OLED_ShowString(29,48,".",12);}SUM = Wei_Ji+SuShe_WeiSheng+JiaoShi_WeiSheng+Pao_Cao;OLED_ShowMY(45,2,Wei_Ji);OLED_ShowMY(75,18,SuShe_WeiSheng);OLED_ShowMY(75,34,JiaoShi_WeiSheng);OLED_ShowMY(45,50,Pao_Cao);OLED_ShowMY(106,50,SUM);OLED_Refresh();}

5、部分参考资料

#oled资料
#hal库的flash操作

6、注意事项

#注意oled的通信协议(可以通过0欧姆电阻选择),程序中未列出
#按键检测未列出

完整可运行项目地址

或 点击下方”大饼匠人“卡片,关注并回复"7"免费下载开发资料

技能梳理7@stm32+OLED+flash掉电保存+按键相关推荐

  1. 技能梳理21@stm32+oled+声音强度检测+舵机

    检测声音强度,显示大概的分贝数在oled上,不同强度下舵机转不同的角度 1.项目简介 2.实现逻辑 #通过STM32的adc检测大概声音强度 #在oled上显示声音强度 #舵机根据声音大小转动 3.应 ...

  2. STM32 RTC时钟掉电日期不更新 STM32 HAL库RTC时钟配置

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 STM32 RTC时钟掉电日期不更新 & STM32 HAL库RTC时钟配置 一.STM32CubeMX RTC配置 二.RT ...

  3. 技能梳理37@stm32+按键+光耦+锁存+串行转并行+继电器

    技能梳理37@stm32+按键+光耦+锁存+串行转并行+继电器 1.项目简介 2.实现逻辑 3.应用场景 #主从机有线控制 #开关操作 4.核心代码梳理 //根据按下的按键执行相应的操作 void h ...

  4. 【干货】STM32通过ADC模拟看门狗实现掉电保存

    1.前言 很多时候我们需要将程序中的一些参数.数据等存储在EEPROM或者Flash中,达到掉电保存的目的.但有些情况下,程序需要频繁的修改这些参数,如果每次修改参数都进行一次保存,那将大大降低存储器 ...

  5. STM32----FLASH掉电保存动态平衡方案

    stm32是支持对自身Flash(code区)进行读写的.所以,在某些需要掉电保存的场合,我们可以利用这一特性节省一个外部的Flash或者EEPROM,对数据进行保存. 但是,如果需要经常性的保存数据 ...

  6. 新手必看!单片机掉电检测与数据掉电保存方案

    单片机在正常工作时,因某种原因造成突然掉电,将会丢失数据存储器(RAM)里的数据.在某些应用场合如测量.控制等领域,单片机正常工作中采集和运算出一些重要数据,待下次上电后需要恢复这些重要数据. 因此, ...

  7. 大彩串口屏如何实现掉电保存功能

    一.概述 本文主要阐述的是如何在串口屏中实现掉电保存的功能,即用户在对文本输入之后,设置了保存的操作之后,能够实现屏幕在掉电重新上电的情况下实现数据保存的功能,即重新上电还是显示上次输入的文本内容.本 ...

  8. stm32之PVD可编程电压监测器(掉电保存数据)

    前言:stm32系列提供了可编程电压检测器PVD,它是实时检测VDD的电压,当检测到电压低于或者高于PVD设置的阈值时,会想内核产生一个PVD中断(EXTI线中断)以使内核在复位前进行紧急处理.该电压 ...

  9. flash掉电备份机制

    原因: 由于FLASH的擦除和写入的特性,如果在擦除中掉电或者写入时掉电,有可能会出现失败的情况,下次再上电读取就会出错: 擦除的时候掉电,不能保证擦除完全,但是已经擦除的部分,肯定是0xff了. 写 ...

最新文章

  1. Java面试之Java基础上册(含答案)
  2. 如何查看 phtml文件 并有代码颜色提示
  3. 微服务限流Sentinel讲解(三)
  4. 论坛项目(docker模式)
  5. 1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client
  6. nodejs 框架 中文express 4.xxx中文API手册
  7. Maximum Subsequence Value CodeForces - 1365E(规律+暴力)
  8. IDEA 配置Tomcat
  9. MySQL prepare语句的SQL语法
  10. 聊聊一致性Hash在负载均衡中的应用
  11. 【云计算】Kubernetes、Marathon等框架需要解决什么样的问题?
  12. 什么是闭包?闭包有什么用?闭包咋写啊?这是一篇介绍js闭包的博客
  13. 如何在电脑网页下载准考证
  14. 系统架构设计说明书(模板)和概要设计说明书(模板)和详细设计说明书(模板)
  15. #笔记#圣思园 JavaSE 第29讲——String类源代码深析
  16. 工科数学分析大作业(三) 傅里叶级数
  17. 特意整理出来一百套游戏源码,免费分享给大家
  18. 电气工程及自动化 (独立本科) 自考
  19. GP数据库获取指定时段的所有天数
  20. 运营简史:一文读懂互联网运营的20年发展与演变

热门文章

  1. linuxcentos6笔记
  2. 创意、实现和合作:一次原创H5的尝试
  3. MATALB APP DESIGNER 回调函数创建及StartupFcn函数
  4. 深度学习平台demo(一)- C#如何调用python文件
  5. rsyslog-trouble: imjournal: 26794 messages lost due to rate-limiting
  6. 雷军推红米Redmi独立品牌喊话友商:生死看淡 不服就干
  7. CSS3基础(4)——CSS3 渲染属性
  8. 7-5 3824经典游戏分数 20 作者 李佳单位 重庆大学
  9. 关于wifi模块连接路由器远程控制的一些问题
  10. 【转载】客单价是什么意思?如何提高客单价?