1、北京交大单片机课程设计电子密码锁设计报告 单片机原理与应用课程设计报告-电子密码锁 目录:1密码锁简介:2系统硬件电路设计 单片机电路图 显示电路图 键盘电路图 3芯片介绍 MAX7219的,管脚功能,操作指令,与单片机的连接4程序设计框架5在课程设计中遇到的困难及解决办法与心得体会6程序1,电子密码锁简介:我使用MCS51系列单片机设计电路,运用汇编语言编程,达到用键盘输入密码,修改密码,报警并即时显示的目的。MCS51系列单片机使用起来灵活,应用广泛。它的直接并行互连具有一定的实用价值,能简化许多应用系统的硬件设计。它还具有性能稳定、工作可靠、价格低廉等特点。我是利用MCS51单片机系列A
2、T89S52为依托,利用一块扩展4 X 4 键盘输入密码,显示器采用MAX7219控制共阴极四位数码管和蜂鸣器。最终使密码锁能够实现以下功能:1、密码锁上电或复位后初始密码为0000,管理员密码是1105;2、输入密码:按“输入”键后可输入4位密码,按“确认”键后进行比较,当与设定密码或管理员密码一致时绿灯亮,输入正确;否则红灯亮,输入错误。当连续3次输入错误时,红灯亮一段时间,期间发出报警的蜂鸣声,且键盘在此期间锁定。10秒后退出报警系统,返回初始状态。3、修改密码:按“修改”键后,要先输入当前设定密码或管理员密码才可修改,否则退出修改模块。当输入正确后,绿灯亮,可以修改密码。首先输入4位数
3、字,绿灯亮;然后再输入4位数字,当两次输入一致时,绿灯亮,修改成功。否则,红灯亮,修改未成功,需要继续输入4位数字,只有连续输入的4位数字一致时,绿灯亮,修改成功。退出修改密码模块。4、存在的问题:当复位或断电后,修改后的密码会丢失电路设计图,包括电源,复位开关,单片机,和LED蜂鸣器显示芯片与数码管的电路设计图注意,这里我采用的4联共阴的数码管,所以要去掉两条线键盘连接图,4X4其中0-9是数字输入键,输入的是相应的数字,A为输入键,B为修改密码键,C为确认键。3、主要芯片介绍31 MAX7219MAX7219是一种高集成化的串行输入/输出的共阴极LED显示驱动器。每片可驱动8位7段加小数点
4、的共阴极数码管,可以数片级联,而与微处理器的连接只需3根线。MAX7219内部设有扫描电路,除了更新显示数据时从单片机接收数据外,平时独立工作,极大地节省了MCU有限的运行时间和程序资源。MAX7219芯片上包括BCD译码器、多位扫描电路、段驱动器、位驱动器和用于存放每个数据位的88静态RAM以及数个工作寄存器。通过指令设置这些工作寄存器,可以使MAX7219进入不同的工作状态。以下将从管脚功能、操作指令、与单片机的连接三个方面全面介绍MAX7219这个芯3管脚功能:(1) DIN 为串行数据输入端。当CLK为上升沿时,数据被载入16 b内部移位寄存器。 (2) CLK 为串行时钟输入端。其最
5、大工作频率可达10 MHz。 (3) LOAD 为片选端,当LOAD为低电平时,芯片接收来自DIN的数据,接收完毕,LOAD回到高电平时,接收的数据将被锁定。(4) DIG0DIG7 为吸收显示器共阴极电流的位驱动线。其最大值可达500 mA,关闭状态时,输出VCC。 (5) SEGASEGG,DP 为驱动显示器7段及小数点的输出电流,一般为40 mA左右,可软件调整,关闭状态时,接入GND。 (6) DOUT 为串行数据输出端,通常直接接入下片MAX7219的DIN端。译码方式选择 操作代码为“09H”,操作数为“0”或“0FFH”。选中“0”则不使用BCD译码器,在显示数字或符号时,按每段
6、点亮与否编排传送码。而选中“0FFH”时,则按8421标准二进制编码来代表相应的显示数字,如下:显示内容0 123456789操作数(使用BCD译码)00H01H02H03H04H05H06H07H08H09H操作数(不用BCD译码)7EH30H6DH79H33H5BH5FH70H7FH7BH表1 译码与不译码的比较亮度调节选择操作代码为“0AH”,这个指令可以用来调节显示器的亮度,改变其操作数可以改变MAX7219内部扫描脉冲的宽度,从而使电流的平均值有所变化,这个电流平均值可以从最小的1/32至最大的31/32之间进行16级调节,如表2所示。操作数00H01H02H03H04H0CH0DH
7、0EH0FH驱动电流1/323/325/327/329/3225/3227/3229/3231/32表2 亮度调节操作数扫描位数设定 操作代码为“0BH”, 如果所用的显示器少于8位,则应通过这条 指令设置相应的位数。因为设置的位数如果比实际使用的位数大,就会形成“虚位”,而一旦对“虚位”进行操作,将会引起整个显示器的混乱,另外,扫描位数的设置,会影响到扫描频率的变化,相应地,显示器亮度也会随着变化,所以应该先确定扫描位数,再设置显示器亮度.如表3所示操作数00H01H02H03H04H05H06H07H扫描位数(位)12345678表3 扫描位数设定操作数待机开关操作代码为“0CH”,操作数
8、为“0”或“1”。操作数为“0”,则显示器不工作(灭灯),反之,显示器正常工作。待机状态下,7219的工作电流仅为150A。显示器检测 操作代码为“0FH”,操作数为“0”或“1”。 选择操作数为“1”时,可点亮整个显示器,通常用来检查数码管及 连接电路是否存在故障。检测时,不会改变各位原有的显示数据,即检 测完毕后,再送入不检测指令“0”,又可恢复显示原数据。 位操作指令 位操作指令就是对8个数码管显示内容的操作,也是2个字节,第 1个字节是位的代码,如表4所示,第2个字节则根据译码方式的选择来使用表1中的编码。操作代码01H02H03H04H05H06H07H08H位12345678表4
9、位的代码上述所有指令的输入,不分先后(但每个指令2个字节的秩序不能颠倒)。通常,前5条指令一般在上电初始化程序中加以设置,而在工作程序中,仅使用位操作指令即可。另外,MAX7219上电时,译码方式、亮度调节、扫描位数、待机开关、显示检测等5个控制寄存器全部归零。3.1.3 与单片机的连接 MAX7219与51单片机的连接形式有2种:一种是将MAX7219的3个输入端DIN,CLK和LOAD与51单片机的任意3个端口连接;一种则是直接与51单片机的串行接口相连。在此次实验中,我们采用第一种连接方式,以下将只介绍第一种方式。4、程序流程图 5、在课程设计中遇到的困难及解决办法从设计到焊板子过程中遇
10、到了很多问题,最惨的是第一块板子,用万用表测电路一切正常,可是数码光就是死活不亮,不亮不亮不亮!查了两个下午电路也没差出哪里错误,估计是元器件的问题,十分郁闷,结果以做快的速度重新焊了一个板子,结果一切正常,明明是完全一样的电路,可是一个好用一个不好用,!在上电复位后,我发现不论按什么键,数码管都不能显示数字,经检查后才发现没有对MAX7219进行初始化,然后编了MAX7219的初始化程序,经调用后问题得到解决。在蜂鸣器模块中,开始发现在程序没问题的情况下出不来想要的结果,进行研究后才发现三极管在功率放大的同时也起到了非门的作用,将蜂鸣器初值置1后问题得到解决。做为指示的发光二极管指示时不太亮
11、,经测量电压后测得单片机输出的电压较低,加了三极管对其进行功率放大后问题得到解决。我开始时编写的程序只能进行密码的输入和修改,而且报警功能也不完善,后来经过与同学讨论后,加了一管理员密码并对报警模块进行了完善。 总之,过程十分艰难,不但联系了电工技巧,编程经验,就是对中发电子市场也是越来越熟悉绝对是一次全身心,大脑和身体的全面锻炼和发展!附 件源程序清单: ORG 0000H DIN BIT P3.0 ;定义变量 CLK BIT P3.1 LOAD BIT P3.2 AJMP MAIN ORG 0030HMAIN: MOV SP,#70H SETB P3.5 SETB P3.6 SETB P3
12、.7 LCALL PROCESSM_Z: MOV R1,#40H MOV R2,#30HM_Z1: MOV R1,#00H INC R1 DJNZ R2,M_Z1 MOV R1,#60H LCALL DISPLAY MOV 55H,#01H MOV 56H,#01H MOV 57H,#00H MOV 58H,#05HM_START:LCALL SCAN ;调用扫描程序 LCALL DELAY MOV A,R1 CJNE A,#0EH,M_NEXT1 AJMP M_ZM_NEXT1:CJNE A,#0BH,M_NEXT2 AJMP INPUTM_NEXT2:CJNE A,#0CH,M_START
13、 AJMP MODIFY1 SJMP $;显示模块;MAX7219初始化子程序PROCESS:MOV A,#0BH ;A中存入操作代码-扫描位数设定 MOV B,#03H ;B中存入操作数-4位 LCALL W_7219 MOV A,#09H ;译码方式选择 MOV B,#0FFH ;使用BCD译码器 LCALL W_7219 MOV A,#0AH ;亮度调节 MOV B,#09H ;从最小的132至最大的3132之间进行16级调节(00H-0FH) LCALL W_7219 MOV A,#0CH ;待机开关 MOV B,#01H ;显示器正常工作 LCALL W_7219 RET;把操作代码
14、和操作数传送给MAX7219W_7219:CLR LOAD LCALL SD_7219 MOV A,B LCALL SD_7219 SETB LOAD RET;将8位数据传入MAX7219SD_7219:MOV R6,#08HC_SD: NOP CLR CLK RLC A MOV DIN,C NOP SETB CLKDJNZ R6,C_SDRET;MAX7219显示子程序DISPLAY:MOV R4,#04H MOV A,R1 MOV 21H,R1 MOV 20H,A ADD A,R1 MOV R0,AC_DISP: MOV A,R0 MOV B,A MOV A,R4 LCALL W_7219
15、 DEC R0 DEC R1 DJNZ R4,C_DISP MOV R1,21H MOV A,20H MOV R1,A RET;扫描模块;扫描程序SCAN: MOV R3,#0F7H ; 扫描初始值 MOV R1,#00H ; 取码数值SCAN1: MOV A,R3 ; 开始扫描 LCALL MOVP ; 将扫描值输出到 P LCALL MOVA ; 读入 P 判断是否有按下 MOV R4,A ; 存到 R4, 判断是否放开 SETB C ; C=1 MOV R5,#04H ; 扫描列L1: RLC A ; 将按键值左移一位元 JNC KEYIN ; 若 C=0, 有按, 执行 KEYINGO
16、: INC R1 ; 将指标值加 1, 继续扫描下一行 DJNZ R5,L1 ; 扫描四行 MOV A,R3 ; 载入扫描值 SETB C ; C=1 RRC A ; 扫描下一行 MOV R3,A ; 存回扫描值 JC SCAN1 ; C=1, 尚未完成扫描 AJMP SCAN ; 结束键盘扫描, 回到SCANKEYIN: MOV R7,#10 消除弹跳L2: MOV R6,#248 DJNZ R6,$ DJNZ R7,L2 LCALL MOVA ; 读入 P XRL A,R4 JNZ GO INC R1 CJNE R1,#0AH,L3 MOV R1,#00HL3: NOP RET;数值传递M
17、OVA: RRC A MOV C,P1.4 RRC A MOV C,P1.5 RRC A MOV C,P1.6 RRC A MOV C,P1.7 RRC A MOV C,P1.3 RRC A MOV C,P1.2 RRC A MOV C,P1.1 RRC A MOV C,P1.0 RRC A RETMOVP: RRC A MOV P1.4,C RRC A MOV P1.5,C RRC A MOV P1.6,C RRC A MOV P1.7,C RRC A MOV P1.3,C RRC A MOV P1.2,C RRC A MOV P1.1,C RRC A MOV P1.0,C RRC A RE
18、T;延时函数;DELAY: MOV 40H,#20DELAY1: MOV 41H,#100DELAY2: MOV 42H,#100 DJNZ 42H,$ DJNZ 41H,DELAY2 DJNZ 40H,DELAY1 RET;功能模块;输入模块;INPUT: LCALL CONFIRM LCALL COMP1 LJMP M_STARTCONFIRM:MOV 50H,#04H MOV 60H,#00H MOV R0,#61HLOOP1: LCALL SCAN LCALL DELAY MOV A,R1 MOV R0,A INC R0 INC 60H MOV R1,#60H MOV 6EH,R0 L
19、CALL DISPLAY MOV R0,6EH DJNZ 50H,LOOP1LOOP2: LCALL SCAN MOV A,R1 CJNE A,#0DH,LOOP2 MOV 60H,#00H MOV R1,#60H LCALL DISPLAY RETCOMP1: MOV A,61H CJNE A,55H,NO0 MOV A,62H CJNE A,56H,NO0 MOV A,63H CJNE A,57H,NO0 MOV A,64H CJNE A,58H,NO0 LCALL GREEN LJMP TURN1NO0: MOV A,61H CJNE A,51H,NO1 MOV A,62H CJNE A
20、,52H,NO1 MOV A,63H CJNE A,53H,NO1 MOV A,64H CJNE A,54H,NO1 LCALL GREEN LJMP TURN1NO1: LCALL RED INC 4FH MOV A,4FH CJNE A,#03H,TURN1 MOV 4FH,#00H LCALL RINGTURN1: NOP RET;修改模块;MODIFY1:LCALL CONFIRM LCALL COMP3MODIFY2:LCALL CONFIRM LCALL GREEN MOV 6AH,61H MOV 6BH,62H MOV 6CH,63H MOV 6DH,64H LCALL CONF
21、IRM LCALL COMP2 LJMP M_STARTCOMP2: MOV A,61H CJNE A,6AH,NO2 MOV A,62H CJNE A,6BH,NO2 MOV A,63H CJNE A,6CH,NO2 MOV A,64H CJNE A,6DH,NO2 LCALL GREEN MOV 51H,61H MOV 52H,62H MOV 53H,63H MOV 54H,64H LJMP TURN2NO2: LCALL RED LJMP MODIFY2TURN2: NOP RETCOMP3: MOV A,61H CJNE A,55H,NO4 MOV A,62H CJNE A,56H,N
22、O4 MOV A,63H CJNE A,57H,NO4 MOV A,64H CJNE A,58H,NO4 LCALL GREEN LJMP TURN3NO4: MOV A,61H CJNE A,51H,NO3 MOV A,62H CJNE A,52H,NO3 MOV A,63H CJNE A,53H,NO3 MOV A,64H CJNE A,54H,NO3 LCALL GREEN LJMP TURN3NO3: LCALL RED INC 5AH MOV A,5AH CJNE A,#03H,TURN4 LCALL RING MOV 5AH,#00HTURN4: LJMP M_STARTTURN3: NOP RET;绿灯模块;GREEN: CPL P3.5 LCALL DELAY CPL P3.5 MOV 4FH,#00H RET;红灯模块;RED: CPL P3.6 LCALL DELAY CPL P3.6 RET;报警模块;RING: CPL P3.6 CPL P3.7 MOV 4AH,#200 SND1: MOV 4BH,#200SND2: MOV 4CH,#250 DJNZ 4CH,$ DJNZ 4BH,SND2 DJNZ 4AH,SND1 CPL P3.6 CPL P3.7 RET;END
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1