找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4800|回复: 2
打印 上一主题 下一主题
收起左侧

STM32使用OLED屏做的3位电子密码锁

[复制链接]
跳转到指定楼层
楼主
ID:295924 发表于 2018-5-8 08:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32c8做的3位电子密码锁,上电后需要先设置密码(由按键输入),设置完可以验证,如果输入的密码与设置的不一样,那么会显示密码错误,如果密码输入正确,那么就可以继续或者修改密码。

单片机源程序如下:
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "oled.h"
  4. #include "bmp.h"
  5. #include "led.h"
  6. #include "key.h"

  7. u8 KEY=0;
  8. u8 MM[3]={0,0,0};
  9. u8 mm[3]={0,0,0};
  10. //u8 flag=0;
  11. u8 Flag=0;

  12. void Display(u8 x);
  13. void MiMa(void) ;
  14. void mima(void) ;
  15. void Led_Init(u8 x);

  16. int main(void)
  17. {       
  18.        
  19.          delay_init();                     //延时函数初始化         
  20.          OLED_Init();                        //初始化OLED  
  21.          OLED_Clear();
  22.          led_init();
  23.           beep=0;
  24.          key_init();
  25.          Display(0);
  26.          Led_Init(3);
  27.          delay_ms(2000);

  28.         while(1)
  29.         {               
  30.                 if(Flag==0)
  31.                 {
  32.                 Display(1);
  33.         MiMa();
  34.                 OLED_Clear();
  35.                 }
  36.    if(Flag==1)
  37.    {
  38.            Display(2);
  39.             mima();   
  40.          if(mm[0]==MM[0]&&mm[1]==MM[1]&&mm[2]==MM[2])
  41.                 {
  42.                 Led_Init(3);
  43.                 OLED_Clear();
  44.                 Display(3);
  45.                 delay_ms(1000);
  46.                 Display(5);
  47.         while(KEY==0) Key_Scan();//等待按键按下
  48.                 if(KEY==11) {OLED_Clear();Flag=0;KEY=0;}  //确认修改密码
  49.                 if(KEY==12) {OLED_Clear();Flag=1;KEY=0;}
  50.                        
  51.                 }   //密码输入正确
  52.     else {Led_Init(3);OLED_Clear();Display(4);beep=1;delay_ms(1000);beep=0;}   //密码输入错误
  53.    }          
  54.         }          
  55.        
  56. }
  57. void Display(u8 x)
  58. {
  59.         switch(x)
  60.         {
  61.         case 0:
  62.         OLED_ShowCHinese(16,2,0);
  63.         OLED_ShowCHinese(32,2,1);
  64.         OLED_ShowCHinese(48,2,2);
  65.         OLED_ShowCHinese(64,2,3);
  66.         OLED_ShowCHinese(80,2,4);
  67.         break;  //电子密码锁
  68.         case 1:
  69.         OLED_ShowCHinese(16,2,5);
  70.         OLED_ShowCHinese(32,2,6);
  71.         OLED_ShowCHinese(48,2,7);
  72.         OLED_ShowCHinese(64,2,8);
  73.         OLED_ShowCHinese(80,2,9);
  74.        
  75.         OLED_ShowCHinese(0,4,8);
  76.         OLED_ShowCHinese(16,4,9);
  77.         OLED_ShowChar(32,4,':');
  78.         break; //请设置密码
  79.         case 2:
  80.         OLED_ShowCHinese(16,2,5);
  81.         OLED_ShowCHinese(32,2,10);
  82.         OLED_ShowCHinese(48,2,11);
  83.         OLED_ShowCHinese(64,2,8);
  84.         OLED_ShowCHinese(80,2,9);
  85.        
  86.         OLED_ShowCHinese(0,4,8);
  87.         OLED_ShowCHinese(16,4,9);
  88.         OLED_ShowChar(32,4,':');
  89.         break; //请输入密码
  90.                 case 3:
  91.         OLED_ShowCHinese(0,6,8);
  92.         OLED_ShowCHinese(16,6,9);
  93.         OLED_ShowCHinese(32,6,12);
  94.         OLED_ShowCHinese(48,6,13);
  95.         break; //密码正确
  96.                         case 4:
  97.         OLED_ShowCHinese(0,6,8);
  98.         OLED_ShowCHinese(16,6,9);
  99.         OLED_ShowCHinese(32,6,14);
  100.         OLED_ShowCHinese(48,6,15);
  101.         break; //密码错误               
  102.         case 5:
  103.         OLED_ShowCHinese(0,0,17);       
  104.         OLED_ShowCHinese(16,0,8);
  105.         OLED_ShowCHinese(32,0,9);
  106.         OLED_ShowCHinese(48,0,18);
  107.         OLED_ShowChar(64,0,':');
  108.         OLED_ShowString(72,0,"KEY0");
  109.         OLED_ShowCHinese(0,2,19);
  110.         OLED_ShowCHinese(16,2,20);
  111.         OLED_ShowCHinese(32,2,18);
  112.         OLED_ShowChar(48,2,':');
  113.         OLED_ShowString(56,2,"KEY1");
  114.         break; //修改密码
  115.                        
  116.         }
  117. }
  118. void MiMa(void)  //取密码
  119. {
  120.         u8 i;
  121.         for(i=0;i<3;i++)
  122.         {
  123.         while(KEY==0) Key_Scan();//等待按键按下
  124.         MM[i]=KEY-1;
  125.         OLED_ShowNum(40+i*8,4,KEY-1,1,16);
  126.         KEY=0;
  127.     delay_ms(300);       
  128.                
  129. }
  130.                 Flag=1;   //取密码完成
  131. }
  132. void mima(void)  //输入密码
  133. {
  134.         u8 i;
  135.         for(i=0;i<3;i++)
  136.         {
  137.         while(KEY==0) Key_Scan();//等待按键按下
  138.         mm[i]=KEY-1;
  139.         OLED_ShowNum(40+i*8,4,KEY-1,1,16);
  140.         Led_Init(i);
  141.         KEY=0;
  142.     delay_ms(300);                                               
  143. }               
  144. }
  145. void Led_Init(u8 x)
  146. {
  147.         switch(x)
  148.         {
  149.                 case 0:led0=0;break;
  150.                 case 1:led1=0;break;
  151.                 case 2:led2=0;break;
  152.                 case 3:led0=1;led1=1;led2=1;break;
  153.         }
  154. }

复制代码

所有资料51hei提供下载:
红外遥控电子密码锁(OLED屏).rar (314.99 KB, 下载次数: 86)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:561695 发表于 2019-6-19 04:39 | 只看该作者
可以参考这个, 基本类似 V6.0_S11-IIC.7z (7.51 MB, 下载次数: 30)


回复

使用道具 举报

板凳
ID:509384 发表于 2019-6-24 09:49 | 只看该作者
lilyliu2011 发表于 2019-6-19 04:39
可以参考这个, 基本类似

有没有具体的连线图啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表