国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

51單片機“密碼鎖”代碼詳解

這篇具有很好參考價值的文章主要介紹了51單片機“密碼鎖”代碼詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

注:此代碼一經(jīng)過驗證,讀者不必懷疑其正確性,如果燒錄進去沒有反應(yīng),請自行檢查引腳端口配置,以及仔細分析代碼實現(xiàn)原理。倘若能靜下心來分析代碼,一定能受益匪淺。

廢話不多說,,直接上代碼。如有問題,請下方評論并私信我,收到后一定及時回復(fù)!

51單片機“密碼鎖”代碼詳解

?? ?功能鍵
?? ??? ??? ??? ??? ??? ?S6---S115?? ?數(shù)字鍵0-9
?? ??? ??? ??? ?S16---更改密碼?? ??? ?S17---更改密碼完畢后確認
?? ??? ??? ??? ?S18---重試密碼、重新設(shè)定?? ?S19---關(guān)閉密碼鎖
?? ??? ??? ??? ?初始密碼:000000 ?? ?密碼位數(shù):6位
?? ??? ??? ??? ?注意:掉電后,所設(shè)密碼會丟失,重新上點時,密碼恢復(fù)為原始的000000
?? ??? ??? ??? ?與P1相連的8位發(fā)光LED點亮代表鎖被打開;熄滅代表鎖被鎖上

程序功能:
?? ??? ? ?1、開鎖:
?? ??? ? ?下載程序后,直接按六次S6(即代表數(shù)字0),8位LED亮,鎖被打開,輸入密碼時,
?? ??? ? ?六位數(shù)碼管依次顯示小橫杠。
?? ??? ? ?2、更改密碼:
?? ??? ? ?只有當(dāng)開鎖(LED亮)后,該功能方可使用。
?? ??? ? ?首先按下更改密碼鍵S16,然后設(shè)置相應(yīng)密碼,此時六位數(shù)碼管會顯示設(shè)置密碼對應(yīng)
?? ??? ? ?的數(shù)字。最后設(shè)置完六位后,按下S17確認密碼更改,此后新密碼即生效。
?? ??? ? ?3、重試密碼:
?? ??? ? ?當(dāng)輸入密碼時,密碼輸錯后按下鍵S18,可重新輸入六位密碼。
?? ??? ? ?當(dāng)設(shè)置密碼時,設(shè)置中途想更改密碼,也可按下此鍵重新設(shè)置。
?? ??? ? ?4、關(guān)閉密碼鎖:
?? ??? ? ?按下S19即可將打開的密碼鎖關(guān)閉。
推薦初級演示步驟:輸入原始密碼000000按6次S6密碼正確后LED全部亮表示鎖已打開---按下更
改密碼按鍵S16---按S6到S15設(shè)置密碼---按S17
?? ??? ??? ?確認密碼更改---按S19關(guān)閉密碼鎖---輸入新的密碼打開密碼鎖
*******************************************************************************/


							
#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int

uchar old1,old2,old3,old4,old5,old6; //原始密碼000000
uchar new1,new2,new3,new4,new5,new6;  //每次MCU采集到的密碼輸入
uchar a=16,b=16,c=16,d=16,e=16,f=16; //送入數(shù)碼管顯示的變量
uchar wei,key,temp;

bit allow,genggai,ok,wanbi,retry,close;	 //各個狀態(tài)位

sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;

unsigned char code table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};

void delay(unsigned char i)
{
	uchar j,k;
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}

void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)
{
   dula=0;
   P0=table[a];
   dula=1;
   dula=0;
   
   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(5);
   
   P0=table[b];
   dula=1;
   dula=0;
   
   P0=0xfd;
   wela=1;
   wela=0;
   delay(5);

   P0=table[c];
   dula=1;
   dula=0;
   
   P0=0xfb;
   wela=1;
   wela=0;
   delay(5);
   
   P0=table[d];
   dula=1;
   dula=0;
   
   P0=0xf7;
   wela=1;
   wela=0;
   delay(5);
   
   P0=table[e];
   dula=1;
   dula=0;
   
   P0=0xef;
   wela=1;
   wela=0;
   delay(5);
   
   P0=table[f];
   dula=1;
   dula=0;
   
   P0=0xdf;
   wela=1;
   wela=0;
   delay(5);
}


