jinglixixi 发表于 2020-10-2 13:31

【华大测评】+I2C读写及数码锁设计

本帖最后由 jinglixixi 于 2020-10-2 23:49 编辑

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


图1 AT24C02接口

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


图2OLED 屏接口

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


图3阵列按键接口

实现秘密门锁的主要程序如下:
OLED_ShowString(0,0,"AT24C02OK !",16);      
         OLED_ShowString(88,2,"CLOSE",16);      
         i=0;
         n=0;
         m=0;
         OLED_ShowString(0,2,"KEY=",16);
         while(1)
       {
             if(n==0)
                         {
                                  PORT_ResetBits(PortD, Pin12);
                              PORT_SetBits(PortD, Pin14);
                              PORT_SetBits(PortD, Pin13);
                                  m=0;
                         }
                         keycan();
                         if(n==0)
                         {
                              PORT_SetBits(PortD, Pin12);
                              PORT_ResetBits(PortD, Pin13);
                              PORT_SetBits(PortD, Pin14);
                                  m=3;
                         }
                         keycan();
                         if(n==0)
                         {
                              PORT_SetBits(PortD, Pin12);
                              PORT_SetBits(PortD, Pin13);
                                  PORT_ResetBits(PortD, Pin14);
                                  m=6;
                         }
                         keycan();
                         if(n>0)
                         {
                              OLED_ShowNum(40+8*i,2,n+m,1,16);      
                                  key=n+m;
                              i++;
                                  n=0;
                         }
                         if(i==5)
                         {
                              for(i=0ul; i<5; i++)
                  {
                     if(key != u8RxBuf) // 13528-741
                                       {
                                                OLED_ShowString(0,2,"KEY=    ",16);
                                                i=0;
                                                n=0;
                     }
                                       else
                     {
                                          OLED_ShowString(88,2,"OPEN ",16);
                        while(1);
                                       }
               }
                  }
                  Ddl_Delay1ms(200ul);
                }
编译下载程序后,相关的运行效果如图4~图6所示。图4 初始界面
图5 提示界面
图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,弄错位置了。
页: [1]
查看完整版本: 【华大测评】+I2C读写及数码锁设计