久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
密碼鎖程序精華版89c52單片機
[打印本頁]
作者:
獵鷹
時間:
2016-5-12 15:45
標題:
密碼鎖程序精華版89c52單片機
0.png
(93.79 KB, 下載次數: 129)
下載附件
2016-5-16 03:35 上傳
89C52單片機的密碼鎖:
密碼鎖主程序精華版89c52.rar
(89.5 KB, 下載次數: 51)
2016-5-12 15:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
部分程序預覽:
/****************************************************************/
/****通過借鑒別人作品自己加以修改才完成了此作品*****************/
/****如果大家有啥建議歡迎聯系我,我們共同改進*******************/
/*************************************************/
/********這個程序舍去了外部eeprom簡化了外圍電路****************/
#include<reg52.h>
#include<intrins.h>
#include<1602yj.h>
#include<key.h>
#include<bujing.h>
#include<eeprom.h>
#include<buzzer.h>
#include<time.h>
#include<mima.h>
#define address 0x2000
uchar idata mima_5[6] = {1,2,3,4,5,6}; //初始密碼
uchar idata mima_6[6]={1,1,1,1,1,1}; //管理員密碼
uchar flag_change,flag;
uchar aa;//存放密碼錯誤的次數,夠三次報警
uint num;//計數
uchar flag_bg,flag_h,m;
uchar flag_key=1;
uchar i;
void init()
{
init_lcd();//液晶初始化
fen=1; //關閉蜂鳴器
beiguang=0;//打開液晶背光
TMOD |= 0x11; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
//TH0=0x00; //給定初值
//TL0=0x00;
ET1=0; //定時器中斷關閉 警報用
TR1=0; //定時器開關關閉 警報用
EA = 1;//打開總中斷
ET0 = 1;//打開定時器0中斷
TR0 = 0;//關閉定時器
TH0 = 0x4c;//50ms裝初值
TL0 = 0x00;
EX1=1;
IT1=1; //外部中斷0為下降沿觸發
}
void mima()
{
uchar key;
uchar idata mima_1[6]={' ',' ',' ',' ',' ',' '};//存放密碼緩沖區
uchar idata mima_2[6]={' ',' ',' ',' ',' ',' '};
uchar idata mima_3[6]={' ',' ',' ',' ',' ',' '};
key=step_choose();
beiguang=0;
TR0=0;
switch (key) //switch語句比if語句效率高 在這里選擇這種語句
{
case E: //恢復出廠設置
{
lcdpos(0,0);
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
write_com(0x0f);//顯示光標
display_n(" Admin Password ");
lcdpos(1,0);
if(input_mima(mima_2)) //處理輸入密碼
{
if(mimaduibi(mima_2,mima_6)) //密碼正確
{
lcdpos(0,0);
write_com(0x0c);
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n(" PassWord Right ");
ERASE(address);
for(i=0;i<6;i++)
{ Write_ISP (address+i, mima_5[i]);}
delayx(1500);
aa = 0; //清除密碼錯誤次數
fen = 0; //響一下
delayx(1000);
fen = 1;
}
else //密碼 不正確
{
lcdpos(0,0);
write_com(0x0c); //關光標
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n("PassWord Error");
delayx(1000);
aa++;
if(aa == 4)
{
aa = 0;
warn(); //密碼不正確報警
}
}
}
else //密碼沒有輸入正確或完成
{
lcdpos(0,0);
write_com(0x0c); //關光標
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n("PassWord Error");
delayx(1000);
aa++;
if(aa == 4)
{
aa = 0;
warn(); //密碼不正確報警
}
}
}
break;
case A: //A被按下,接收輸入密碼,
{
for(i=0;i<6;i++)
{
mima_1[i]= Read_ISP(address+i);
}
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
write_com(0x0f);//顯示光標
lcdpos(0,0);
display_n(" Input PassWord");
if(input_mima(mima_2)) //處理輸入密碼
{
if(mimaduibi(mima_2,mima_1)) //密碼正確
{
lcdpos(0,0);
write_com(0x0c);
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n(" PassWord Right ");
aa = 0; //清除密碼錯誤次數
kai(); //開鎖
fen = 0; //響一下
delayx(1000);
fen = 1;
TR0 = 1;
flag_h=1;
flag=0;
while(key != C&&flag_h!=0) //C沒按下一直開 如果忘記關門定時器10s到了會自動關門
{
key = scan();
}
if(flag_h==1||m==0)//檢測是不關過門 flag_h==1表示沒關門 m檢測進入外部中斷后執行關門指令 也除去一個警告
{ guan();
flag=1;
TR0 = 0;
}
}
else //密碼 不正確
{
lcdpos(0,0);
write_com(0x0c); //關光標
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n("PassWord Error");
delayx(1000);
aa++;
if(aa == 4)
{
aa = 0;
warn(); //密碼不正確報警
}
}
}
else //密碼沒有輸入正確或完成
{
lcdpos(0,0);
write_com(0x0c); //關光標
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n("PassWord Error");
delayx(1000);
aa++;
if(aa == 4)
{
aa = 0;
warn(); //密碼不正確報警
}
}
}
break;
case F: //F被按下,修改密
{
for(i=0;i<6;i++)
{
mima_1[i]= Read_ISP(address+i);
}
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
write_com(0x0f);//顯示光標
lcdpos(0,0);
display_n(" Input PassWord");
write_com(0x0f);//顯示光標
if(input_mima(mima_2)) //處理輸入密碼
{
if(mimaduibi(mima_2,mima_1)) //密碼正確
{
lcdpos(0,0);
write_com(0x0c);
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n(" PassWord Right ");
aa = 0; //清除密碼錯誤次數
delayx(1000);
flag_change = 1;
if(flag_change) //下面開始修改密碼
{ lcdpos(0,0);
write_com(0x0c); //關閉光標
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n("In New PassWord");
delayx(1000);
lcdpos(1,0);
write_com(0x0f);//顯示光標
if(input_mima(mima_2)) //處理輸入密碼
{
lcdpos(0,0);
write_com(0x0c);
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n("Input New Pass"); //確定新密碼
lcdpos(1,0);
display_n("PassWord again");
delayx(2000);
lcdpos(0,0);
write_com(0x0f);//顯示光標
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n("In New PassWord");
if(input_mima(mima_3)) //處理輸入密碼
{
if(mimaduibi(mima_2,mima_3)) //密碼正確
{
lcdpos(0,0);
write_com(0x0c);
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n("Change PassWord");
lcdpos(1,0);
display_n(" SUCCESSFULLY ");
ERASE(address);
for(i=0;i<6;i++)
{ Write_ISP (address+i, mima_3[i]);}//把修改的密碼存進內部rom
delayx(2000);
flag_change = 0;
}
else //密碼 不正確
{
lcdpos(0,0);
write_com(0x0c); //關光標
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n("PassWord Error");
delayx(1000);
aa++;
if(aa == 4)
{
aa = 0;
warn(); //密碼不正確報警
}
flag_change = 0;
}
}
else //密碼沒有輸入正確或完成
{
lcdpos(0,0);
write_com(0x0c); //關光標
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n("PassWord Error");
delayx(1000);
aa++;
if(aa == 4)
{
aa = 0;
warn(); //密碼不正確報警
}
}
}
else //密碼沒有輸入正確或完成
{
lcdpos(0,0);
write_com(0x0c); //關光標
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n("PassWord Error");
delayx(1000);
flag_change = 0;
aa++;
if(aa == 4)
{
aa = 0;
warn(); //密碼不正確報警
}
}
}
}
else //密碼 不正確
{
lcdpos(0,0);
write_com(0x0c); //關光標
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n("PassWord Error");
delayx(1000);
aa++;
if(aa == 4)
{
aa = 0;
warn(); //密碼不正確報警
}
}
}
else //密碼沒有輸入正確或完成
{
lcdpos(0,0);
write_com(0x0c); //關光標
write_com(0x06);//寫一個字符后地址指針加 1
write_com(0x01);//顯示清零,數據指針清零
display_n("PassWord Error");
delayx(1000);
aa++;
if(aa == 4)
{
aa = 0;
warn(); //密碼不正確報警
}
}
}
break;
case C: if(flag==0)
{
guan();
flag=1;
}
break;
default:
break;
}
}
void main()
{
init();
while(1)
{
mima();
/* lcdpos(0,1);
display1(scan());// *///測試矩陣鍵盤程序 鍵盤必須改成‘1’字符形式
}
}
void timer0() interrupt 1 //定時器0中斷, 背光// 自鎖
{
TH0 = 0x4c;//50ms定時
TL0 = 0x00;
num++;
if(num ==600)//30s時間到
{
num = 0;
flag_bg=1;
}
}
void counter(void) interrupt 2
{
if(flag==0)
{
flag=1;
TR0 = 0;
flag_h=0;
m=0;
//guan(); 有1個警告 所以不在此調用關鎖函數
}
}
/***************因兩個定時器工作要考慮優先級********/
/*************定時不準*****************************/
/*********所以用了一個定時器**********************/
復制代碼
作者:
譚雅Ayom
時間:
2016-5-15 22:06
這個是用到單片機的什么?
作者:
379673480
時間:
2016-10-12 15:01
請問這個有沒有原理圖
作者:
1115475664
時間:
2016-12-7 22:06
沒有原理圖呀
作者:
a6873125
時間:
2016-12-25 06:17
沒圖說個毛
作者:
samyu
時間:
2016-12-25 14:24
好東西,學習下
作者:
小丑,
時間:
2018-1-10 13:16
我想知道怎么看啊
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产精品99视频
|
一本综合久久
|
亚洲成人免费在线观看
|
一级国产精品一级国产精品片
|
91精品国产乱码麻豆白嫩
|
亚洲女人天堂网
|
久久午夜电影
|
国产一区二区日韩
|
欧美一区成人
|
伊人久久一区二区
|
国产精品不卡
|
www.99re
|
亚洲精品在线观
|
激情五月婷婷综合
|
日韩免费视频一区二区
|
天天想天天干
|
九九热在线视频观看这里只有精品
|
国内av在线
|
欧美精品一区二区三区在线
|
日本韩国电影免费观看
|
欧美一级片a
|
国产精品123区
|
va精品
|
国产成人网
|
亚洲午夜av久久乱码
|
久久久亚洲综合
|
亚洲免费三区
|
欧美精品中文字幕久久二区
|
国产精品夜夜夜一区二区三区尤
|
丁香六月激情
|
亚洲综合在线一区
|
亚洲成人国产
|
日日操操
|
亚洲精品亚洲人成人网
|
97超在线视频
|
日韩视频在线一区二区
|
999精品在线观看
|
黄色在线免费观看视频网站
|
99re在线视频免费观看
|
麻豆国产一区二区三区四区
|
国产精品久久久久aaaa九色
|