本帖最后由 jinglixixi 于 2020-10-2 13:41 編輯
在HC32F460的開發板上,提供了一個I2C接口的AT24C02存儲芯片,通過它可進行關鍵參數的讀寫。 由于其存儲容量相對較小,故不適宜做字庫或圖庫來使用。 AT24C02的接口原理圖如圖1所示,其占用的MCU引腳如下: SCL---PC4 SDA--- PC4
1.jpg (16.08 KB, 下載次數: 68)
下載附件
2020-10-2 13:36 上傳
圖1 AT24C02接口
在結合OLED 屏及陣列按鍵的情況下,我們可以將其設計為一個秘密鎖。 OLED 屏的接口原理圖如圖2所示,其占用的MCU引腳如下: SCL---PD0 SDA--- PD1
2.jpg (17.35 KB, 下載次數: 65)
下載附件
2020-10-2 13:36 上傳
圖2 OLED 屏接口
陣列按鍵的接口原理圖如圖3所示,其占用的MCU引腳如下: KEYOUT0---PD12 KEYOUT1---PD13 KEYOUT2---PD14 KEYIN0---PA4 KEYIN1---PA5 KEYIN2---PA6
3.jpg (37.91 KB, 下載次數: 76)
下載附件
2020-10-2 13:36 上傳
圖3 陣列按鍵接口
實現秘密門鎖的主要程序如下: - OLED_ShowString(0,0,"AT24C02 OK !",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[i]=n+m;
- i++;
- n=0;
- }
- if(i==5)
- {
- for(i=0ul; i<5; i++)
- {
- if(key[i] != u8RxBuf[i]) // 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.jpg (32.99 KB, 下載次數: 72)
下載附件
2020-10-2 13:36 上傳
圖4 初始界面
5.jpg (40.82 KB, 下載次數: 66)
下載附件
2020-10-2 13:36 上傳
圖5 提示界面
6.jpg (38.16 KB, 下載次數: 64)
下載附件
2020-10-2 13:36 上傳
圖6 解鎖界面
感興趣的話還可以在此基礎上添加密碼的修改功能,其處理方式為按功能鍵激活密碼修改功能,然后先輸入原密碼并與AT24C02中的鑰匙比較,若正確再輸入新密碼并存入AT24C02中作為鑰匙保存。由于密碼的存放位置不變,故程序無需進行變更。若是密碼存放在程序中,則要想修改密碼,就只能修改程序并重新下載了!
|