導航:首頁 > 操作系統 > 單片機密碼輸入

單片機密碼輸入

發布時間:2022-10-22 02:51:13

❶ 用單片機設計一個簡易的密碼鎖,用鍵盤輸入0~9三位數的密碼.密碼輸入正確顯示「P」約3s,並通過P3.0埠將

你這個問題內容量太大,不可能有誰那麼多時間給你開發,我這邊有個做過的類似的,代碼送你了。

#include<msp430x14x.h>
#include"Delay.h"
#include"x24c02.h"
#include"LCD1602.h"

ucharLCD_ID_1[16]={"Password:------"};
ucharLCD_ID_2[16]={"OldCode:------"};
ucharLCD_ID_3[16]={""};
ucharLCD_ID_4[16]={"NewCode:------"};

#defineJI_OPENP3OUT|=BIT6
#defineJI_CLOSEP3OUT&=~BIT6

uchara=10,b=10+0x40,c=0,i=0,j=0,k=0,super=0;

ucharflag=0;

uchartable1[6]={1,2,3,4,5,6};
uchartable2[6]={0,0,0,0,0,0};
uchartable3[6]={0,0,0,0,0,0};
ucharsupercode[6]={8,8,8,8,8,8};
//SCL時鍾線
#defineSCO_SETP1OUT|=BIT3//輸出高
#defineSCO_RESETP1OUT&=(~BIT3)//輸出低
#defineSCO_IN(P1IN&BIT3)//輸出
#defineSCOINP1DIR&=(~BIT3)//設置輸入
#defineSCOOUTP1DIR|=BIT3//設置輸出
//SDA數據線
#defineSDO_SETP1OUT|=BIT2
#defineSDO_RESETP1OUT&=(~BIT2)
#defineSDO_IN(P1IN&BIT2)
#defineSDOINP1DIR&=(~BIT2)
#defineSDOOUTP1DIR|=BIT2

voidshuru(void);
voidshe(void);
voidbijiao(void);

ucharchumo_read(void)
{
uchari,dat;
SCOOUT;//設置輸出
SCO_RESET;//輸出低

SDOOUT;
SDO_SET;
delay_us(93);
SDO_RESET;
delay_us(10);
SDOIN;

for(i=0;i<16;i++)
{
SCO_SET;
delay_us(5);

if(SDO_IN!=0)
{
dat=i+1;
}

SCO_RESET;
delay_us(5);
}
delay_ms(2);
returndat;
}

voidOPEN(void)
{
P1OUT|=BIT4;
P3OUT&=~BIT5;
delay_ms(1000);delay_ms(1000);
P3OUT&=~BIT5;
P1OUT&=~BIT4;
}
voidCLOSE(void)
{
P3OUT|=BIT5;
P1OUT&=~BIT4;
delay_ms(1000);delay_ms(1000);
P3OUT&=~BIT5;
P1OUT&=~BIT4;
}
voidmain(void)
{
//系統初始化
WDT_Init();//STOPWDT
MCLK_Init();//MCLK=8M
Port_Init();//CLOSEALLPORT

P3DIR|=BIT5;
P1DIR|=BIT4;
P3OUT&=~BIT5;
P1OUT&=~BIT4;
d24c_init();

L1602_Init();
L1602_string(1,1,LCD_ID_1);

P3DIR|=BIT6;
P3DIR&=~BIT7;
P6DIR|=BIT2;
JI_CLOSE;

delay_ms(10);
table1[0]=d24c_read(1);
delay_ms(20);
table1[1]=d24c_read(2);
delay_ms(20);
table1[2]=d24c_read(3);
delay_ms(20);
table1[3]=d24c_read(4);
delay_ms(20);
table1[4]=d24c_read(5);
delay_ms(20);
table1[5]=d24c_read(6);
delay_ms(500);

while(1)
{
delay_ms(100);

shuru();
she();
bijiao();
}
}

