找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5884|回復(fù): 2
收起左側(cè)

STM32使用OLED屏做的3位電子密碼鎖

[復(fù)制鏈接]
ID:295924 發(fā)表于 2018-5-8 08:17 | 顯示全部樓層 |閱讀模式
STM32c8做的3位電子密碼鎖,上電后需要先設(shè)置密碼(由按鍵輸入),設(shè)置完可以驗(yàn)證,如果輸入的密碼與設(shè)置的不一樣,那么會(huì)顯示密碼錯(cuò)誤,如果密碼輸入正確,那么就可以繼續(xù)或者修改密碼。

單片機(jī)源程序如下:
  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();                     //延時(shí)函數(shù)初始化         
  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;}  //確認(rèn)修改密碼
  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;}   //密碼輸入錯(cuò)誤
  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; //請(qǐng)?jiān)O(shè)置密碼
  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; //請(qǐng)輸入密碼
  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; //密碼錯(cuò)誤               
  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. }

復(fù)制代碼

所有資料51hei提供下載:
紅外遙控電子密碼鎖(OLED屏).rar (314.99 KB, 下載次數(shù): 87)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:561695 發(fā)表于 2019-6-19 04:39 | 顯示全部樓層
可以參考這個(gè), 基本類似 V6.0_S11-IIC.7z (7.51 MB, 下載次數(shù): 30)


回復(fù)

使用道具 舉報(bào)

ID:509384 發(fā)表于 2019-6-24 09:49 | 顯示全部樓層
lilyliu2011 發(fā)表于 2019-6-19 04:39
可以參考這個(gè), 基本類似

有沒有具體的連線圖啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表