久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1695|回復: 9
收起左側

只用按鍵和燈做一個便攜式保險箱

[復制鏈接]
ID:1080265 發表于 2023-5-27 15:46 | 顯示全部樓層 |閱讀模式
按鍵隨機對應一個燈,按下按鍵亮起的燈的位置必須在前一個亮起的燈下面,否則密碼輸入錯誤,所有燈滅,重新輸入。當所有燈按順序正確亮起后,成功解鎖!靈感源于生化危機2重制版里的便攜式保險箱,有玩過的好兄弟會很好理解。

大致演示流程是這個視頻:
https://www.bilibili.com/video/BV1xY4y1y7N6/

流程圖

流程圖

按鍵對應燈

按鍵對應燈

依次按下按鍵順序正確即將完成解鎖

依次按下按鍵順序正確即將完成解鎖
回復

使用道具 舉報

ID:1080265 發表于 2023-5-27 15:48 | 顯示全部樓層
本帖最后由 violet233 于 2023-5-28 11:09 編輯

主要就是我不熟悉指針,變量的關系,無法實現想要的邏輯效果,望各位大佬指點!
八個按鍵八個燈,按鍵就是正常數字鍵盤類排序,燈可以是從上到下排成一列,解鎖順序是從上到下一盞盞依次亮起,不一定從第一盞燈開始,但是每下一盞得在前一盞亮起位置的下面一位。按鍵隨機對應燈,但是每次完整解鎖過程都是對應同一盞燈,按該按鍵就對應亮這盞燈,直至解鎖成功,進行下一次解鎖按鍵和燈的順序從新編排。
回復

使用道具 舉報

ID:213173 發表于 2023-5-27 17:20 | 顯示全部樓層
violet233 發表于 2023-5-27 15:48
主要就是我不熟悉指針,變量的關系,無法實現想要的邏輯效果,望各位大佬指點!

《按鍵隨機對應一個燈,按下按鍵亮起的燈的位置必須在前一個亮起的燈下面》怎么理解?幾個按鍵幾個燈?按鍵與燈的排列布局如何?
回復

使用道具 舉報

ID:1080331 發表于 2023-5-27 21:20 | 顯示全部樓層
隨機對應:首先,我們需要將LED燈和按鍵一一對應,并將它們的位置隨機排列。在單片機中定義一個變量表示當前亮起的燈的位置,初始值為-1(即沒有任何燈亮起),每按下一個按鍵,就將當前亮起的燈的位置加1。如果該位置大于等于最后一個燈的位置,說明密碼正確,解鎖成功。否則,所有燈都會熄滅,并重新開始輸入密碼。

按順序正確亮起:為了確保按鍵與LED燈按順序正確亮起,我們可以在按下按鍵后使用邏輯運算比較當前燈的位置和上一個亮起的燈的位置,如果當前燈的位置大于上一個亮起的燈的位置,則將當前燈的位置設置為上一個燈的位置加1。

使用計時器:為了避免機械化攻擊或無限制地嘗試密碼,我們可以使用計時器在一定時間內限制密碼輸入的次數,如果超過了設置的次數,系統將鎖定一段時間,防止不正常的嘗試。

狀態顯示:我們可以使用LED燈來顯示當前系統的狀態,例如借助三個LED燈來表示解鎖成功、解鎖失敗和輸入密碼中等狀態,方便用戶進行操作。

電源管理:在系統設計中需要考慮供電問題,可以使用電池等不間斷電源以確保該系統的長期穩定運行。
以下是實例代碼:
#include <reg51.h>

sbit key1 = P1^0; //按鍵引腳定義
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit led1 = P2^0; //LED引腳定義
sbit led2 = P2^1;
sbit led3 = P2^2;
int current_led = -1; //當前亮起的燈位置
int last_led = -1; //上一個亮起的燈位置

void init() {
    key1 = 1; //按鍵初始化為高電平
    key2 = 1;
    key3 = 1;
    led1 = 0; //LED初始化為低電平熄滅狀態
    led2 = 0;
    led3 = 0;
}

void delay(int t) { //延時函數
    for(int i=0; i<t; i++) {
        for(int j=0; j<120; j++);
    }
}