void keyscan()
{
  {	
    P3=0xfe;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delay(10);
      if(temp!=0xf0)
      {	
        temp=P3;
        switch(temp)
        {
          case 0xee:
               key=0;
			   wei++;
               break;

          case 0xde:
               key=1;
			   wei++;
               break;

          case 0xbe:
               key=2;
			   wei++;
               break;

          case 0x7e:
               key=3;
			   wei++;
               break;
         }
         while(temp!=0xf0) 
        {
           temp=P3;
           temp=temp&0xf0;
           beep=0;
         }
         beep=1;
      }
    }
    P3=0xfd;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delay(10);
      if(temp!=0xf0)
      {
        temp=P3;
        switch(temp)
        {
          case 0xed:
               key=4;
			   wei++;
               break;

          case 0xdd:
               key=5;
			   wei++;
               break;

          case 0xbd:
               key=6;
			   wei++;
               break;

          case 0x7d:
               key=7;
			   wei++;
               break;
         }
         while(temp!=0xf0)
         {
           temp=P3;
           temp=temp&0xf0;
           beep=0;
         }
         beep=1;
      }
      }
    P3=0xfb;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delay(10);
      if(temp!=0xf0)
      {
        temp=P3;
        switch(temp)
        {
          case 0xeb:
               key=8;
			   wei++;
               break;

          case 0xdb:
               key=9;
			   wei++;
               break;
			   
          case 0xbb:
               genggai=1;
			   wei=0;
               break;

          case 0x7b:
		  	   if(allow)
               ok=1;
               break;
         }
        while(temp!=0xf0)
         {
           temp=P3;
           temp=temp&0xf0;
           beep=0;
         }
         beep=1;
      }
      }
	  P3=0xf7;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      delay(10);
      if(temp!=0xf0)
      {
        temp=P3;
        switch(temp)
        {
          case 0xe7:
		  	   retry=1;
               break;

          case 0xd7:
		  	   close=1;
               break;
         }
        while(temp!=0xf0)
         {
           temp=P3;
           temp=temp&0xf0;
           beep=0;
         }
         beep=1;
      }
      }
}
}

void shumima()		//對按鍵采集來的數(shù)據(jù)進行分配
{
	if(!wanbi)
	{
	switch(wei)
	{
		case 1:new1=key; 
			    if(!allow)	a=17;
			   else a=key;	break;
		case 2:new2=key;
				if(a==17) b=17;
				else b=key;	break;
		case 3:new3=key; 
				if(a==17) c=17;
				else c=key;	break;
		case 4:new4=key;
				if(a==17) d=17;
				else d=key;	break;
		case 5:new5=key; 
				if(a==17) e=17;
				else e=key;	break;
		case 6:new6=key; 
				if(a==17) f=17;
				else f=key;
				wanbi=1;	break;
	}
	}
}

void yanzheng()	  //驗證密碼是否正確
{
	if(wanbi)	 //只有當(dāng)六位密碼均輸入完畢后方進行驗證
	{
	if((new1==old1)&(new2==old2)&(new3==old3)&(new4==old4)&(new5==old5)&(new6==old6))
		allow=1;	//當(dāng)輸入的密碼正確,會得到allowe置一
	}
}

