標(biāo)題:
STC15F2K60S2單片機(jī)密碼鎖+1602+繼電器控制
[打印本頁(yè)]
作者:
luzhichao
時(shí)間:
2018-3-13 20:01
標(biāo)題:
STC15F2K60S2單片機(jī)密碼鎖+1602+繼電器控制
15做的密碼鎖,4*5矩陣鍵盤,做出過(guò)實(shí)物。STC15F2K60S2芯片。效果還可以,還有51的程序,最后做的15.
單片機(jī)源程序如下:
/*--------------------------------------------------------------------------------
* 實(shí) 驗(yàn) 名 : 電子密碼鎖
* 實(shí)驗(yàn)說(shuō)明 : 密碼鎖
* 連接方式 :
* 注 意 :重置密碼錯(cuò)誤需要重新按重置密碼按鍵
* 時(shí) 間 :10月17日19:16:05
*******************************************************************************/
#include<STC15F2K60S2.h>
#include<main.h>
#include"lcd.h"
#include"eeprom.h"
#include<intrins.h>
extern IapIdle();
extern BYTE IapReadByte(WORD addr);
extern IapProgramByte(WORD addr, BYTEdat);
extern IapEraseSector(WORD addr);
/*******************************************************************************
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void main(void) //主函數(shù)
{ unsigned char i;
init();
for(i=0;i<6;i++)
{
mima[i]=IapReadByte(0x0000+i)+'1';
}
while(1) //調(diào)用函數(shù)
{
//display();
KeyScan();
Count();
disPlay();
change();
lock();
reinput();
rec();
back();
// jdq();
tuichu();
if(KeyValue==13){for(i=0;i<6;i++)
{mima[i]='1';}
}
}
}
/*******************************************************************************
* 函 數(shù) 名 : KeyScan
* 函數(shù)功能 : 檢測(cè)有按鍵按下并讀取鍵值
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void KeyScan(void) //可以得到鍵值
{
char a = 0;
KeyValue=0xff;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//讀取按鍵是否按下
{
Delay10ms(1);//延時(shí)10ms進(jìn)行消抖
if(GPIO_KEY!=0x0f)//再次檢測(cè)鍵盤是否按下
{
//測(cè)試列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=4;break;
case(0X0d): KeyValue=8;break;
case(0X0e): KeyValue=12;break;
}
//測(cè)試行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue+3;break;
case(0Xb0): KeyValue=KeyValue+2;break;
case(0Xd0): KeyValue=KeyValue+1;break;
case(0Xe0): KeyValue=KeyValue;break;
}
while((a<50) && (GPIO_KEY!=0xf0)) //檢測(cè)按鍵松手檢測(cè)
{
Delay10ms(1);
a++;
}
LED_YELLOW=0;
Delay10ms(10) ;
LED_YELLOW=1;
}
}
// change_keyvalue();
}
void tuichu(){
if(KeyValue==15&&r==1)
{r=0; mboot=0;flag=0;N=0;cishu=0;relay=0;LED_GREEN=1;
for(t=0;t<6;t++) //清屏
{
disTab[0][9+t]=' ';
//寫正確
disTab[2][10+t]=' ';
}
}
}
void lock(void) //鎖定鍵盤
{
unsigned char t;
if(N==3)
{ mboot=7; //腳大于 6鎖定鍵盤
for(t=0;t<6;t++) //清屏
{
disTab[0][9+t]=' ';
}
LED_RED=0; //紅燈閃爍報(bào)警
Delay10ms(10);
LED_RED=1;
Buzzer(); //報(bào)警
}
}
void reinput() //重新輸入
{
if(N<3&&KeyValue==10&&mboot==6&&r==0) //判斷輸入次數(shù)小于3,鍵值為10即按下了確認(rèn)鍵,腳寫完了,無(wú)錯(cuò)
{ unsigned char t;
N++; //初始化
mboot=0;
flag=0;
for(t=0;t<6;t++)
{
disTab[0][9+t]=' ';
}
}
}
void Count(void) //密碼判斷
{
if(mboot<6){
if(KeyValue>=0 && KeyValue<=9){ //值在0到9之間
if(cishu==0){ //沒有按下重置密碼按鈕
password[mboot]=KeyValue; //暫存數(shù)據(jù)于PASSWORD中
//disTab[0][9+mboot]='0'+ password[mboot];
disTab[0][9+mboot]='*'; //以*來(lái)遮掩密碼
}
if (cishu==1){ //如果按下重置密碼按鍵
temp[mboot]=KeyValue; //存數(shù)據(jù)到temp中以便修改與判斷
disTab[0][9+mboot]='0'+ temp[mboot]; //顯示要修改的密碼
// disTab[0][9+mboot]='*';
}
if(cishu==2){ //確認(rèn)修改
if(KeyValue!=temp[mboot]) //如果輸入錯(cuò)誤
c=1; //標(biāo)志位置1
if(KeyValue==temp[mboot]) //如果正確
temp[mboot]=KeyValue;
disTab[0][9+mboot]='0'+ KeyValue; //顯示
}
mboot++;
}
}
if(KeyValue==10) //確認(rèn)密碼
{
unsigned char t;
for(t=0;t<6;t++)
{
if(mima[t]!=password[t]+'0') //輸入錯(cuò)誤
{flag=1; //標(biāo)志位置一
break;}
}
if(flag==0) //密碼輸入沒有錯(cuò)誤
r=1; //標(biāo)志位置1
}
if(flag==1) //密碼輸入有錯(cuò)誤
{ unsigned char t;
for(t=0;t<5;t++)
{ disTab[1][10+t]=Error[t];} //寫錯(cuò)誤
LED_RED=0; //閃紅燈
Delay10ms(5);
LED_RED=1;
}
if(flag==0&&r==1) //如果檢測(cè)標(biāo)志位為1而且密碼沒有錯(cuò)
{ unsigned char t;
relay=1; //打開繼電器
for(t=0;t<5;t++) //寫正確
{disTab[2][10+t]=Right[t];
}
LED_RED=1;LED_GREEN=0; //綠燈亮
}
}
void change(void) //重置密碼
{
unsigned char t;
if(mboot==6&&r==1&&KeyValue==11){ //腳寫完而且檢測(cè)標(biāo)志位置1按下重置按鍵
cishu++; //加次數(shù)
for(t=0;t<6;t++)
{
disTab[0][9+t]=' '; //清屏
} mboot=0;
}
if(cishu==3) //確認(rèn)重置
{
if(c==1) // 重置有錯(cuò)誤
{
for(t=0;t<5;t++)
{disTab[0][10+t]=Error[t];} //寫錯(cuò)誤
disPlay();
Delay10ms(150) ;
for(t=0;t<6;t++)
{
disTab[0][9+t]=' ';
}mboot=6;cishu=0;c=0;
//重新輸入
}
else
{
suc=1; //密碼修改成功標(biāo)志位
for(t=0;t<5;t++)
{disTab[0][10+t]=Right[t];} //寫正確
IapEraseSector(0x0000); //擦除扇區(qū)0
for(t=0;t<6;t++)
{
mima[t]=temp[t]+'0';//賦值
IapProgramByte(0x0000+t,mima[t]-49);
}
}
}
if(cishu==3&&c==0)
{
LED_GREEN=1;
}
}
void back() //退格密碼
{ unsigned char t;
if(mboot>0&&KeyValue==12)
{mboot--;
disTab[0][9+mboot]=' '; //蓋上空格
if(cishu==2)
{c=0;
for(t=0;t<mboot;t++)
{
if(KeyValue!=temp[t])
c=1;
}
}
}
}
void rec(void) //密碼修改成功返回
{
unsigned char t;
if(suc==1)
{
for(t=0;t<6;t++)
{ //相當(dāng)于初始化
disTab[0][9+t]=' ';
}
mboot=0;
suc=0;
cishu=0;
r=0;
LcdWriteCom(0xC0);
for(t=0;t<16;t++)
{
disTab[1][t] = eror[t];
}
relay=0;
}
}
void disPlay(void){ //顯示密碼
unsigned char i;
LcdWriteCom(0x80);
for(i=0; i<16; i++)
{
LcdWriteData(disTab[0][i]);
}
LcdWriteCom(0xC0);
for(i=0; i<16; i++)
{
LcdWriteData(disTab[1+r][i]);
}
}
/******************************************************************************
函數(shù)功能: 蜂鳴器
輸 入: 無(wú)
輸 出: 無(wú)
******************************************************************************/
void Buzzer()
{
buzzer=1;
delay(50);
buzzer=0;
}
void init()
{
unsigned char i;
P5M1 &= ~0x10; //0001 0000 0x10
P5M0 |= 0x10; //0001 0000 0x10
LED_RED=1;LED_GREEN=1;LED_YELLOW=1;
relay=0;
LcdInit();
t=0;
for(i=0; i<9; i++) //寫屏
{
LcdWriteData(PuZh[i]);
}
for(i=0; i<3; i++) //閃三下,說(shuō)明燈正常
{ LED_RED=0;LED_GREEN=0;LED_YELLOW=0;
Delay10ms(10) ;
LED_RED=1;LED_GREEN=1;LED_YELLOW=1;
Delay10ms(10) ;
LED_RED=0;LED_GREEN=0;LED_YELLOW=0;
Delay10ms(10) ;
LED_RED=1;LED_GREEN=1;LED_YELLOW=1;
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
51密碼鎖+1602+繼電器控制后期轉(zhuǎn)15.zip
(47.82 KB, 下載次數(shù): 77)
2018-3-13 20:00 上傳
點(diǎn)擊文件名下載附件
51密碼鎖
下載積分: 黑幣 -5
15密碼鎖+1602+繼電器控制.zip
(61.5 KB, 下載次數(shù): 108)
2018-3-13 20:00 上傳
點(diǎn)擊文件名下載附件
STC15F2K60S2密碼鎖
下載積分: 黑幣 -5
作者:
admin
時(shí)間:
2018-3-14 05:33
好資料 能分享個(gè)原理圖嗎?
作者:
bhjyqjs
時(shí)間:
2018-3-14 09:30
程序?qū)懙恼婧茫芗由瞎芾韱T密碼就好了。
作者:
hitmanblood
時(shí)間:
2018-4-8 22:47
我也想看看
作者:
時(shí)逝人非
時(shí)間:
2018-7-9 10:55
下載不了
作者:
15276691870
時(shí)間:
2018-7-9 12:17
這兩個(gè)資料有何不同
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1