1、电子密码锁 单片机项目六 电子密码锁设计设计说明书任务一 电子密码锁一、任务设计要求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-1
2、5之间的数字,密码正确,显示字符P3秒,同时开锁LED亮,若错误,则显示字符E3秒,再继续输入。二、设计过程1、设计方案确定2、硬件电路设计3、软件设计(1)、绘制流程图 (2)、编写源程序:PSD EQU 21HORG 0000HLJMP MAINORG 0010HMAIN:MOV SP,#3FHST1:MOV P0,#0FFHMOV PSD,#02MAIN1:SETB P3.0MOV P1,#0111111BKEY:MOV A,P0KEY0:JB ACC.0,KEY1LJMP ERRKEY1:JB ACC.1,KEY2LJMP ERRKEY2:JB ACC.2,KEY3LJMP PASSK
3、EY3:JB ACC.3,KEYERR:SETB P3.0MOV P1,#86H LCALL DELAY1SLCALL DELAY1SLCALL DELAY1SLJMP MAIN1PASS:MOV P1,#00001100BCLR P3.0LCALL DELAY1SLCALL DELAY1SLCALL DELAY1SLJMP MAIN1DELAY1S:MOV R3,#250DEL3:MOV R5,#4 DEL2:MOV R4,#250DEL1:NOP NOPDJNZ R4,DEL1DJNZ R5,DEL2DJNZ R6,DEL3RET ENDPSD EQU 21HORG 0000HLJMP M
4、AINORG 0010HMAIN:MOV SP,#3FHST1:MOV P0,#0FFHMOV PSD,#02MAIN1:SETB P3.0MOV P1,#0111111BKEY: ACALL KS ;调用按键查询子程序 JNZ K1 ;判断是否有键按下,若A0,说明有键按下 AJMP KEY ;无键按下,继续查询K1: ACALL DELAY100MS ;调用延时程序去抖动 ACALL KS ;再次调用按键查询子程序 JNZ K2 ;若A0,说明确实有键按下 AJMP KEY ;否则因为抖动引起,继续查询按键状态K2: MOV R3, #0FEH ;设列扫描字为0FEH,从第0列开始逐列扫描
5、 MOV R4, #00 ;设置列号初始值为00K3: MOV A, R3 ;取列扫描字送P2口 MOV P2, A ;扫描第1列 MOV A, P0 ;读入P0口键盘行线状态 ANL A, #0FH ;屏蔽无关的高4位 JB P0.0, L1 ;第0行有键按下吗?若P0.0=0,说明有键按下 MOV A, #00H AJMP LK ;将第0行首号00送A,转至键号计算程序L1: JB P0.1,L2 ;第1行有键按下吗?若P0.1=0,说明有键按下 MOV A, #04H AJMP LK ;将第1行首号04送A,转至键号计算程序L2: JB P0.2,L3 ;第2行有键按下吗?若P0.2=0
6、,说明有键按下 MOV A, #08H AJMP LK ;将第2行首号08送A,转至键号计算程序L3: JB P0.3,NEXT ;第3行有键按下吗?若无键按下,则扫描下一列 MOV A, #0CH ;将第3行首号12送A AJMP LKLK: ADD A, R4 ;键号计算程序,按键号=行首号(A)+列号(R4) PUSH ACC ;进栈暂存按键号K4: ACALL DELAY100MS ACALL KS ;等待按键释放 JNZ K4 ACALL KS JNZ K4 POP ACC ;出栈取按键号给A AJMP PR ;转到密码识别与处理程序NEXT: INC R4 ;列号加1 MOV A,
7、 R3 ;列扫描字送A JNB ACC.3,KEY ;判断4列都扫描完了吗? RL A ;未完,将列扫描字左移 MOV R3, A ;列扫描字送R3,为扫描下一列做准备 AJMP K3 ;循环继续扫描下一列KS: MOV A,#00H MOV P2, A ; 将列线P2.0-P2.3设置为低电平 NOP MOV A, P0 ; 读行线按键输入状态 CPL A ;变正逻辑,高电平表示有键按下 ANL A, #0FH ; 屏蔽与按键无关的高4位,有任意键按下时,A0 RETPR: CJNE A,PSD,ERR;PASS:MOV P1,#00001100B CLR P3.0 LCALL DELAY1
8、S LCALL DELAY1S LCALL DELAY1S LJMP MAIN1ERR:MOV P1,#86H LCALL DELAY1S LCALL DELAY1S LCALL DELAY1S LJMP MAIN1DELAY1S:MOV R3,#250DEL3:MOV R5,#4 DEL2:MOV R4,#250DEL1:NOP NOPDJNZ R4,DEL1DJNZ R5,DEL2DJNZ R6,DEL3RET DELAY100MS:MOV R6,#200D1:MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET ENDORG 0000H AJMP MAIN ORG 0
9、010H MAIN:MOV P2,#00H KEY0:MOV P3,#0FEH JNB P3.4,K0 JNB P3.5,K1 JNB P3.6,K2 JNB P3.7,K3 MOV P3,#0FDH JNB P3.4,K4 JNB P3.5,K5 JNB P3.6,K6 JNB P3.7,K7 MOV P3,#11111011B JNB P3.4,K8 JNB P3.5,K9 JNB P3.6,K10 JNB P3.7,K11 MOV P3,#11110111B JNB P3.4,K12 JNB P3.5,K13 JNB P3.6,K14 JNB P3.7,K15K0:MOV P2,#3FH
10、 ACALL DELAY LJMP MAINK1:MOV P2,#06H ACALL DELAY LJMP MAINK2:MOV P2,#5BH ACALL DELAY LJMP MAINK3:MOV P2,#4FH ACALL DELAY LJMP MAINK4:MOV P2,#66H ACALL DELAY LJMP MAINK5:MOV P2,#6DH ACALL DELAY LJMP MAINK6:MOV P2,#7DH ACALL DELAY LJMP MAINK7:MOV P2,#07H ACALL DELAY LJMP MAINK8:MOV P2,#7FH ACALL DELAY
11、 LJMP MAINK9:MOV P2,#6FH ACALL DELAY LJMP MAINK10:MOV P2,#77H ACALL DELAY LJMP MAINK11:MOV P2,#7CH ACALL DELAY LJMP MAINK12:MOV P2,#39H ACALL DELAY LJMP MAINK13:MOV P2,#5EH ACALL DELAY LJMP MAINK14:MOV P2,#79H ACALL DELAY LJMP MAINK15:MOV P2,#71H ACALL DELAY LJMP MAINDELAY: MOV R3,#250DEL3:MOV R5,#4
12、 DEL2:MOV R4,#250DEL1:NOP NOPDJNZ R4,DEL1DJNZ R5,DEL2DJNZ R6,DEL3RET END4、软、硬件调试仿真(效果图)任务二 简易计算器一、任务设计要求1、基本控制要求:由16键矩阵式键盘和两个数码管构成一个1位简易四节运算计算器。 1)实现1位的加、减、乘、除四节运算; 2) 如果结果为负(减法)或溢出(除数位0),数码管显示“EE”; 3)可以清零。二、设计过程1、设计方案确定2、硬件电路设计3、软件设计(1)、绘制流程图(2)、编写源程序:1个程序LOCK BIT P3.0 ;开锁阀,用LED代表,0:开锁ECODE1 DATA 3
13、0H ;存放密码值ECODE2 DATA 31H ;存放密码值ECODE3 DATA 32H ;存放密码值ECODE4 DATA 33H ;存放密码值ECODE5 DATA 34H ;存放密码值ECODE6 DATA 35H ;存放密码值EKEY1 DATA 36H ;暂存放按键值EKEY2 DATA 37H ;暂存放按键值EKEY3 DATA 38H ;暂存放按键值EKEY4 DATA 39H ;暂存放按键值EKEY5 DATA 3AH ;暂存放按键值EKEY6 DATA 3BH ;暂存放按键值DISP1 DATA 3CH ;暂存放显示码DISP2 DATA 3DH ;暂存放显示码DISP3
14、 DATA 3EH ;暂存放显示码DISP4 DATA 3FH ;暂存放显示码DISP5 DATA 40H ;暂存放显示码DISP6 DATA 41H ;暂存放显示码BUFF DATA 42H ;临时存储区SEG_ EQU 01000000B ;-显示码SEG_P EQU 01110011B ;P显示码SEG_A EQU 01110111B ;A显示码SEG_S EQU 01101101B ;S显示码SEG_E EQU 01111001B ;E显示码SEG_d EQU 01011110B ;d显示码SEG_r EQU 01010000B ;r显示码SEG_o EQU 01011100B ;o显
15、示码SEG_H EQU 01110110B ;H显示码SEG_L EQU 00111000B ;L显示码SEG_0 EQU 3FH ;0显示码SEG_1 EQU 06H ;1显示码SEG_2 EQU 5BH ;2显示码SEG_3 EQU 4FH ;3显示码SEG_4 EQU 66H ;4显示码SEG_5 EQU 6DH ;5显示码SEG_6 EQU 7DH ;6显示码SEG_7 EQU 07H ;7显示码SEG_8 EQU 7FH ;8显示码SEG_9 EQU 6FH ;9显示码SEG_OFF EQU 00000000B ;熄灭显示码 ORG 0000H LJMP MAIN ORG 0030H
16、MAIN: ;初始化 MOV SP,#50H MOV ECODE1,#6 MOV ECODE2,#5 MOV ECODE3,#4 MOV ECODE4,#3 MOV ECODE5,#2 MOV ECODE6,#1_BEGIN: LCALL INIT SETB LOCK _CHECK: LCALL CHECK_KEY CJNE A,#0BH,_CHECK LCALL PSW_CHK JC _ERROR ;密码正确: MOV DISP1,#SEG_P MOV DISP2,#SEG_A MOV DISP3,#SEG_S MOV DISP4,#SEG_S MOV DISP5,#SEG_E MOV DI
17、SP6,#SEG_d CLR LOCK LCALL DELAY5S AJMP _BEGIN_ERROR: ;密码错误: MOV DISP1,#SEG_E MOV DISP2,#SEG_r MOV DISP3,#SEG_r MOV DISP4,#SEG_o MOV DISP5,#SEG_r MOV DISP6,#SEG_ LCALL DELAY5S AJMP _BEGINDELAY5S:MOV R4,#5_DELAY5:ACALL DELAY1S DJNZ R4,_DELAY5 RETDELAY1S: MOV R5, #160;_LP1: ACALL DISPLAY DJNZ R5,_LP1 R
18、ETCHECK_KEY: LCALL SCAN_KEY CJNE A,#0BH,_CHK_KEY1 AJMP _CHK_KEY4 _CHK_KEY1: JNB F0,_CHK_KEY2 LCALL LED_OFF CLR F0_CHK_KEY2:CJNE A,#0AH,_CHK_KEY3 MOV EKEY1,EKEY2 MOV EKEY2,EKEY3 MOV EKEY3,EKEY4 MOV EKEY4,EKEY5 MOV EKEY5,EKEY6 MOV EKEY6,#0FFH MOV DISP1,DISP2 MOV DISP2,DISP3 MOV DISP3,DISP4 MOV DISP4,D
19、ISP5 MOV DISP5,DISP6 MOV DISP6,#SEG_OFF AJMP _CHK_KEY4_CHK_KEY3:MOV EKEY6,EKEY5 MOV EKEY5,EKEY4 MOV EKEY4,EKEY3 MOV EKEY3,EKEY2 MOV EKEY2,EKEY1 MOV EKEY1,A MOV DISP6,DISP5 MOV DISP5,DISP4 MOV DISP4,DISP3 MOV DISP3,DISP2 MOV DISP2,DISP1 MOV DISP1,#SEG_ _CHK_KEY4:RETSCAN_KEY:ACALL KEY_TEST JNZ _S_KEY1
20、 ACALL DISPLAY SJMP SCAN_KEY _S_KEY1: ACALL DISPLAY ACALL KEY_TEST JNZ _S_KEY2 ACALL DISPLAY SJMP SCAN_KEY _S_KEY2: MOV R2,#0FEH MOV R3,#00H _LINE0: MOV A,R2 MOV P2,A MOV A,P0 JB ACC.0,_LINE1 MOV A,#00H AJMP _KEY_NO _LINE1: JB ACC.1,_LINE2 MOV A,#01H AJMP _KEY_NO _LINE2: JB ACC.2,_LINE3 MOV A,#02H A
21、JMP _KEY_NO _LINE3: JB ACC.3,_NEXT MOV A,#03H AJMP _KEY_NO _NEXT: INC R3 INC R3 INC R3 INC R3 MOV A,R2 JNB ACC.2,_EXIT RL A MOV R2,A AJMP _LINE0 _EXIT: AJMP SCAN_KEY _KEY_NO: ADD A,R3 PUSH ACC _KEY_REL:ACALL KEY_TEST JNZ _KEY_REL POP ACC SETB LOCK RET KEY_TEST: MOV A,#00H MOV P2,A MOV A,P0 CPL A ANL
22、 A,#0FH RETDISPLAY: PUSH PSW PUSH ACC SETB RS0 MOV A,#0FFH MOV P0,A MOV R0,#DISP1 MOV R7,#00H MOV R6,#06H MOV R5,#0FEHDIS1: MOV P0,#0FFH MOV A,R0 MOV P1,A MOV A,R5 MOV P0,A HERE: DJNZ R7,HERE DJNZ R7,$ INC R0 MOV A,R5 RL A MOV R5,A DJNZ R6,DIS1 CLR RS0 POP ACC POP PSW RETPSW_CHK:MOV R0,#ECODE1 MOV R
23、1,#EKEY1 MOV R6,#6_PSW_CHK1:MOV A,R0 MOV BUFF,R1 CJNE A,BUFF,_PSW_ERR INC R0 INC R1 DJNZ R6,_PSW_CHK1 CLR C RET_PSW_ERR:SETB C RETINIT: MOV EKEY1,#0FFH MOV EKEY2,#0FFH MOV EKEY3,#0FFH MOV EKEY4,#0FFH MOV EKEY5,#0FFH MOV EKEY6,#0FFH MOV DISP1,#SEG_H MOV DISP2,#SEG_E MOV DISP3,#SEG_L MOV DISP4,#SEG_L MOV DISP5,#SEG_o MOV DISP6,#SEG_1 SETB F0 RETLED_OFF: MOV DISP1,#SEG_OFF MOV DISP2,#SEG_OFF MOV DISP3,#SEG_OFF MOV DISP4,#SEG_OFF MOV DISP5,#SEG_OFF MOV DISP6,#SEG_OFF RET END4、软、硬件调试仿真(效果图)三、设计总结和体会单片机的系统扩展主要有程序存储器扩展、数据存储器扩展以及I/O口的扩展。通过这次实验,我们了解了简易计算器和简易密码锁的设计方案