IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 技能梳理7@stm32+OLED+flash掉电保存+按键 -> 正文阅读

[嵌入式]技能梳理7@stm32+OLED+flash掉电保存+按键

学校违纪分数记录,按键,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、解锁FLASH
    HAL_FLASH_Unlock();

    //2、擦除FLASH
    //初始化FLASH_EraseInitTypeDef
    FLASH_EraseInitTypeDef f;
    f.TypeErase = FLASH_TYPEERASE_PAGES;
    f.PageAddress = addr;
    f.NbPages = 1;
    //设置PageError
    uint32_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、锁住FLASH
    HAL_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  竖加16
    OLED_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++;
        else
            set_a = 0;

        if(!HAL_GPIO_ReadPin(GPIOB, BIG_Pin))
            big_a++;
        else
            big_a = 0;

        if(!HAL_GPIO_ReadPin(GPIOB, SMALL_Pin))
            small_a++;
        else
            small_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欧姆电阻选择),程序中未列出
#按键检测未列出

完整可运行项目地址

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 10:06:25  更:2022-05-14 10:06:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:45:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码