void main()
{
	while(1)
	{
		keyscan();
		shumima();
		yanzheng();
		if(allow)	 //驗證完后,若allow為1,則開鎖
		{
			P1=0x00;
			if(!genggai)
				wanbi=0;
		}
		if(genggai)	  //當(dāng)S16更改密碼鍵被按下,genggai會被置一
		{
			if(allow)	 //若已經(jīng)把鎖打開,才有更改密碼的權(quán)限
			{
				while(!wanbi)	//當(dāng)新的六位密碼沒有設(shè)定完,則一直在這里循環(huán)
				{
				 	keyscan();
					shumima();
					if(retry|close)	 //而當(dāng)探測到重試鍵S18或者關(guān)閉密碼鎖鍵S19被按下時,則跳出
					{	wanbi=1;
						break;
					}
					display(a,b,c,d,e,f);
				}
			}
		}
		if(ok)	  //更改密碼時,當(dāng)所有六位新密碼均被按下時,可以按下此鍵,結(jié)束密碼更改
		{		  //其他時間按下此鍵無效
			ok=0; wei=0;
			genggai=0;
			old1=new1;old2=new2;old3=new3; //此時,舊的密碼將被代替
			old4=new4;old5=new5;old6=new6;
			a=16;b=16;c=16;d=16;e=16;f=16;
		}
		if(retry)	//當(dāng)重試按鍵S18被按下,retry會被置位
		{
		retry=0; wei=0;wanbi=0;
		a=16;b=16;c=16;d=16;e=16;f=16;
		new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;		
		}
		if(close)  //當(dāng)關(guān)閉密碼鎖按鍵被按下,close會被置位
		{
			close=0;genggai=0;//所有變量均被清零。
			wei=0;	wanbi=0;
			allow=0;
			P1=0xff;
			a=16;b=16;c=16;d=16;e=16;f=16;
			new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;
		}
		display(a,b,c,d,e,f); //實時顯示
	}
}

這是演示現(xiàn)象:

51單片機“密碼鎖”代碼詳解

?51單片機“密碼鎖”代碼詳解

最后,希望我的分享能給你帶來收獲和啟發(fā),敬請關(guān)注,持續(xù)更新中!

考慮到一些讀者需要相關(guān)資料和解決一些疑問,因此我新建立了一個學(xué)習(xí)交流群,我在群文件里上傳了一些資料,需要的讀者可以入群下載。

群中文件資料我會時常更新,主要資料是51單片機開發(fā)、32單片機開發(fā)、編程、嵌入式學(xué)習(xí)、算法控制等。

由于群中文件還在不斷更新上傳,有些方面的資料還不太完善,希望大家理解。若群中涉及違規(guī)行為,歡迎舉報!

51單片機“密碼鎖”代碼詳解

51單片機“密碼鎖”代碼詳解文章來源地址http://www.zghlxwxcb.cn/news/detail-480702.html