void main() {
    init();
    while(1) {
        if(!key1) { //按鍵1被按下
            if(current_led == -1 || current_led == last_led + 1) { //密碼正確
                current_led++;
                last_led = current_led;
                switch(current_led) { //根據當前亮起的LED位置控制LED燈亮滅
                    case 0:
                        led1 = 1;
                        break;
                    case 1:
                        led2 = 1;
                        break;
                    case 2:
                        led3 = 1;
                        break;
                }
                if(current_led == 2) { //所有LED燈都亮起,解鎖成功
                    delay(500);
                    led1 = 0;
                    led2 = 0;
                    led3 = 0;
                    current_led = -1;
                    last_led = -1;
                }
            } else { //密碼錯誤
                delay(500);
                led1 = 0;
                led2 = 0;
                led3 = 0;
                current_led = -1;
                last_led = -1;
            }
        }
        if(!key2) { //按鍵2被按下
            if(current_led == -1 || current_led == last_led + 1) { //密碼正確
                current_led++;
                last_led = current_led;
                switch(current_led) {
                    case 0:
                        led1 = 1;
                        break;
                    case 1:
                        led2 = 1;
                        break;
                    case 2:
                        led3 = 1;
                        break;
                }
                if(current_led == 2) {
                    delay(500);
                    led1 = 0;
                    led2 = 0;
                    led3 = 0;
                    current_led = -1;
                    last_led = -1;
                }
            } else { //密碼錯誤
                delay(500);
                led1 = 0;
                led2 = 0;
                led3 = 0;
                current_led = -1;
                last_led = -1;
            }
        }
        if(!key3) { //按鍵3被按下
            if(current_led == -1 || current_led == last_led + 1) { //密碼正確
                current_led++;
                last_led = current_led;
                switch(current_led) {
                    case 0:
                        led1 = 1;
                        break;
                    case 1:
                        led2 = 1;
                        break;
                    case 2:
                        led3 = 1;
                        break;
                }
                if(current_led == 2) {
                    delay(500);
                    led1 = 0;
                    led2 = 0;
                    led3 = 0;
                    current_led = -1;
                    last_led = -1;
                }
            } else { //密碼錯誤
                delay(500);
                led1 = 0;
                led2 = 0;
                led3 = 0;
                current_led = -1;
                last_led = -1;
            }
        }
    }
}

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:73992 發表于 2023-5-27 23:59 | 顯示全部樓層
畫邏輯框圖
回復

使用道具 舉報

ID:86450 發表于 2023-5-28 00:00 | 顯示全部樓層
那是 幾個按鍵 幾個燈
回復

使用道具 舉報

ID:1080265 發表于 2023-5-28 10:46 | 顯示全部樓層
wulin 發表于 2023-5-27 17:20
《按鍵隨機對應一個燈,按下按鍵亮起的燈的位置必須在前一個亮起的燈下面》怎么理解?幾個按鍵幾個燈?按 ...

八個按鍵八個燈,按鍵就是正常數字鍵盤類排序,燈是從上到下排成一列,解鎖順序從上到下,不一定從第一盞燈開始,但是每下一盞得在前一盞亮起位置的下面。
回復

使用道具 舉報

ID:1080265 發表于 2023-5-28 10:58 | 顯示全部樓層

大致邏輯圖
51hei圖片_20230528105727.jpg
回復

使用道具 舉報

ID:1080265 發表于 2023-5-28 11:00 | 顯示全部樓層
violet233 發表于 2023-5-27 15:48
主要就是我不熟悉指針,變量的關系,無法實現想要的邏輯效果,望各位大佬指點!

附上各類說明

大致邏輯圖

大致邏輯圖

類似動畫效果

類似動畫效果

按正確順序即將完成

按正確順序即將完成
回復

使用道具 舉報

ID:1080265 發表于 2023-5-28 12:12 | 顯示全部樓層
597329015 發表于 2023-5-27 21:20
隨機對應:首先,我們需要將LED燈和按鍵一一對應,并將它們的位置隨機排列。在單片機中定義一個變量表示當 ...

首先感謝你的回答。
你的邏輯清晰,給我提供了一定的新思路。以你的效果燈必然是固定順序亮起的,按鍵排列是隨機的,就是已經設置好亂序鍵盤再來輸入密碼,像蘋果手機解鎖界面,但是鍵盤是亂序的,上面一排燈是用來提示密碼總共位數和已輸入位數,因此是必然一盞盞亮起表示依次被填滿,與我所設計的不同。
此外密碼輸入次數是不受限制的,嚴格來講這不是密碼鎖,只是一個訓練短時記憶的小游戲。
如果可以,我想再問一個問題:燈和按鍵已經按順序集成在了電路板上,不可再調序,如何按下按鍵亮起固定隨機對應的燈?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人高清在线视频 | 亚洲欧美激情视频 | 手机看黄av免费网址 | 日韩在线播放视频 | 亚洲精品一级 | 天天综合网天天综合色 | 欧美爱爱视频 | 日韩一级二级片 | 在线视频亚洲 | 黑人巨大精品欧美黑白配亚洲 | 成人午夜在线视频 | 欧美亚洲高清 | 欧美黄色一区 | 国外成人在线视频 | 黄色片av | 久久成人一区 | 日韩午夜场| 精品视频在线观看 | 国产乱码精品1区2区3区 | 在线观看亚洲 | 99re在线 | 成人精品鲁一区一区二区 | 国产精品成人一区二区三区 | 日韩一区二区久久 | 91看片官网 | 国产精品视频一区二区三区, | 色婷婷综合久久久中文字幕 | 中文字幕av一区二区三区 | 午夜精品一区二区三区在线观看 | 精品国模一区二区三区欧美 | 亚洲第一色站 | 亚洲精品在线免费 | 国产91在线 | 中日 | 亚洲视频一区二区三区四区 | 国产精品久久久久久久久久久免费看 | www.色综合 | 亚洲欧美日韩一区二区 | 81精品国产乱码久久久久久 | 久久精品亚洲精品国产欧美kt∨ | 欧美日韩精品久久久免费观看 | 日本在线免费 |