芯查查logo
  • 数据服务
    1. 新产品
    2. 物料选型
    3. 查替代
    4. 丝印反查
    5. 查品牌
    6. PCN/PDN
    7. 查方案
    8. 查代理
    9. 数据合作
  • SaaS/方案
      SaaS产品
    1. 供应链波动监控
    2. 半导体产业链地图
    3. BOM管理
    4. 解决方案
    5. 汽车电子
    6. 政府机构
    7. 数据API
  • 商城
  • 行业资讯
    1. 资讯
    2. 直播
  • 论坛社区
    1. 论坛
    2. 学习
    3. 测评中心
    4. 活动中心
    5. 积分商城
  • 查一下
  • 开通会员
口算数学宝DIY方案验证
原创 发布时间:2022/07/26 14:05
版块:
单片机/MCU论坛
简介:利用手头闲置开发板简单验证口算宝方案

口算数学宝DIY方案验证

 最近逛抖音时无意中看到居然还有这么个有意思的东西,号称可以培养孩子口算能力,随身携带小巧方便.

 

感觉还可以,一看价格嘛......恩....还是算了,现在只要和儿童教育沾点边儿的东西,全都有些贵的离谱.作为资深的业余DIY爱好者,自己手动做一个应该也不难,说干就干!!

 

1.首先找一块自己熟悉的开发板,STM32,AVR,ESP8266,C51都可以,只要自己熟悉的就行,我这里就是用自己做的STM32G070核心板来验证.


 

 

2.显示部分可以使用LCD,灰度屏,墨水屏,点阵屏都可以,手头儿上有什么就用什么,我这里使用的是一块COG的点阵屏,分辨率128x64.

 

 

这块屏也是使用SPI接口,基本和LCD引脚一样,所以以后如果要更换屏幕,直接改驱动就好了. 目前这块屏是ST7567,移植的U8G2进行驱动.

 

 

3.按键部分用的4x4矩阵按键模块,矩阵键盘又称行列式键盘,它是使用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线与列线的交叉处放置一个按键。

 

 

这个模块算是比较常见的吧,原理图如下:

 

矩阵按键有2种检测方式,这里使用的是逐行逐列扫描法,代码稍微简单一些.

 

4.硬件都准备好了,因为我这里用的是STM32的板子,所以直接在CubeMX中配置好用到的IO功能.如图:

  

 

5.将屏幕和按键模块按照IO定义分别连接好,大概就是这么一陀东西吧:

 

 

6.准备开撸.....

 6.0 移植u8g2

     目前u8g2还不能直接兼容stm32,所以需要手工进行修改,主要是初始化以及spi发送部分.另外还要删去其它没用到的驱动,不然容量太大,根本放不下.

     需要注意的是,根据刷屏方式的不同要修改不同的接口,我这里就简单的使用了全屏刷新的方式,这个方式会比较费一点内存,但是控制起来简单.

 

 6.1先定义u8g2对象

   U8G2_ST7567_ENH_DG128064I_F_4W_HW_SPI u8g2(U8G2_R2, /* cs=*/ GPIO_PIN_4, /* dc=*/ GPIO_PIN_1, /* reset=*/ GPIO_PIN_6); 

其中那几个引脚的参数不重要,因为后面是使用的自定义接口,在接口里会控制io.

 6.2按键读取:

uint16_t read_gpio_data()

{

  uint16_t temp=((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)<<7)|

               (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)<<6)|

               (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)<<5)|

                (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_10)<<4)| 

               (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_11)<<3)|

        (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12)<<2)|

        (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_13)<<1)|

        (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_14))); 

 

return temp;

}

这里之所以搞这么麻烦是因为我没有按顺序使用连续IO,不然直接操作ODR,IDR什么就行了.

这里就是根据输入输出管脚状态拼装成1个8bit的字节数据,用来给后面的接口判断具体某个按键的状态.

 

6.3 算式的简单生成.

     val=0;

     a=rand()%10;

     b=rand()%10;

     f=rand()%3;

    if(f==1&&a<b){int aa=b;b=a;a=aa;}

    if((f==3||f==2)&&b==0){b=1;}

    sprintf(_buff,"%d %c %d =",a,_op[f],b);

    switch(f){

     case 0:val=a+b;break;

     case 1:val=a-b;break;

     case 2:val=a*b;break;

     case 3:val=a/b;break;

    }

大概意思是随机生成2个10以内的数字,再随机生成一个 加\减\乘\除 运算符,最后拼接成字符串,同时计算一下结果用于和最后输入的结果对比. 这里只是简单验证方案,所以就大概的写一写,不考虑太多各种特殊情况.

 

 

7.运行效果:

 

 

8.方案基本完成,附件有完整工程参考.

工程附件
STM32_ARITHMETIC.zip
单片机/MCU论坛 STM单片机 ESP32/8266 AVR单片机 DIY设计
2022/07/26 14:05
  • 举报
😁😂😃😄😅😆😉😊😋😌😍😏😒😓😔😖😘😚😜😝😞😠😡😢😣😤😥😨😩😪😫😭😰😱😲😳😵😷😸😹😺😻😼😽😾😿🙀🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏✂✅✈✉✊✋✌✏✒✔✖✨✳✴❄❇❌❎❓❔❕❗❤➕➖➗➡➰🚀🚃🚄🚅🚇🚉🚌🚏🚑🚒🚓🚕🚗🚙🚚🚢🚤🚥🚧🚨🚩🚪🚫🚬🚭🚲🚶🚹🚺🚻🚼🚽🚾🛀Ⓜ🅰🅱🅾🅿🆎🆑🆒🆓🆔🆕
@好友

全部评论

加载中
游客登录通知
已选择 0 人
自定义圈子
移动
发布帖子
发布动态
发布问答
发布者
m格格巫
创作者认证
最新帖子
萤火工场GD32VW553-IOT测评+蓝牙串口透传树莓派pico 2测评 - 初体验【工程师经验】+ 飞线【开源】zvs142857 2.1A,3A快充 充电宝迷你UC3842 开关电源优化全解析:攻克常见难题,提升性能
热门版块
查看更多
电子DIY
维修技术
电子元器件
萤火工场
汽车电子工程师论坛
工业电子专区
新手入门指南
单片机/MCU论坛
PCB设计
开源项目

83

收藏

分享

微信扫码
分享给好友

评论