到了這里,關(guān)于51單片機“密碼鎖”代碼詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 51單片機制作簡易密碼鎖

    51單片機制作簡易密碼鎖

    51單片機期末考試設(shè)計題目 設(shè)計要求: 設(shè)計具有16個按鍵和1個數(shù)碼管顯示的密碼鎖,具體要求: 輸入一位密碼(為0~9,A~F之間的數(shù)字),密碼輸入正確顯示“F”并將鎖打開;否則顯示“E”,繼續(xù)保持鎖定狀態(tài)。 基本要求: 密碼鎖的基本功能如下:16個按鍵,分別代表數(shù)

    2024年02月11日
    瀏覽(19)
  • 基于51單片機的密碼鎖設(shè)計

    基于51單片機的密碼鎖設(shè)計

    電子密碼鎖設(shè)計,以AT89C51為主控,晶振電路和復(fù)位電路共同組成最小系統(tǒng),使得單片機可以正常運行。矩陣按鍵作為輸入模塊,輸入密碼,LCD1602作為顯示設(shè)備,顯示輸入的密碼和提示語句,AT24C02作為EEPROM存儲器,使用LED模擬“鎖”,表示鎖的開啟和關(guān)閉狀態(tài)。系統(tǒng)掉電后,

    2024年02月11日
    瀏覽(20)
  • 基于51單片機的電子密碼鎖

    基于51單片機的電子密碼鎖

    主要功能: 1、6位密碼開鎖 可以修改用戶密碼和管理員密碼 斷電記憶 3次錯誤報警鎖住鍵盤

    2024年02月11日
    瀏覽(26)
  • 51單片機實現(xiàn)矩陣鍵盤密碼鎖

    51單片機實現(xiàn)矩陣鍵盤密碼鎖

    使用51單片機的矩陣鍵盤模塊以及l(fā)ed1602顯示屏,實現(xiàn)模擬密碼鎖。 當(dāng)程序燒錄到單片機中后,led1602屏幕會顯示文字。 第一行會顯示單詞“PASSWORD”,第二行顯示4個0,表示我們要寫入的四位密碼,每位默認為0。 矩陣鍵盤前兩行與第三行的前兩個分別代表輸入1-9與0,第三行第

    2024年02月03日
    瀏覽(25)
  • 基于51單片機的電子密碼鎖設(shè)計

    基于51單片機的電子密碼鎖設(shè)計

    一.硬件方案 ????????本系統(tǒng)由STC89C52單片機、4*4矩陣鍵盤,蜂鳴器,復(fù)位電路和晶振電路、繼電器等組成,4*4鍵盤主要用于密碼的輸入和修改,蜂鳴器報警,復(fù)位電路和晶振電路與STC89C52單片機組成單片機最小系統(tǒng)。它具有設(shè)置、修改6位用戶密碼、輸錯報警、密碼錯誤報

    2024年02月16日
    瀏覽(27)
  • 51單片機學(xué)習(xí)--矩陣鍵盤、電子密碼鎖

    51單片機學(xué)習(xí)--矩陣鍵盤、電子密碼鎖

    矩陣鍵盤的模塊原理圖: 功能:按下矩陣按鍵,在LCD上顯示對應(yīng)的數(shù)值。 采用模塊化編程,在此只給出MatrixKey.c 和 main.c 兩部分代碼 這里要注意必須先判斷KeyNum是否為0,否則while不斷循環(huán)會不斷顯示0,導(dǎo)致看不到按下按鈕顯示的數(shù)字 要利用寫好的矩陣鍵盤來制作一個密碼鎖

    2024年02月16日
    瀏覽(26)
  • C51單片機密碼鎖課程設(shè)計

    C51單片機密碼鎖課程設(shè)計

    提示:文章寫完后,目錄可以自動加粗樣式生成,如何生成可參考右邊的幫助文檔 微機原理及單片機應(yīng)用技術(shù)的課程設(shè)計,C51設(shè)計一個密碼鎖; 要求:鍵盤上有0-9個數(shù)字按鍵,功能鍵:確認和取消等,可設(shè)置復(fù)合鍵。密碼的位數(shù)及密碼可以任意設(shè)定,,當(dāng)輸入數(shù)字和設(shè)置的密

    2023年04月10日
    瀏覽(22)
  • 【Proteus仿真】【51單片機】電子密碼鎖設(shè)計

    【Proteus仿真】【51單片機】電子密碼鎖設(shè)計

    本項目使用Proteus8仿真51單片機控制器,使用LCD1602液晶、矩陣按鍵、蜂鳴器、EEPROM模塊、繼電器模塊等。 系統(tǒng)運行后,LCD1602顯示密碼輸入提示界面,系統(tǒng)存儲在EEPROM的初始密碼為123456, 用戶可通過矩陣按鍵S1-S10輸入數(shù)值0-9,當(dāng)在密碼輸入過程中有誤,可按S11鍵回刪并重新輸

    2024年02月13日
    瀏覽(21)
  • 基于51單片機密碼鎖(修改密碼,串口上鎖解鎖,仿真)

    基于51單片機密碼鎖(修改密碼,串口上鎖解鎖,仿真)

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 目錄 一、仿真圖 二、步驟 1.矩陣按鍵 2.串口配置 3.串口接收數(shù)據(jù)判斷 4.修改密碼+密碼輸入 總結(jié) 前言 LCD1602+矩陣按鍵+串口上鎖解鎖+修改密碼 ??提供參考 代碼如下: 代碼如下(示例): 這里把判斷拿

    2024年02月15日
    瀏覽(31)
  • 51單片機(六)矩陣鍵盤和矩陣鍵盤密碼鎖

    51單片機(六)矩陣鍵盤和矩陣鍵盤密碼鎖

    ?? 專欄簡介:本專欄記錄了從零學(xué)習(xí)單片機的過程,其中包括51單片機和STM32單片機兩部分;建議先學(xué)習(xí)51單片機,其是STM32等高級單片機的基礎(chǔ);這樣再學(xué)習(xí)STM32時才能融會貫通。 ?? 專欄適用人群 :適用于想要從零基礎(chǔ)開始學(xué)習(xí)入門單片機,且有一定C語言基礎(chǔ)的的童鞋

    2024年02月04日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包