[综合信息] 【华大测评】+I2C读写及数码锁设计

[复制链接]
 楼主| jinglixixi 发表于 2020-10-2 13:31 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2020-10-2 23:49 编辑

在HC32F460的开发板上,提供了一个I2C接口的AT24C02存储芯片,通过它可进行关键参数的读写。
由于其存储容量相对较小,故不适宜做字库或图库来使用。
AT24C02的接口原理图如图1所示,其占用的MCU引脚如下:
SCL---PC4
SDA--- PC4

1.jpg
图1 AT24C02接口

在结合OLED 屏及阵列按键的情况下,我们可以将其设计为一个秘密锁。
OLED 屏的接口原理图如图2所示,其占用的MCU引脚如下:
SCL---PD0
SDA--- PD1

2.jpg
图2  OLED 屏接口

阵列按键的接口原理图如图3所示,其占用的MCU引脚如下:
KEYOUT0---PD12
KEYOUT1---PD13
KEYOUT2---PD14
KEYIN0---PA4
KEYIN1---PA5
KEYIN2---PA6

3.jpg
图3  阵列按键接口

实现秘密门锁的主要程序如下:
  1. OLED_ShowString(0,0,"AT24C02  OK !",16);        
  2.            OLED_ShowString(88,2,"CLOSE",16);        
  3.            i=0;
  4.            n=0;
  5.            m=0;
  6.            OLED_ShowString(0,2,"KEY=",16);
  7.            while(1)
  8.        {
  9.              if(n==0)
  10.                          {
  11.                                   PORT_ResetBits(PortD, Pin12);
  12.                               PORT_SetBits(PortD, Pin14);
  13.                               PORT_SetBits(PortD, Pin13);
  14.                                   m=0;
  15.                          }
  16.                          keycan();
  17.                          if(n==0)
  18.                          {
  19.                               PORT_SetBits(PortD, Pin12);
  20.                               PORT_ResetBits(PortD, Pin13);
  21.                               PORT_SetBits(PortD, Pin14);
  22.                                   m=3;
  23.                          }
  24.                          keycan();
  25.                          if(n==0)
  26.                          {
  27.                               PORT_SetBits(PortD, Pin12);
  28.                               PORT_SetBits(PortD, Pin13);
  29.                                   PORT_ResetBits(PortD, Pin14);
  30.                                   m=6;
  31.                          }
  32.                          keycan();
  33.                          if(n>0)
  34.                          {
  35.                               OLED_ShowNum(40+8*i,2,n+m,1,16);        
  36.                                   key[i]=n+m;
  37.                               i++;
  38.                                   n=0;
  39.                          }
  40.                          if(i==5)
  41.                          {
  42.                               for(i=0ul; i<5; i++)
  43.                   {
  44.                      if(key[i] != u8RxBuf[i]) // 13528-741
  45.                                          {
  46.                                                 OLED_ShowString(0,2,"KEY=    ",16);
  47.                                                 i=0;
  48.                                                 n=0;
  49.                      }
  50.                                          else
  51.                      {
  52.                                             OLED_ShowString(88,2,"OPEN ",16);
  53.                         while(1);
  54.                                          }
  55.                  }
  56.                     }
  57.                     Ddl_Delay1ms(200ul);
  58.                 }
编译下载程序后,相关的运行效果如图4~6所示。
4.jpg
4 初始界面

5.jpg
5 提示界面

6.jpg
6 解锁界面

感兴趣的话还可以在此基础上添加密码的修改功能,其处理方式为按功能键激活密码修改功能,然后先输入原密码并与AT24C02中的钥匙比较,若正确再输入新密码并存入AT24C02中作为钥匙保存。由于密码的存放位置不变,故程序无需进行变更。若是密码存放在程序中,则要想修改密码,就只能修改程序并重新下载了!



zeshoufx 发表于 2020-10-2 16:54 | 显示全部楼层
谢谢分享【I2C读写及应用】
 楼主| jinglixixi 发表于 2020-10-2 23:46 | 显示全部楼层
zeshoufx 发表于 2020-10-2 16:54
谢谢分享【I2C读写及应用】

多谢了!!!
答案很长吧 发表于 2020-10-10 09:35 | 显示全部楼层
阵列按键的接口原理图如图3所示,其占用的MCU引脚如下:
KEYOUT0---PD12
KEYOUT1---PD13
KEYOUT2---PD14
KEYIN0---PA4
KEYIN1---PA5
KEYIN2---PA6
 楼主| jinglixixi 发表于 2020-10-10 10:06 | 显示全部楼层
答案很长吧 发表于 2020-10-10 09:35
阵列按键的接口原理图如图3所示,其占用的MCU引脚如下:
KEYOUT0---PD12
KEYOUT1---PD13

SORRY,弄错位置了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

517

主题

2932

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部