voidshuru(void)
{
wcmd(0x80+a+c);
wcmd(0x0f);

if((chumo_read()!=0)&&(chumo_read()<11))
{
delay_ms(10);
if(chumo_read()!=0)
{
table2[c]=chumo_read();
L1602_char(1,a+c+1,(chumo_read()%10)+0X30);
c++;
delay_ms(500);
if(c==6)
{
c=0;
L1602_string(1,1,LCD_ID_1);
}
}
}

j=0;
for(i=0;i<6;i++)
{
if(table1[i]!=table2[i])
{
j=1;
break;
}
}

if(chumo_read()==13)
{
delay_ms(10);
if(chumo_read()==13)
{
c=0;
L1602_string(1,1,LCD_ID_1);
delay_ms(1000);
}
}
}

voidshe(void)
{
if(chumo_read()==16)
{
delay_ms(10);
if(chumo_read()==16)
{
L1602_string(1,1,LCD_ID_3);
L1602_string(2,1,LCD_ID_2);
flag=1;
c=0;
delay_ms(500);
}
}
while(flag==1)
{
wcmd(0x80+0x40+a+c);
wcmd(0x0f);

if((chumo_read()!=0)&&(chumo_read()<11))
{
delay_ms(10);
if(chumo_read()!=0)
{
table2[c]=chumo_read();
L1602_char(2,a+c+1,(chumo_read()%10)+0X30);
c++;
delay_ms(500);
if(c==6)
{
c=0;
L1602_string(2,1,LCD_ID_2);
super=1;
for(i=0;i<6;i++)
{
if(supercode[i]!=table2[i])
{
super=0;
break;
}
}
}
}
}

k=1;
for(i=0;i<6;i++)
{
if(table1[i]!=table2[i])
{
k=0;
break;
}
}

if(chumo_read()==13)
{
delay_ms(10);
if(chumo_read()==13)
{
c=0;
L1602_string(2,1,LCD_ID_2);
delay_ms(1000);
}
}

if(k==1||super==1)
{
L1602_string(2,1,LCD_ID_4);
}
while(k==1||super==1)
{
wcmd(0x80+0x40+a+c);
wcmd(0x0f);

if((chumo_read()!=0)&&(chumo_read()<11))
{
delay_ms(10);
if(chumo_read()!=0)
{
table1[c]=chumo_read();
L1602_char(2,a+c+1,(chumo_read()%10)+0X30);
c++;
if(c==6)
{
delay_ms(1000);
c=0;
flag=0;
k=0;
super=0;
d24c_write(1,table1[0]);
delay_ms(30);
d24c_write(2,table1[1]);
delay_ms(30);
d24c_write(3,table1[2]);
delay_ms(30);
d24c_write(4,table1[3]);
delay_ms(30);
d24c_write(5,table1[4]);
delay_ms(30);
d24c_write(6,table1[5]);
delay_ms(30);

L1602_string(1,1,LCD_ID_1);
L1602_string(2,1,LCD_ID_3);
}
}
delay_ms(400);
}
delay_ms(100);
if(chumo_read()==13)
{
delay_ms(10);
if(chumo_read()==13)
{
c=0;
L1602_string(2,1,LCD_ID_2);
delay_ms(500);
}
}
}
}
}
voidbijiao()
{
if((j==0)||((P3IN&BIT7)!=0))
{
JI_OPEN;
P6OUT&=~BIT2;
OPEN();
delay_ms(2000);
L1602_string(1,1,LCD_ID_1);
for(i=0;i<6;i++)
{
table2[i]=0;
}
JI_CLOSE;
CLOSE();
}
else
{
P6OUT|=BIT2;
}
}

❷ proteus使用晶元時要輸密碼是啥意思

Proteus是英國Labcenter公司開發的EDA工具軟體,它集合了原理圖設計、電路分析與模擬、單片機代碼級調試與模擬、系統測試與功能驗證以及PCB設計完整的電子設計過程。Proteus ISIS是智能原理圖輸入系統,利用該系統既可以進行智能原理圖設計、繪制和編輯,又可以進行電路分析與實物模擬。尤為突出的是,它是到目前為止最適合單片機系統開發使用的設計與模擬平台。
1.一個密碼鎖必須有密碼,所以最開始我們點擊SETKEY開始設置密碼,點擊輸入准備READY開始輸入密碼,DELETE可回退,輸入完成後點擊SURE保存密碼然後點擊CLOSE
2.每次要輸入密碼時都需點擊READY准備輸入然後進行輸入密碼開鎖
3.當密碼正確小燈會亮,數碼管顯示ON即密碼鎖打開,並且可以點擊MODIFY進行修改密碼
4.當密碼錯誤時數碼管顯示err,並且單獨的數碼管顯示錯誤次數,當錯誤達到三次則會進行倒計時報警

