单片机课程设计报告2.docx
《单片机课程设计报告2.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告2.docx(15页珍藏版)》请在冰豆网上搜索。
单片机课程设计报告2
一、设计内容:
数字密码锁
二、设计要求:
(一)基本要求
1、利用889C51作为控制器组成一数字型码锁。
2、开锁动作用LED管模拟。
3、开锁代码由小健盘输入,且同时有4位LED显示器上显出来,当你输入的四位数字与原存的密码完全相同时,则将锁打开。
4、密码可由小键盘输入进行改写。
5、修改密码,必须在30秒内完成,否则将发出报警号。
6、锁门与否,可由一开关控制,每次按Enter键时,89C51根据此开关的状态决定锁住或打开。
(二)扩展功能
1、键盘增加退格键、清除键和复位键。
2、三次输入密码不正确,系统将锁定,输入代码将无效。
按复位键后,将解除锁定。
三、设计所需硬件及结构图:
(一)硬件:
AT69C52,8255A,MAX232,2803,按钮键盘,电容,排阻若干
(二)硬件结构图:
四、程序流程图
五、软件软程序代码
PAEQU7CFFH;A口地址
PBEQU7DFFH;B口地址
CTREQU7FFFH;控制字地址
YR1EQU30H;密码存储单元
YR2EQU31H;
YR3EQU32H
YR4EQU33H
NEW1EQU45H;用户输入密码存储单元
NEW2EQU46H
NEW3EQU47H
NEW4EQU48H
LOCK_TIMESEQU35H
ORG0000H
JMPSTART_00
ORG0100H;
START_00:
MOVYR1,#1H;初始密码为1234
MOVYR2,#2H
MOVYR3,#3H
CLR02H
MOVYR4,#4H;修改
MAIN:
MOVIE,#86H;开定时器0和外部中断1的中断
SETBIT1
LCALLKEY
JB02H,START;已经开始计时就不要再开始了
MOV50H,#08H;若是12mhz来算则R7应为0FFH,R3应为0F4H
MOV51H,#06H
MOVTMOD,#01H;定时器定时工作方式1
MOVTH0,#15H
MOVTL0,#0AH
SETB02H;开始计时标志置1
SJMPSTART
START:
MOVDPTR,#CTR
MOVA,#80H
MOVX@DPTR,A
CLRPSW.1;PSW.1是是否进入重设密码功能的标志位,为0则没进入;反之则进入。
Bydefault,PSW.1=0
CLRF0;F0为重设密码时,输入原始密码正确与否标志:
F0=0,wrong;F0=1,correct.Default=0
MOVB,#1H;最初数码管不显示,B=当前要显示的数码管位数-1
MOVLOCK_TIMES,#0H;错误,移至START_00处
SETBP3.0;Bydefault,LED=off
SETBP3.1
MOVNEW1,#00H;清除用户上次输入密码
MOVNEW2,#00H
MOVNEW3,#00H
MOVNEW4,#00H
SCAN:
LCALLDISP
MOVP1,#0FFH
MOVR0,#0F7H
MOVR1,#00H;存储按键号
LP1:
MOVA,R0;扫描行
MOVP1,A
NOP;延时读取键盘状态
MOVA,P1
MOVR2,A;存储键盘扫描状态,为判断抖动做准备
SETBC;为左移作准备
MOVR3,#04H;判断四列是否扫描结束
LP2:
RLCA;将A左移,检测该列中是否0所在位置
JNCKEY;找到零,转去进行延时消抖
LP3:
INCR1;扫描下一列
DJNZR3,LP2
MOVA,R0
SETBC
RRCA
MOVR0,A
JCLP1;CY=1,行扫描未结束,因为是带进位的右移
LJMPSCAN;扫描完毕,无有效键值
KEY:
LCALLDS10MS;延时消抖
MOVA,P1
XRLA,R2
JNZLP3;A=1,说明是干扰,继续转去扫描下一行
LP4:
MOVA,P1;waitforthebuttontobounceback
XRLA,R2
JZLP4
MOVA,R1
MOVDPTR,#TAB
MOVCA,@A+DPTR
KEYIN:
MOVR3,A;判断输入的键义
XRLA,#0EH
JZENTER;按下确定键
MOVA,R3
XRLA,#0FH
JZMODIFY;按下修改键
MOVA,R3
XRLA,#0DH
JZBUT_CHG;按下重设密码键
BUT_N:
MOVA,B;是正常数字键
CJNEA,#5,INP_NUM;判断输入密码的位数:
达到四位则对键值不予理睬-->ignore,否则-->INP_NUM
JMPIgnore;输入密码位数达到四位后,对后续输入的数字不做处理
BUT_CHG:
SETBTR0
SETB02H
SETBPSW.1;setPSW.1,enterprocessofresettingpassword
LCALLALL_LIGHT;showthisentering
SETBP3.0
SETBP3.1
JMPSCAN;返回接收新设定的密码
MODIFY:
;修改输入密码,则显示的位数减一
MOVA,B
CJNEA,#1H,MOD_EN;输入密码删除完,对键值不作处理
JMPSCAN;返回接收新键值
MOD_EN:
;
DECB;显示位数减一
JBF0,MOD_SYS;F0=0,修改刚输入的用户密码;F0=1,修改输入的重设密码
MOD_USER:
MOV48H,47H
MOV47H,46H
MOV46H,45H
MOV45H,#0H
JMPSCAN
MOD_SYS:
MOV33H,32H
MOV32H,31H
MOV31H,30H
MOV30H,#0H
JMPSCAN
INP_NUM:
INCB;输入密码位数增加,显示位数也随之增加
MOVA,R3
JBF0,SET_PW;F0=0,可以输入重设的新密码,转去接受新密码进入密码存储单元
USER_PW:
;inputuser'spassword
XCHA,48H
XCHA,47H
XCHA,46H
XCHA,45H
LJMPSCAN
SET_PW:
;inputnewpassword
XCHA,33H
XCHA,32H
XCHA,31H
XCHA,30H
Ignore:
LJMPSCAN
ENTER:
JBF0,set_OK;定义按下ENTER键的功能
COMP1:
MOVR7,#04H;comparepasswordinputtedwiththecorrectone
MOVR0,#45H
MOVR1,#30H
L1:
MOVA,@R0
XRLA,@R1
JNZWRONG
INCR0
INCR1
DJNZR7,L1
RIGHT:
CLRP3.0
CALLLIGHT_DEL
SETBP3.0
JBPSW.1,CHG_PW
JMPBACK_START
CHG_PW:
SETBF0;原始密码输入正确,可以重设密码,将重设密码允许的标志位置位
MOVB,#1H
LJMPSCAN
set_OK:
INC51H
DJNZ51H,LOCK;
CLREA
CLRTR0
CLRP3.0
WRONG:
CLRP3.1
CALLLIGHT_DEL
JNBPSW.1,BACK_START
JBF0,BACK_START
MOVA,LOCK_TIMES
CJNEA,#2H,TRY_AGAIN
CALLLOCK
TRY_AGAIN:
INCLOCK_TIMES
MOVB,#1H
SETBP3.1
LCALLSCAN
BACK_START:
LJMPSTART;返回后先将存放输入密码的地址全部清零,后进行键盘扫描
ALL_LIGHT:
CLRP3.0
CLRP3.1
LIGHT_DEL:
LCALLDELAY2
RET
LOCK:
MOVDPTR,#PB;位选
MOVA,#0FH
MOVX@DPTR,A
MOVDPTR,#PA
MOVA,#0H
MOVX@DPTR,A;送段码
LCALLDELAY3;延时
JMP$
RET
ORG000BH
T0IRS:
DJNZ50H,T01
DJNZ51H,T01
T01:
MOVTMOD,#01H
MOVTH0,#15H
MOVTL0,#0AH
SETBTR0
RETI
;************显示子程序**************;
DISP:
MOVR2,#08H
MOV49H,B
JNBF0,DEFAULT
MOVR0,#33H;显示用户输入的新密码
JMPDS2
DEFAULT:
;正确密码为默认密码,显示输入的密码
MOVR0,#48H
DS2:
DJNZB,AA
MOVDPTR,#PB;位选
MOVA,#0H
MOVX@DPTR,A
MOVB,49H
JMPJJ
AA:
MOVDPTR,#PB;位选
MOVA,R2
MOVX@DPTR,A
MOVDPTR,#PA
MOVA,@R0
LCALLTABLE
MOVX@DPTR,A;送段码
LCALLDELAY1;延时
DECR0
CLRC
MOVA,R2
RRCA
MOVR2,A
JMPDS2
;***********BCD码转化成段码子程序****************;
TABLE:
INCA
MOVCA,@A+PC
JJ:
RET
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH
;***********延时4ms子程序***************************;
DELAY1:
MOVR4,#10;4ms延时
DEL11:
MOVR5,#0AH
DEL12:
MOVR3,#14H
DEL13:
DJNZR3,DEL13
DJNZR5,DEL12
DJNZR4,DEL11
RET
;***********延时21ms子程序**************************;
DS10MS:
MOVR5,#42
LOOP2:
MOVR6,#248
DJNZR6,$
DJNZR5,LOOP2
RET
;***********延时1s子程序**************************;
DELAY2:
MOVR5,#50
LOOP3:
LCALLDS10MS
DJNZR5,LOOP3
RET
;***********延时30s子程序**************************;
DELAY3:
MOVR5,#10
LOOP4:
LCALLDELAY2
DJNZR5,LOOP4
RET
TAB:
DB01H,02H,03H,0AH
DB04H,05H,06H,0BH
DB07H,08H,09H,0CH
DB0EH,00H,0FH,0DH
END
六、PROTUES和KEIL联调仿真
1、仿真原理图
2、仿真上电
3、输入正确密码1234数码D1管亮
4、输入错误密码数码D2管亮
5、修改密码成功,两个灯都亮
6、三次输入错误密码,led提示灯亮,系统锁定
6、课程设计经验感受
整个设计通过软件和硬件上的调试。
我想这对于自己以后的学习和工作都会有很大的帮助。
在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。
一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。
我觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。
与其他同学的的配合﹑相处,以及自身的动脑和努力,都是以后工作中需要的。
所以我认为这次的课程设计意义很深,和其他同学的共同学习﹑配合﹑努力的过程也很愉快,另外还要感谢老师的耐心辅导。