电子密码锁 单片机.docx
《电子密码锁 单片机.docx》由会员分享,可在线阅读,更多相关《电子密码锁 单片机.docx(23页珍藏版)》请在冰豆网上搜索。
电子密码锁单片机
项目六电子密码锁设计
设计说明书
任务一电子密码锁
一、任务设计要求
1、基本要求:
(1)用单片机控制查询式键盘的8个按键,当按下1-8号按键时,分别在1位数码管上依次显示数字“1”-“8”
(2)用单片机控制矩阵式键盘的16个按键,当按下1-16号按键时,分别在1位数码管上依次显示数字“0”-“9”和字符“A”-“F”。
2、技能提高:
(1)控制要求:
用单片机控制查询式键盘,输入一位密码,为0-3之间的数字,密码正确,显示字符“P”3秒,同时开锁LED亮,若错误,则显示字符“E”3秒,再继续输入;
(2)要求:
用单片机控制矩阵式键盘,矩阵式键盘采用列扫描方式,输入一位密码,为0-15之间的数字,密码正确,显示字符"P"3秒,同时开锁LED亮,若错误,则显示字符"E"3秒,再继续输入。
二、设计过程
1、设计方案确定
2、硬件电路设计
3、软件设计
(1)、绘制流程图
(2)、编写源程序:
PSDEQU21H
ORG0000H
LJMPMAIN
ORG0010H
MAIN:
MOVSP,#3FH
ST1:
MOVP0,#0FFH
MOVPSD,#02
MAIN1:
SETBP3.0
MOVP1,#0111111B
KEY:
MOVA,P0
KEY0:
JBACC.0,KEY1
LJMPERR
KEY1:
JBACC.1,KEY2
LJMPERR
KEY2:
JBACC.2,KEY3
LJMPPASS
KEY3:
JBACC.3,KEY
ERR:
SETBP3.0
MOVP1,#86H
LCALLDELAY1S
LCALLDELAY1S
LCALLDELAY1S
LJMPMAIN1
PASS:
MOVP1,#00001100B
CLRP3.0
LCALLDELAY1S
LCALLDELAY1S
LCALLDELAY1S
LJMPMAIN1
DELAY1S:
MOVR3,#250
DEL3:
MOVR5,#4
DEL2:
MOVR4,#250
DEL1:
NOP
NOP
DJNZR4,DEL1
DJNZR5,DEL2
DJNZR6,DEL3
RET
END
PSDEQU21H
ORG0000H
LJMPMAIN
ORG0010H
MAIN:
MOVSP,#3FH
ST1:
MOVP0,#0FFH
MOVPSD,#02
MAIN1:
SETBP3.0
MOVP1,#0111111B
KEY:
ACALLKS;调用按键查询子程序
JNZK1;判断是否有键按下,若A≠0,说明有键按下
AJMPKEY;无键按下,继续查询
K1:
ACALLDELAY100MS;调用延时程序去抖动
ACALLKS;再次调用按键查询子程序
JNZK2;若A≠0,说明确实有键按下
AJMPKEY;否则因为抖动引起,继续查询按键状态
K2:
MOVR3,#0FEH;设列扫描字为"0FEH",从第0列开始逐列扫描
MOVR4,#00;设置列号初始值为"00"
K3:
MOVA,R3;取列扫描字送P2口
MOVP2,A;扫描第1列
MOVA,P0;读入P0口键盘行线状态
ANLA,#0FH;屏蔽无关的高4位
JBP0.0,L1;第0行有键按下吗?
若P0.0=0,说明有键按下
MOVA,#00H
AJMPLK;将第0行首号"00"送A,转至键号计算程序
L1:
JBP0.1,L2;第1行有键按下吗?
若P0.1=0,说明有键按下
MOVA,#04H
AJMPLK;将第1行首号"04"送A,转至键号计算程序
L2:
JBP0.2,L3;第2行有键按下吗?
若P0.2=0,说明有键按下
MOVA,#08H
AJMPLK;将第2行首号"08"送A,转至键号计算程序
L3:
JBP0.3,NEXT;第3行有键按下吗?
若无键按下,则扫描下一列
MOVA,#0CH;将第3行首号"12"送A
AJMPLK
LK:
ADDA,R4;键号计算程序,按键号=行首号(A)+列号(R4)
PUSHACC;进栈暂存按键号
K4:
ACALLDELAY100MS
ACALLKS;等待按键释放
JNZK4
ACALLKS
JNZK4
POPACC;出栈取按键号给A
AJMPPR;转到密码识别与处理程序
NEXT:
INCR4;列号加1
MOVA,R3;列扫描字送A
JNBACC.3,KEY;判断4列都扫描完了吗?
RLA;未完,将列扫描字左移
MOVR3,A;列扫描字送R3,为扫描下一列做准备
AJMPK3;循环继续扫描下一列
KS:
MOVA,#00H
MOVP2,A;将列线P2.0-P2.3设置为低电平
NOP
MOVA,P0;读行线按键输入状态
CPLA;变正逻辑,高电平表示有键按下
ANLA,#0FH;屏蔽与按键无关的高4位,有任意键按下时,A≠0
RET
PR:
CJNEA,PSD,ERR;
PASS:
MOVP1,#00001100B
CLRP3.0
LCALLDELAY1S
LCALLDELAY1S
LCALLDELAY1S
LJMPMAIN1
ERR:
MOVP1,#86H
LCALLDELAY1S
LCALLDELAY1S
LCALLDELAY1S
LJMPMAIN1
DELAY1S:
MOVR3,#250
DEL3:
MOVR5,#4
DEL2:
MOVR4,#250
DEL1:
NOP
NOP
DJNZR4,DEL1
DJNZR5,DEL2
DJNZR6,DEL3
RET
DELAY100MS:
MOVR6,#200
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
END
ORG0000H
AJMPMAIN
ORG0010H
MAIN:
MOVP2,#00H
KEY0:
MOVP3,#0FEH
JNBP3.4,K0
JNBP3.5,K1
JNBP3.6,K2
JNBP3.7,K3
MOVP3,#0FDH
JNBP3.4,K4
JNBP3.5,K5
JNBP3.6,K6
JNBP3.7,K7
MOVP3,#11111011B
JNBP3.4,K8
JNBP3.5,K9
JNBP3.6,K10
JNBP3.7,K11
MOVP3,#11110111B
JNBP3.4,K12
JNBP3.5,K13
JNBP3.6,K14
JNBP3.7,K15
K0:
MOVP2,#3FH
ACALLDELAY
LJMPMAIN
K1:
MOVP2,#06H
ACALLDELAY
LJMPMAIN
K2:
MOVP2,#5BH
ACALLDELAY
LJMPMAIN
K3:
MOVP2,#4FH
ACALLDELAY
LJMPMAIN
K4:
MOVP2,#66H
ACALLDELAY
LJMPMAIN
K5:
MOVP2,#6DH
ACALLDELAY
LJMPMAIN
K6:
MOVP2,#7DH
ACALLDELAY
LJMPMAIN
K7:
MOVP2,#07H
ACALLDELAY
LJMPMAIN
K8:
MOVP2,#7FH
ACALLDELAY
LJMPMAIN
K9:
MOVP2,#6FH
ACALLDELAY
LJMPMAIN
K10:
MOVP2,#77H
ACALLDELAY
LJMPMAIN
K11:
MOVP2,#7CH
ACALLDELAY
LJMPMAIN
K12:
MOVP2,#39H
ACALLDELAY
LJMPMAIN
K13:
MOVP2,#5EH
ACALLDELAY
LJMPMAIN
K14:
MOVP2,#79H
ACALLDELAY
LJMPMAIN
K15:
MOVP2,#71H
ACALLDELAY
LJMPMAIN
DELAY:
MOVR3,#250
DEL3:
MOVR5,#4
DEL2:
MOVR4,#250
DEL1:
NOP
NOP
DJNZR4,DEL1
DJNZR5,DEL2
DJNZR6,DEL3
RET
END
4、软、硬件调试仿真(效果图)
任务二简易计算器
一、任务设计要求
1、基本控制要求:
由16键矩阵式键盘和两个数码管构成一个1位简易四节运算计算器。
1)实现1位的加、减、乘、除四节运算;
2)如果结果为负(减法)或溢出(除数位0),数码管显示“EE”;
3)可以清零。
二、设计过程
1、设计方案确定
2、硬件电路设计
3、软件设计
(1)、绘制流程图
(2)、编写源程序:
1个程序
LOCKBITP3.0;开锁阀,用LED代表,0:
开锁
ECODE1DATA30H;存放密码值
ECODE2DATA31H;存放密码值
ECODE3DATA32H;存放密码值
ECODE4DATA33H;存放密码值
ECODE5DATA34H;存放密码值
ECODE6DATA35H;存放密码值
EKEY1DATA36H;暂存放按键值
EKEY2DATA37H;暂存放按键值
EKEY3DATA38H;暂存放按键值
EKEY4DATA39H;暂存放按键值
EKEY5DATA3AH;暂存放按键值
EKEY6DATA3BH;暂存放按键值
DISP1DATA3CH;暂存放显示码
DISP2DATA3DH;暂存放显示码
DISP3DATA3EH;暂存放显示码
DISP4DATA3FH;暂存放显示码
DISP5DATA40H;暂存放显示码
DISP6DATA41H;暂存放显示码
BUFFDATA42H;临时存储区
SEG__EQU01000000B;"-"显示码
SEG_PEQU01110011B;"P"显示码
SEG_AEQU01110111B;"A"显示码
SEG_SEQU01101101B;"S"显示码
SEG_EEQU01111001B;"E"显示码
SEG_dEQU01011110B;"d"显示码
SEG_rEQU01010000B;"r"显示码
SEG_oEQU01011100B;"o"显示码
SEG_HEQU01110110B;"H"显示码
SEG_LEQU00111000B;"L"显示码
SEG_0EQU3FH;"0"显示码
SEG_1EQU06H;"1"显示码
SEG_2EQU5BH;"2"显示码
SEG_3EQU4FH;"3"显示码
SEG_4EQU66H;"4"显示码
SEG_5EQU6DH;"5"显示码
SEG_6EQU7DH;"6"显示码
SEG_7EQU07H;"7"显示码
SEG_8EQU7FH;"8"显示码
SEG_9EQU6FH;"9"显示码
SEG_OFFEQU00000000B;熄灭显示码
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
;初始化
MOVSP,#50H
MOVECODE1,#6
MOVECODE2,#5
MOVECODE3,#4
MOVECODE4,#3
MOVECODE5,#2
MOVECODE6,#1
_BEGIN:
LCALLINIT
SETBLOCK
_CHECK:
LCALLCHECK_KEY
CJNEA,#0BH,_CHECK
LCALLPSW_CHK
JC_ERROR
;密码正确:
MOVDISP1,#SEG_P
MOVDISP2,#SEG_A
MOVDISP3,#SEG_S
MOVDISP4,#SEG_S
MOVDISP5,#SEG_E
MOVDISP6,#SEG_d
CLRLOCK
LCALLDELAY5S
AJMP_BEGIN
_ERROR:
;密码错误:
MOVDISP1,#SEG_E
MOVDISP2,#SEG_r
MOVDISP3,#SEG_r
MOVDISP4,#SEG_o
MOVDISP5,#SEG_r
MOVDISP6,#SEG__
LCALLDELAY5S
AJMP_BEGIN
DELAY5S:
MOVR4,#5
_DELAY5:
ACALLDELAY1S
DJNZR4,_DELAY5
RET
DELAY1S:
MOVR5,#160;
_LP1:
ACALLDISPLAY
DJNZR5,_LP1
RET
CHECK_KEY:
LCALLSCAN_KEY
CJNEA,#0BH,_CHK_KEY1
AJMP_CHK_KEY4
_CHK_KEY1:
JNBF0,_CHK_KEY2
LCALLLED_OFF
CLRF0
_CHK_KEY2:
CJNEA,#0AH,_CHK_KEY3
MOVEKEY1,EKEY2
MOVEKEY2,EKEY3
MOVEKEY3,EKEY4
MOVEKEY4,EKEY5
MOVEKEY5,EKEY6
MOVEKEY6,#0FFH
MOVDISP1,DISP2
MOVDISP2,DISP3
MOVDISP3,DISP4
MOVDISP4,DISP5
MOVDISP5,DISP6
MOVDISP6,#SEG_OFF
AJMP_CHK_KEY4
_CHK_KEY3:
MOVEKEY6,EKEY5
MOVEKEY5,EKEY4
MOVEKEY4,EKEY3
MOVEKEY3,EKEY2
MOVEKEY2,EKEY1
MOVEKEY1,A
MOVDISP6,DISP5
MOVDISP5,DISP4
MOVDISP4,DISP3
MOVDISP3,DISP2
MOVDISP2,DISP1
MOVDISP1,#SEG__
_CHK_KEY4:
RET
SCAN_KEY:
ACALLKEY_TEST
JNZ_S_KEY1
ACALLDISPLAY
SJMPSCAN_KEY
_S_KEY1:
ACALLDISPLAY
ACALLKEY_TEST
JNZ_S_KEY2
ACALLDISPLAY
SJMPSCAN_KEY
_S_KEY2:
MOVR2,#0FEH
MOVR3,#00H
_LINE0:
MOVA,R2
MOVP2,A
MOVA,P0
JBACC.0,_LINE1
MOVA,#00H
AJMP_KEY_NO
_LINE1:
JBACC.1,_LINE2
MOVA,#01H
AJMP_KEY_NO
_LINE2:
JBACC.2,_LINE3
MOVA,#02H
AJMP_KEY_NO
_LINE3:
JBACC.3,_NEXT
MOVA,#03H
AJMP_KEY_NO
_NEXT:
INCR3
INCR3
INCR3
INCR3
MOVA,R2
JNBACC.2,_EXIT
RLA
MOVR2,A
AJMP_LINE0
_EXIT:
AJMPSCAN_KEY
_KEY_NO:
ADDA,R3
PUSHACC
_KEY_REL:
ACALLKEY_TEST
JNZ_KEY_REL
POPACC
SETBLOCK
RET
KEY_TEST:
MOVA,#00H
MOVP2,A
MOVA,P0
CPLA
ANLA,#0FH
RET
DISPLAY:
PUSHPSW
PUSHACC
SETBRS0
MOVA,#0FFH
MOVP0,A
MOVR0,#DISP1
MOVR7,#00H
MOVR6,#06H
MOVR5,#0FEH
DIS1:
MOVP0,#0FFH
MOVA,@R0
MOVP1,A
MOVA,R5
MOVP0,A
HERE:
DJNZR7,HERE
DJNZR7,$
INCR0
MOVA,R5
RLA
MOVR5,A
DJNZR6,DIS1
CLRRS0
POPACC
POPPSW
RET
PSW_CHK:
MOVR0,#ECODE1
MOVR1,#EKEY1
MOVR6,#6
_PSW_CHK1:
MOVA,@R0
MOVBUFF,@R1
CJNEA,BUFF,_PSW_ERR
INCR0
INCR1
DJNZR6,_PSW_CHK1
CLRC
RET
_PSW_ERR:
SETBC
RET
INIT:
MOVEKEY1,#0FFH
MOVEKEY2,#0FFH
MOVEKEY3,#0FFH
MOVEKEY4,#0FFH
MOVEKEY5,#0FFH
MOVEKEY6,#0FFH
MOVDISP1,#SEG_H
MOVDISP2,#SEG_E
MOVDISP3,#SEG_L
MOVDISP4,#SEG_L
MOVDISP5,#SEG_o
MOVDISP6,#SEG_1
SETBF0
RET
LED_OFF:
MOVDISP1,#SEG_OFF
MOVDISP2,#SEG_OFF
MOVDISP3,#SEG_OFF
MOVDISP4,#SEG_OFF
MOVDISP5,#SEG_OFF
MOVDISP6,#SEG_OFF
RET
END
4、软、硬件调试仿真(效果图)
三、设计总结和体会
单片机的系统扩展主要有程序存储器扩展、数据存储器扩展以及I/O口的扩展。
通过这次实验,我们了解了简易计算器和简易密码锁的设计方案