❸ 51單片機C語言簡易的密碼輸入

#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

#define DataPort P0 //定義數據埠 程序中遇到DataPort 則用P0 替換
#define CtrlPort P1
#define KeyPort P2

unsigned char code DuanMa[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xa7,0xa1,0x86,0x8e};// 顯示段碼值0~F
unsigned char code WeiMa[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//分別對應相應的數碼管點亮,即位碼
unsigned char TempData[8]; //存儲顯示值的全局變數
unsigned char code password[8]={1,2,3,4,5,6,7,8};
//可以更改此密碼做多組測試

void DelayUs2x(unsigned char t);//us級延時函數聲明
void DelayMs(unsigned char t); //ms級延時
void Display(unsigned char FirstBit,unsigned char Num);//數碼管顯示函數
unsigned char KeyScan(void);//鍵盤掃描
unsigned char KeyPro(void);
void Init_Timer0(void);//定時器初始化
/*------------------------------------------------
主函數
------------------------------------------------*/
void main (void)
{
unsigned char num,i,j;
unsigned char temp[8];
bit Flag;
Init_Timer0();

while (1) //主循環
{

CtrlPort = 0;
num=KeyPro();
if(num!=0xff)
{
if(i==0)
{
for(j=0;j<8;j++)//清屏
TempData[j]=0;
}
if(i<8)
{
temp[i]=DuanMa[num];//把按鍵值輸入到臨時數組中
for(j=0;j<=i;j++) //通過一定順序把臨時數組中
//的值賦值到顯示緩沖區,從右往左輸入
TempData[7-i+j]=temp[j];
}
i++; //輸入數值累加
if(i==9)//正常等於8即可,由於我們需要空一個用於清屏,
//清屏時的按鍵不做輸入值
{
i=0;
Flag=1;//先把比較位置1
for(j=0;j<8;j++)//循環比較8個數值,
//如果有一個不等 則最終Flag值為0
Flag=Flag&&(temp[j]==DuanMa[password[j]]);
//比較輸入值和已有密碼
for(j=0;j<8;j++)//清屏
TempData[j]=0;
if(Flag)//如果比較全部相同,標志位置1
{
TempData[0]=~0x3f; // "o"
TempData[1]=~0x73; // "p"
TempData[2]=~0x79; // "E"
TempData[3]=~0x54; // "n"
//說明密碼正確,輸入對應操作 顯示"open"
}
else
{
TempData[0]=~0x79; // "E"
TempData[1]=~0x50; // "r"
TempData[2]=~0x50; // "r"
//否則顯示"Err"
}

}
}
}
}
/*------------------------------------------------
uS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字元變數,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
長度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字元變數,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{

while(t--)
{
//大致延時1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
顯示函數,用於動態掃描數碼管
輸入參數 FirstBit 表示需要顯示的第一位,如賦值2表示從第三個數碼管開始顯示
如輸入0表示從第一個顯示。
Num表示需要顯示的位數,如需要顯示99兩位數值則該值輸入2
------------------------------------------------*/
void Display(unsigned char FirstBit,unsigned char Num)
{
static unsigned char i=0;

DataPort=0; //清空數據,防止有交替重影

CtrlPort=WeiMa[i+FirstBit]; //取位碼

DataPort=TempData[i]; //取顯示數據,段碼

i++;
if(i==Num)
i=0;

}
/*------------------------------------------------
定時器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
//TH0=0x00; //給定初值
//TL0=0x00;
EA=1; //總中斷打開
ET0=1; //定時器中斷打開
TR0=1; //定時器開關打開
}
/*------------------------------------------------
定時器中斷子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
TH0=(65536-2000)/256; //重新賦值 2ms
TL0=(65536-2000)%256;

Display(0,8); // 調用數碼管掃描

}

/*------------------------------------------------
按鍵掃描函數,返回掃描鍵值
------------------------------------------------*/
unsigned char KeyScan(void) //鍵盤掃描函數,使用行列反轉掃描法
{
unsigned char cord_h,cord_l;//行列值中間變數
KeyPort=0x0f; //行線輸出全為0
cord_h=KeyPort&0x0f; //讀入列線值
if(cord_h!=0x0f) //先檢測有無按鍵按下
{
DelayMs(10); //去抖
if((KeyPort&0x0f)!=0x0f)
{
cord_h=KeyPort&0x0f; //讀入列線值
KeyPort=cord_h|0xf0; //輸出當前列線值
cord_l=KeyPort&0xf0; //讀入行線值

while((KeyPort&0xf0)!=0xf0);//等待松開並輸出

return(cord_h+cord_l);//鍵盤最後組合碼值
}
}return(0xff); //返回該值
}
/*------------------------------------------------
按鍵值處理函數,返回掃鍵值
------------------------------------------------*/
unsigned char KeyPro(void)
{
switch(KeyScan())
{
case 0xee:return 0;break;//0 按下相應的鍵顯示相對應的碼值
case 0xde:return 1;break;//1
case 0xbe:return 2;break;//2
case 0x7e:return 3;break;//3
case 0xed:return 4;break;//4
case 0xdd:return 5;break;//5
case 0xbd:return 6;break;//6
case 0x7d:return 7;break;//7
case 0xeb:return 8;break;//8
case 0xdb:return 9;break;//9
case 0xbb:return 10;break;//a
case 0x7b:return 11;break;//b
case 0xe7:return 12;break;//c
case 0xd7:return 13;break;//d
case 0xb7:return 14;break;//e
case 0x77:return 15;break;//f
default:return 0xff;break;
}
}

❹ 單片機電子密碼鎖設計,採用4×4鍵盤實現密碼的輸入功能,當密碼輸入正確之後,鎖就打開,如果輸入的密碼

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define KEY P3 //鍵盤輸入埠
#define No_key 20 //無按鍵時的返回值
#define lcddata P2 //1602的數據輸入埠
sbit lcden= P1^2;
sbit lcdrs= P1^0;
sbit lcdrw= P1^1;
sbit light= P1^3;
sbit light1= P1^4;
uchar j ; //用來統計輸入 個數的全局變數
uchar aa; //用來在定時器中計數的 全局變數

uchar code table[]= " Hello!";
uchar code table1[]=" OK! " ;
uchar code table2[]="Enter please:" ;
uchar code key_table[16] =
{
1,2,3,10,
4,5,6,11,
7,8,9,12,
0,13,14,15
};
uchar password[]={2,0,1,0,9,3} ; //設定初始密碼
uchar save[6]; //保存輸入的數據
uchar conflag ; //確認標志
uchar lockflag; //鎖鍵盤標志
uchar startflag; //開始標志

void delay(uint z); //延時子函數
void wright_com(uchar com); //寫指令函數
void wright_data(uchar date) ; //寫數據函數
void init(); //初始化
void display_OK(); // 顯示OK
void delete(); //刪除輸入的最後一個數

uchar keyscan() ; //帶返回值的鍵盤掃描程序

void enter_code(uchar t); //輸入密碼函數,把輸入的數據存入數組中並在屏幕上顯示相應的東西,
void confirm(); //確認密碼對不對,把輸入的數據與密碼逐一對比,完全一樣剛正確,
void succeed_an(); //輸入密碼成功時的 響應,
void fail_an(); //輸入密碼 失敗時 響應
void lockkey(); //鎖鍵盤三秒
void alarm(); //發出警報聲
void reset(); //復位函數
void display_enter(); //顯示輸入
void main(void)
{
uchar temp;
init();
while(1)
{

if(lockflag)
{
temp=keyscan(); // 鎖鍵期間也要進行鍵盤掃描
if(temp!=No_key) //重新記時三秒
{
aa=0; //重新在定時器中計數
}

}
else
{
temp=keyscan(); //反復掃描輸入,等待隨時輸入

if(temp!=No_key) //有按鍵按下才進行下面的操作
{
if(temp==10)
{
reset();
startflag=1; //開始標志置位
}
if(startflag)
{
enter_code(temp); //每掃描一次鍵盤就要進行一次處理,保存輸入的數值

if(temp==13) //按下確認鍵盤就要進行密碼確認
{
confirm(); //進行確認判斷
if(conflag) //密碼確認為正確
{
succeed_an(); //密碼正確,作出相應的反應
}
else
{
fail_an(); //密碼錯誤,作相應反應
}
}

if(temp==14)
{
delete(); //作刪除操作
}
}
}
}

}
}
/****** 顯示enter********/
void display_enter()
{
uchar num;
wright_com(0x80);
for(num=0;num<13;num++)
{
wright_data(table2[num]);
}
}
/****** 顯示OK********/
void display_OK()
{
uchar num;
wright_com(0x80);
for(num=0;num<13;num++)
{

wright_data(table1[num]);
}
}
/****** 刪除最後一個********/
void delete()
{
wright_com(0x80+0x40+j); //確定刪除對象
wright_data(' '); //顯示空格即為刪除
save[--j]=0; //刪除後數據清零
wright_com(0x80+0x40+j); //為下次輸入數據時寫好位置,必須是在最後一個後面
}
/****** 對各種變數進行復位********/
void reset()
{
uchar num;
display_enter();
wright_com(0x80+0x40); //擦除屏幕上的顯示
for(num=0;num<6;num++)
{
save[num]=0; //對輸入的數值進行清零
wright_data(' '); //顯示的是空格
}
wright_com(0x80+0x40); //下次再輸入時可以又從起始位置輸入
lockflag=0; //各種變數要清零回起始狀態
conflag=0;
j=0;
}
/****** 輸入密碼正確進行響應********/
void succeed_an()
{

light=0; //燈亮
display_OK(); //顯示成功
delay(1000);
light=1; //燈滅
}
/****** 輸入密碼錯誤進行響應********/
void fail_an()
{
alarm();
lockkey();
}
/****** 發出警報聲**********/
void alarm() //這個以後再擴展它
{

}
/******鎖鍵盤三秒************/
void lockkey()
{
lockflag=1;
}
/******輸入密碼並在屏幕上顯示星號******/
void enter_code(uchar t)
{

if(t>=0&&t<10)
{

if(j==0)
{
wright_com(0x80+0x40) ; //第一輸入時要先寫入地址指令,否則無法顯示
wright_data('*') ;
}
else
{
wright_data('*') ;//不是第一個輸入則不用再寫地址
}
save[j++]=t; //保存輸入的數據
}
}

/******校對密碼以確定是不是正確的**********/
void confirm()
{
uchar k;
for(k=0;k<6;k++)
{
if(password[k]!=save[k]) //對數組中的內容進行逐一比較,一旦有數據不對馬上退出循環
{
break;
}
}
if(k==6) //要是條件退出的話說明六個數全對密碼
{
conflag=1; // 進行標志密碼正確
}

}

/******中斷服務程序**********/
void timer0() interrupt 1
{

TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //重裝初值
if(lockflag)
{
aa++;
light1=0;
if(aa>=60) //三秒到了
{
aa=0; //清零可以方便下次再使用
light1=1; //關閉警報
lockflag=0; //標志清零解除鍵鎖,方便下次使用

}
}

}
/******初始化***********/
void init()
{
uchar num;
/*****定時器初始化****/
TMOD=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1; //開啟總中斷
TR0=1;//把定時器關閉

/****1602初始化******/
lcdrw=0; //這個必須要置 零,否則無法正常顯示
lcden=0;
wright_com(0x38) ; //初始化
wright_com(0x0c) ; //打開游標 0x0c不顯示游標 0x0e游標不閃,0x0f游標閃
wright_com(0x01) ; //清顯示
wright_com(0x80) ;
for(num=0;num<9;num++)
{
wright_data(table[num]);
delay(1);
}
}
/******1602寫入指令************/
void wright_com(uchar com)
{
lcdrs=0;
lcddata=com;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
/******1602寫入數據***********/
void wright_data(uchar date)
{
lcdrs=1;
lcddata=date;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
/******延時函數************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--) ;
}

/**********4x4矩陣鍵盤掃描函數*********/
uchar keyscan()
{
uchar temp,num=No_key; //num的初值要為無鍵盤按下時的返回值
/*********掃描第一行****************/
KEY=0xfe;
temp=KEY;
temp=temp&0xf0; //讀出高四位
while(temp!=0xf0)
{

delay(5); //延時消抖
temp=KEY;
temp=temp&0xf0;
while(temp!=0xf0) //確認確實有按鍵按下
{

temp=KEY;
switch(temp) //根據這八個電平可以確定是哪個按鍵按下
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=10;
break;
}
while(temp!=0xf0) //等待鬆手
{
temp=KEY;
temp=temp&0xf0;
}

}
}
/*********掃描第二行***************/
KEY=0xfd;
temp=KEY;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=KEY;
temp=temp&0xf0;
while(temp!=0xf0)
{

temp=KEY;
switch(temp)
{
case 0xed:num=4;
break;
case 0xdd:num=5;
break;
case 0xbd:num=6;
break;
case 0x7d:num=11;
break;
}
while(temp!=0xf0)
{
temp=KEY;
temp=temp&0xf0;
}

}
}
/*********掃描第三行****************/
KEY=0xfb;
temp=KEY;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=KEY;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY;
switch(temp)
{
case 0xeb:num=7;
break;
case 0xdb:num=8 ;
break;
case 0xbb:num=9;
break;
case 0x7b:num=12;
break;
}
while(temp!=0xf0)
{
temp=KEY;
temp=temp&0xf0;
}

}
}
/*********掃描第四行****************/
KEY=0xf7;
temp=KEY;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=KEY;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=KEY;
switch(temp)
{
case 0xe7:num=0;
break;
case 0xd7:num=13;
break;
case 0xb7:num=14;
break;
case 0x77:num=15;
break;
}
while(temp!=0xf0)
{
temp=KEY;
temp=temp&0xf0;
}

}
}

return num;
}

❺ 單片機在輸入密碼時能用的加密演算法

我認為單片機在輸入密碼的時候,能夠加入密算說法是非常正確的,而且它的算數的結果是非常正確的。

❻ 基於51單片機的密碼鎖

基於51單片機的密碼鎖的話其實我是不知道是什麼意思的 所以說不好意思咯(๑ó﹏ò๑)

❼ 單片機電子密碼鎖設置

我發了

❽ 51單片機C語言,電子密碼的驗證輸入程序,矩陣鍵盤用作輸入,密碼正確時,向串口送1,否則送0

#include<reg51.h>
#defineucharunsignedchar
ucharkeyval,keynum=0;
voidt1isr()interrupt3
{
ucharsccode,recode;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
P3=0x0f;//發0掃描,列線輸入
if((P3&0x0f)!=0x0f)keynum++;//有鍵按下
elsekeynum=0;
if(keynum>5) //按鍵保持在5次中斷以上
{
keynum=0;
sccode=0xef;//逐行掃描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
getkey((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
getkey(0);
}

voidgetkey(ucharkey)
{
if(key==0){keyval=0xff;return;}
switch(key)
{
case0x11:keyval=7;break;
case0x12:keyval=4;break;
case0x14:keyval=1;break;
case0x18:keyval=10;break;
case0x21:keyval=8;break;
case0x22:keyval=5;break;
case0x24:keyval=2;break;
case0x28:keyval=0;break;
case0x41:keyval=9;break;
case0x42:keyval=6;break;
case0x44:keyval=3;break;
case0x48:keyval=11;break;
case0x81:keyval=12;break;
case0x82:keyval=13;break;
case0x84:keyval=14;break;
case0x88:keyval=15;break;
default:keyval=0xff;break;
}
}
main()
{
ucharmima[]="12345678";
ucharmmins[8];
uchari,num,sc;
TMOD=0x21;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
ET0=1;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x40;
EA=1;
num=0;
while(1)
{
if(keyval!=0xff){mmins[num]=keyval;num++;}
if(num>=8)
{
num=0;
sc=1;
for(i=0;i<8;i++)
{
if(mmins[i]!=mima[i]){sc=0;break;}
SBUF=sc;
while(TI==0);
TI=0;
}
}
}

}

❾ 51單片機C語言簡易的密碼輸入

這樣子當然是不行的,首先按鍵沒有消抖,再者代碼根本就不對。I大於4我沒看懂是幹嘛的,像這樣子子基本就是只要在I>4的時候按下P1_7,就解鎖成功了。密碼鎖形同虛設。

這樣子改看看,不行再追問,我這邊沒得編譯運行。:

下面的代碼沒有消抖,如需要樓主自己加吧。

uchartmp;
for(i=0;i<6;i++)
{
while((tmp=P1)!=0);//如果按鍵按下是0的話就不用改,如果按鍵按下是1的話改成0XFF。這句是先檢測是否有按鍵按下。
if(P1==tab[i])continue;
else
{
i=0;
continue;
}
if(P1_7==0&&i=5)
ledg=~ledg,ledr=~ledr;
else...
}

❿ VB顯示單片機輸入的密碼(電子密碼鎖設計)

1。
根據實驗任務來設置一個好的密碼,採用二個按鍵實現輸入功能,輸入正確的密碼,當密碼,鎖就打開,如果輸入了不正確的密碼三次,鎖按鈕3秒鍾,同時發現報警聲,沒有任何按鍵按下,直到三種後,只要打開按鍵鎖定功能;否則仍按鈕三秒鍾內按下時,它重新鎖定按鍵3秒和報警。

2。原理

圖4.32.1

3。系統硬體電路板連接

(1)。在「單片機系統」區域P0.0/AD0線連接到「音頻放大模塊」區域中的SPK IN端子;

(2)。 「音頻放大模塊」區域中的SPK OUT端子的揚聲器和;

(3)。在「單片機系統」區域P2.0/A8-P2.7/A15與連接到任何一個ABCDEFGH終端「四個靜態數碼顯示」區域8芯電纜;

(4)。在「單片機系統」區域中的P1.0用導線連接到「八發光二極體模塊」區域中的L1端子;

(5)。在「單片機系統」區域P3.6/WR,P3.7/RD連接到SP1和SP2終端的「獨立式鍵盤」區域中的線??;

4。節目內容

(1)。設置一個密碼,這個程序中的密碼是固定在程序存儲器ROM,假設默認密碼是五個密碼「12345」。

(2)。輸入密碼問題:感謝,那麼關鍵之一,功能鍵,數字鍵的另一個關鍵。在輸入過程中,先輸入密碼的長度,再根據密碼的位數輸入密碼,該密碼,直到所有的長度已輸入;功能鍵或輸入後確認即可完成密碼的輸入過程。入比較處理,以確定密碼的狀態和相應的過程。

(3)。鍵禁止功能:初始化,允許當按鈕被按下時,開始進入鍵來標識狀態的鍵輸入密碼,按鍵鎖定功能被激活,但一個國家的開始發生在一個不正確的密碼輸入了三個倍的情況下。

5 C語言源代碼

#包括

無符號的字元代碼PS [] = {1,2,3,4,5};

無符號的字元代碼dispcode [] = {的0x3F,0X06,為0x5B,0X4F,0x66,

0x6d,0x7d,0X07,到0x7f,0x6f,為0x00,0X40};

無符號字元pslen = 9;

無符號字元templen;

無符號字元型位數;

無符號字元funcount;

無符號字元digitcount;

unsigned char型psbuf [9];

位cmpflag;

位hibitflag;

位讀ErrorFlag;

位rightflag;

無符號整型秒3;

無符號整型AA;

無符號整型BB;

位alarmflag;

位exchangeflag;

無符號整型立方厘米;

無符號整型日;

位okflag;

無符號字元岡;

無符號字元OKB;

無效的主要(無效)

{

unsigned char型I,J;

P2 = dispcode [digitcount];

TMOD = 0X01;

TH0 =(65536-500)/ 256;

TL0 =(65536-500)%256;

TR0 = 1;

ET0 = 1;

EA = 1;

而(1)

{

如果(cmpflag == 0)

{

如果(P3_6 == 0)/ /功能鍵 {

就(i = 10,I> 0,I - )

為(J = 248; J> 0;的J - );

如果(P3_6 == 0)

{

如果(hibitflag == 0)/ /如果按鍵被鎖定

funcount + +; (funcount == pslen +2)/ /前

如果有按功能鍵1,然後按數字鍵1,完成密碼長度的輸入

{

funcount = 0;

cmpflag = 1;

P1 = dispcode [funcount]; / /你可以決定是否按下燈按鈕,

}

{

秒3 = 0;

同時(P3_6 == 0);

如果(P3_7 == 0)/ /數字鍵

{

就(i = 10;> 0;我 - )

為(J = 248; J> 0;的J - );

如果(P3_7 == 0)

{

如果(hibitflag == 0)

{

digitcount + +;

如果(digitcount == 10)

{

digitcount = 0;

P2 = dispcode [digitcount];

如果(funcount == 1)/ /按功能鍵,鍵入密碼長度

{

pslen = digitcount;

templen = pslen;

否則,如果(funcount> 1)/ /開始記錄你的密碼

{

psbuf [funcount-2] = digitcount;

{

秒3 = 0;

同時(P3_7 == 0);

} / /原這個「}」

其他/ /比較

{

cmpflag = 0;

就(i = 0;我<pslen,我+ +)

{

如果(!PS [I] = psbuf [I])

{

hibitflag = 1; / /密碼輸入不正確,按鍵鎖定功能被激活

I = pslen;

讀ErrorFlag = 1;

rightflag = 0;

cmpflag = 0;

秒3 = 0;

轉到一個;

CC = 0;

讀ErrorFlag = 0;

rightflag = 1;

hibitflag = 0;

一:cmpflag = 0;

}

T0無效(無效)中斷1使用0

=(65536-500)/ 256 ;

TL0 =(65536-500)%256;

如果((讀ErrorFlag == 1)&&(rightflag == 0))

{

BB +;

如果(BB == 800)

{

BB = 0;

alarmflag =alarmflag;

}

如果(alarmflag == 1)

{

P0_0 =P0_0; / /報警聲

}

AA +;

如果(AA == 800)

{

AA = 0;

P0_1 =P0_1; / / LED2發光二極體閃光燈

}

秒3 +;

如果(秒3 == 6400)/ /閃四次(8轉換),自動復位到以前的按ENTER鍵狀態

{

秒3 = 0;

hibitflag = 0;

讀ErrorFlag = 0;

rightflag = 0;

cmpflag = 0;

P0_1 = 1;

alarmflag = 0;

BB = 0;

AA = 0;

如果((讀ErrorFlag == 0)&&(rightflag == 1))/ /發出「叮咚」聲

{ BR /> P0_1 = 0; / / LED2 LED燈

CC + +;

如果(CC <1000)

{

okflag = 1;

否則,如果(CC <2000)

{

okflag = 0;

其他/ /自動復位到國家新聞

{

讀ErrorFlag = 0之前ENTER;

rightflag = 0;

hibitflag = 0;

cmpflag = 0;

P0_1 = 1; / / LED2發光二極體消除

CC = 0;

岡= 0;

OKB = 0;

okflag = 0;

P0_0 = 1;

}

如果(okflag == 1)

{

岡+ +;

如果(OKA == 2)

{

丘= 0;

P0_0 =P0_0;

{

OKB + +;

如果(OKB == 3)

{

OKB = 0;
P0_0 =P0_0;

閱讀全文

與單片機密碼輸入相關的資料

熱點內容
程序員哪些平台接私活 瀏覽:173
單片機充電電路原理圖 瀏覽:1000
android軟體雲伺服器地址 瀏覽:213
如何用伺服器做內網穿透服務 瀏覽:401
oracle加密表空間重置密碼 瀏覽:302
mdk編譯後目標文件 瀏覽:615
老人動手解壓 瀏覽:720
小米sd卡解壓 瀏覽:996
程序員那麼可愛陸漓替老袁說情 瀏覽:28
當女程序員遇見問題 瀏覽:746
32位編譯器什麼意思 瀏覽:355
php多參數函數 瀏覽:17
通達信板塊動作源碼 瀏覽:751
matlab完全自學一本通pdf 瀏覽:251
php源碼本地安裝 瀏覽:961
伺服器怎麼用不會斷電 瀏覽:301
主從伺服器有什麼用 瀏覽:213
jstlpdf 瀏覽:16
安卓原神在哪個app下載 瀏覽:809
單片機編程技術什麼意思 瀏覽:104