收藏 分享(赏)

电气0703袁利军 单片机课程设计电子密码锁.doc

上传人:HR专家 文档编号:5446284 上传时间:2019-03-03 格式:DOC 页数:24 大小:681KB
下载 相关 举报
电气0703袁利军 单片机课程设计电子密码锁.doc_第1页
第1页 / 共24页
电气0703袁利军 单片机课程设计电子密码锁.doc_第2页
第2页 / 共24页
电气0703袁利军 单片机课程设计电子密码锁.doc_第3页
第3页 / 共24页
电气0703袁利军 单片机课程设计电子密码锁.doc_第4页
第4页 / 共24页
电气0703袁利军 单片机课程设计电子密码锁.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、目 录第 1 章 系统概述 .11.1 系统功能 11.2 设计内容 及要求 1第 2 章 系统方案设计 22.1 总体方案 22.2 系统组成 2第 3 章 硬件设计 .33.1 按键电路设计 33.2 指示灯及报警蜂鸣器的电路设计 33.3 显示电路设计 43.4 复位键的设计 4第 4 章 软件设计 .54.1 主程序设计 54.2 按键识别与编码设计 64.3 显示程序设计 84.4 密码修改程序设计 .10第五章 系统调 试 115.1 软件模拟调试 .115.2 硬件接线及调试 .12设计总结 .13参 考 文 献 14附录 .151第 1 章 系统概述1.1 系统功能本次设计使用

2、 ATMEL 公司的 AT 80C51 实现一基于单片机的电子密码锁的设计,其主要具有如下功能:(1)设置 6 位密码,密码通过键盘输入,若密码正确,则将锁打开。(2)默认密码为 123456,密码可以由用户自己修改设定(支持不超过 6 位的任意位密码,也可以不设密码) ,输入密码正确后才能修改密码。(3)状态指示、报警、锁定键盘功能。密码输入正确时有 GOOD 提示信息、密码输入错误数码显示器会出现错误提示,若密码输入错误次数超过 3 次,蜂鸣器报警并且锁定键盘,并且相应的有指示灯指明状态。电子密码锁的设计主要由三部分组成:34 矩阵键盘接口电路、密码锁的控制电路、输出八段显示电路。另外系统

3、还有 LED 提示灯,报警蜂鸣器等。1.2 设计内容及要求(1)密码的设定,此密码是固定在程序存储器 ROM 中,假设预设的密码为“123456”共 6 位密码。(2)密码的输入: 采用数字键盘来完成密码的输入,其中#号按键为确认键,*号键位取消键,其他按键为数字键。在密码输入完毕并且确认功能键之后,才能完成密码的输入过程。然后进入密码的判断比较处理状态并给出相应的处理过程。(3)按键禁止功能:初始化时,允许按键输入密码,当有按键按下并开始进按键识别状态时,按键禁止功能被激活,但启动的状态是在 3 次密码输入不正确的情况下发生的。2第 2 章 系统方案设计2.1 总体方案本密码锁系统采用 80

4、C51 做主控制器,控制密码的输入、判断密码的正确与否。首先,系统将允许用户输入密码,用存储单元把输入的密码进行动态的保存,当用户输入完后可以按下“*”表示取消,重新输入密码。当用户输入完后可以按下“#”表示确定,系统将进行密的确认,如果密码正确,则显示 GOOD,并且有红灯亮,如果不正确,红灯亮,显示“NO” ,用户可以再次进行输入密码,当用户连续三次输入错误时,系统将显示 NO,和有报警的声音发出,黄、绿、红灯同时亮,并且把键盘进行锁定,禁止用户进行输入,扩展功能的实现是在输入了正确的密码之后,如果按“*”键表示放弃对密码的修改。如果按下“#”键,黄灯亮,就可以对默认密码进行修改, 将进入

5、修改密码状态并保存到存储默认密码的单元,按“*”返回再次输入密码。按“#”键确认,显示“GOOD”,密码修改成功,返回主菜单。这样修改功能得以实现。2.2 系统组成本系统由单片机 80C51 系统、矩阵键盘、开关、 LED 显示和报警系统组成。系统组成原理框图如图 2-1 所示2-1 系统组成原理框图状态指示灯80C51单片机矩阵键盘控制LCD 六位显示器复位按钮一个蜂鸣器3第 3 章 硬件设计3.1 按键电路设计由于设计要求输入数字密码,所以本设计就采用数字键盘,有 09 共十位数字。检测方法采用线反转法,先检测行后检测列。其原理如图 3-1 所示。XTAL218XTAL119ALE301P

6、SN29RST9P0./AD039.1/18P0.2/AD237.3/36P0.4/AD435.5/54P0.6/AD63.7/72P2.7/A1528P2.0/A821.1/9P2./A023.3/14P2.4/A225.5/136.6/47P1.01.2P1.23.34P1.45.56P1.67.78 P3.0/RXD10.1/TP3.2/IN012./IT13P3.4/014P3.7/RD17.6/W6.5/T15U180C51SRFILE=.wave文 件 01.ASMPOGRAMdinzisuo.HEX1234567890#1 2 3ABCDR210k图 3-1 单片机的键盘接口电路

7、3.2 指示灯及报警蜂鸣器的电路设计指示灯及报警蜂鸣器的电路如图 3-2 所示,当输入的密码正确时,绿灯亮;当输入的密码错误时,红灯亮;当三次错误输入时,绿灯和蓝灯和红灯同时亮并且报警法名器发出报警。XTAL218XTAL119ALE3031PSN29RST9P0./AD0390.1/138P0.2/AD2370.3/336P0.4/AD4350.5/534P0.6/AD630.7/732P2.7/A1528P2.0/A8212.1/92P2./A10232.3/124P2.4/A12252.5/13262.6/1427P1.011.2P1.231.34P1.451.56P1.671.78P3

8、.0/RXD103.1/T1P3.2/IN0123./IT113P3.4/014P3.7/RD173.6/W163.5/T115U180C51SRFILE=.wave文 件 01.ASMPOGRAMdianzisuo.HEXR110R310LS1SOUNDERD2LED-REDD3LED-GREN1234567890#1 2 3ABCDR410 4LED-BLUE图 3-2 指示灯及报警蜂鸣器的电路43.3 显示电路设计将 P1 与显示的数据端相连,使其它能动态的传输要显示的数据,将 p3 的第六位与位选通端相连,选通相应的位。接线如图 3-3 所示XTAL218XTAL119ALE301PS

9、N29RST9P0./AD039.1/18P0.2/AD237.3/36P0.4/AD435.5/54P0.6/AD63.7/72P2.7/A1528P2.0/A821.1/9P2./A023.3/14P2.4/A225.5/136.6/47P1.01.2P1.23.34P1.45.56P1.67.78 P3.0/RXD10.1/TP3.2/IN012./IT13P3.4/014P3.7/RD17.6/W6.5/T15U180C51SRFILE=.wave文 件 01.ASMPOGRAMdinzisuo.HEX图 3-3 显示电路3.4 复位键的设计当密码输入三次错误,则系统锁定键盘输入,按下

10、复位键后,系统重新开始,如此可以防止系统报废,让系统再次循环使用。其硬件图如图 3-4 所示。XTAL218XTAL119ALE30EA31PSEN29RST9P0./AD039P0.1/A138P0.2/AD237P0.3/A336P0.4/AD435P0.5/A534P0.6/AD63P0.7/A732P2.7/A1528P2.0/A821P2.1/A92P2./A1023P2.3/A124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TX1P3.2/INT012P3.

11、/IT113P3.4/T014P3.7/RD17P3.6/W16P3.5/T115U180C51SRFILE=.wave文 件 01.ASMPOGRAM=dianzisuo.HEX1234567890#1 2 3ABCDR210k图 3-4 复位键5第 4 章 软件设计4.1 主程序设计主程序主要完成初始化、检查有无按键按下、以及调用显示、指示灯、密码修改等等,流程图如图 4-1 所示。具体模块包括:1. 按键识别与编码设计 2. 显示程序设计 3. 密码修改程序设计开始付初值密码 1 2 3 4 5 6错误次数 3输入的是* 键输入的是# 号键N开机显示_ _ _ _ _ _ _ _N检查密

12、码是否正确是否修改密码 # 确认* 放弃修改成功显示 G O O D显示输入的密码用 - - 代表密码显示 N O红灯亮显示 G O O D绿灯亮是否 3 次密码错误报警器发声绿红黄灯都亮等待输入黄 绿灯亮N结束输入的是* 键输入的是# 号键N显示输入密码用 - - 代表密码NYYY等待键盘输入NYYYY图 4-1 主程序流程图64.2 按键识别与编码设计当没有按键按下的时候,单片机循环等待按键按下,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要 N 条行线和 M 条列线,即可组成具

13、有 NM个按键的键盘。在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确认有按键按下后,下一步就要识别哪一个按键按下。对按键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。对照图 4-2-1 所示的 44 键盘,说明扫描法原理。首先辨别键盘中有无键按下,有则单片机 I/O 口向键盘送全扫描字,然后读入行线状态来判断。把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个 bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经过比对之后就可知

14、道是哪个键被按下。图 4-2-1 键盘比如说扫描码送入 00001111,前面的 0000 是代表列,而后面的 1111 代表行,是让读取的 4 行接脚先设高,若此时第一行的第一列按键被按下,那读取的结果就会变成 00001110(注意 1111 变成 1110) ,其中 LSB 的第一个 bit 会由 1 变成 0,这是因为这个按键被按下之后,会被垂直的扫描码电位短路接通,而把读取的 LSB 的 bit电位拉到 0,如此我们就知道是第一行有按键按下,然后再送入扫描码 11110000,同理可以得出是第一列有按键按下,2 次半段后就可以知道结果是按键“1”被按下。此即为扫描原理。其流程图如图

15、4-2-2 所示。7开始M O V P 2 , # 0 F H检测哪一排的键被按下P 2 . 0 = 0P 2 . 1 = 0P 2 . 2 = 0P 2 . 3 = 0M O V P 2 , # 0 F 0 H检测哪一列的键被按下P 2 . 4 = 0P 2 . 5 = 0输出为 1 号键输出为 2 号键输出为 3 号键M O V P 2 , # 0 F 0 H键盘横排为 0竖排为 1P 2 . 4 = 0P 2 . 5 = 0输出为 4 号键输出为 5 号键输出为 6 号键M O V P 2 , # 0 F 0 H键盘横排为 0竖排为 1P 2 . 4 = 0P 2 . 5 = 0输出为

16、* 号键输出为 0 号键输出为 # 号键M O V P 2 , # 0 F 0 H键盘横排为 0竖排为 1P 2 . 4 = 0P 2 . 5 = 0输出为 7 号键输出为 8 号键输出为 9 号键NNNNNNYYYYNNNYYNYYNNYYYY结束图 4-2-2 键盘识别子程序流程图84.3 显示程序设计显示设计采用动态扫描。显示程序流程图如图 4-3 所示开始显示输入的密码用 代表输入几个密码就显示几个 - -保存输入的密码结束显示程序流程图如图 4-3数码显示板上一共有 8 个数码管,如果按照传统的数码管驱动方式(静态扫描方式) ,则需要 8 个七段译码器进行驱动,这样既浪费资源,有时电

17、路工作也不可靠。所以现在最常见的数码管驱动电路已经不用上述的静态扫描方式了,而是采用动态扫描显示的方式,这种方式只需一个译码器就可以实现电路正常、可靠的工作,这样大大节省资源。动态数码扫描显示方式是利用了人眼的视觉暂留效应,把八个数码管按一定顺序(从左至右或从右至左)进行点亮,当点亮的频率(即扫描频率)不大时,我们看到的是数码管一个个的点亮,然而,当点亮频率足够大时,我们看到的不再是一个一个的点亮,而是全部同时显示(点亮) ,与传统方式得到的视觉效果完全一样。因此我们只要给数码管这样一个扫描频率,那么就可以实现两个以上的数码管同时点亮。而这个频率我们可以通过一个计数器来产生,只要计数频率足够大

18、,就可以实现我们的要求。事实上,因为数码管点亮不是瞬间就可以的,它也需要一定的时间,该时间与数码管的选择有关系。为了折中这一对矛盾,实验中一般可将计数频率选择在100Hz 左右肯定可以满足上述两个要求。动态扫描的频率有一定的要求,频率太低,LED 将出现闪烁现象。如频率太高,由于每个 LED 点亮的时间太短, LED 的亮度太低,肉眼无法看清,所以一般均取几个 ms 左右为宜,这就要求在编写程序时,选通某一位 LED 使其点亮并保持一定的时间,程序上常采用的是调用延时子程序。在C51 指令中,延时子程序是相当简单的,并且延时时间也很容易更改,可参见程序9清单中的 DELAY 延时子程序。如果显

19、示数字,要为 LED 显示器提供字型代码。我用的是共阳极的显示器。LED 显示器的字形代码如下表所示:LED 显示器共阴极十六进制数的字型代码0 1 2 3 4 5 6 7 8 9C0H F9H A4H B0H 99H 92H 82H F8H 80H 90H主要有三个显示程序组成,分别为按键后的输入密码正确的提示程序,密码输入错误后的提示子程序。询问是否修改密码子程序.XTAL218XTAL119ALE301PSN29RST9P0./AD039.1/18P0.2/AD237.3/36P0.4/AD435.5/54P0.6/AD63.7/72P2.7/A1528P2.0/A821.1/9P2./

20、A023.3/14P2.4/A225.5/136.6/47P1.01.2P1.23.34P1.45.56P1.67.78 P3.0/RXD10.1/TP3.2/IN012./IT13P3.4/014P3.7/RD17.6/W6.5/T15U180C51SRFILE=.wave文 件 01.ASMPOGRAMdinzisuo.HEXR110R310LS1SOUNDERD2LED-REDD3LED-GREN1234567890#1 2 3ABCDR210k R410 4LED-BLUE图 43 a 等待密码输入及修改显示状态XTAL21XTAL119ALE301PSN29RST90./AD39P1

21、 802A23./36P0.4/AD435.5/54P0.6/AD63.7/72P2.7/A1528P2.0/A821.1/9P2./A023.3/14P2.4/A225.5/136.6/47P1.01.2P1.23.34P1.45.56P1.67.78 P3.0/RXD10.1/TP3.2/IN012./IT13P3.4/014P3.7/RD17.6/W6.5/T15U80C51SRFILE=.wave文 件 01.ASMPOGRAMdinzisuo.HEXR110R310LS1SOUNDERD2LED-REDD3LED-GREN1234567890#1 2 3ABCDR210k R410

22、4LE-BLUE图 43 b 输入密码正确的显示状态XTAL21XTAL19ALE301PSN29RST90./AD39.1 80.2/A23./36P0.4/AD435.5/54P0.6/AD63.7/72P2.7/A1528P2.0/A821.1/9P2./A023.3/14P2.4/A225.5/136.6/47P1.01.2P1.23.34P1.45.56P1.67.78 P3.0/RXD10.1/TP3.2/IN012./IT13P3.4/014P3.7/RD17.6/W6.5/T15U80C51SRFILE=.wave文 件 01.ASMPOGRAMdinzisuo.HEXR110

23、R310LS1SOUNDERD2LED-REDD3LED-GREN1234567890#1 2 3ABCDR210k R410 4LE-BLUE图 43 c 输入密码错误的显示状态XTAL21XTAL119ALE301PSN29RST90AD391 802A23./36P0.4/AD435.5/54P0.6/AD63.7/72P2.7/A1528P2.0/A821.1/9P2./A023.3/14P2.4/A225.5/136.6/47P1.01.2P1.23.34P1.45.56P1.67.78 P3.0/RXD10.1/TP3.2/IN012./IT13P3.4/014P3.7/RD17.

24、6/W6.5/T15U80C51SRFILE=.wave文 件 01.ASMPOGRAMdinzisuo.HEXR110R310LS1SOUNDERD2LED-REDD3LED-GREN1234567890#1 2 3ABCDR210k R410 4LED-BLUE 图 44 d 输入密码正确后询问是否修改密码状态图 44 显示状态104.4 密码修改程序设计修改密码的功能,是自己扩展的功能,再输入了正确的密码之后,按下“#”键就可以进行密码的修改了,输入新密码完毕后,再按“#”确认,则密码修改成功,在屏幕上显示 GOOD 信息,则已经修改成功了。密码修改子程序流程图 4-4 所示开始等待输入

25、输入的是* 号键输入的是# 号键结束显示密码用 代表并保持NYN修改成功显示 G O O DY修改子程序流程图 4-411第五章 系统调试5.1 软件模拟调试首先,在 wave 里面写的程序进行编译,唉,编译通不过,不过这也是意料之中的事,把一个一个提示的错误给改正过来,重新进行编译,终于没有错误提示信息了,接着,进行软件仿真,在 proteus 里面把硬件原理图画好,把在 wave 里面写的程序装进 80C51,进行仿真,唉,命途多舛啊!按下任何的键都没有反应,只好回到程序上进行修改了,把程序分成各个小的子程序逐一进行调试。对显示子程序进行调试,发现能够正确的显示,则表示此程序一切都 OK。

26、在把键盘识别和编码的子程序添加进去,发现不能显示了,说明是这个子程序存在问题,接下来重点就是键盘编码部分了,由于我用的是顺序的判断是否有键按下和具体到底是哪个键被按下,思路特别的清晰,所以查找起来比较的方便。由于没有任何的反应,最有可能的就是进入了死循环。所以,先检查一下编码识别后面的程序,果真是进入了死循环,本来是应该编码之后就根据 R7 的值相应进行查表,进行显示。但由于我的粗心,把一个变量没有归零所以一直在里面循环,把所有类似的错误改过来,发现就能够正确的显示了(按下哪个数字键就相应的显示它的值) 。当我把显示子程序改为扫描方式,让其动态的显示多位,按键之后却发现全屏幕显示相同的数,看到

27、如此的现象,心应该是按一次键,却执行了很多的次数,所以最后全屏幕上都上相同的数,如此一来就应该加一个判断是否已经放下键了,但是需要在每个判断是否有键按下后面都要加一个判断,这样太麻烦,但是我们也可以在每次判断之后把相应的编码用完,立即清零也可以达到如此的效果,按照思路对程序进行相应的修改,在进行仿真,真的问题就迎刃而解了(按下哪个数就在屏幕上显示哪个值,按几个就显示几个(小于 6) ) 。接下来要做的就是,对所输入的密码进行比较,把 CHECK 子程序添加进去,如果不出现意外的话,屏幕上会有 GOOD 的提示信息,并且红色的指示灯亮,密码的比较有两个方面,一是对输入密码的个数进行比较,二是对密

28、码的数值依次进行比较,只有全部通过猜是密码正确。在 PROTEUS 里面进行仿真,发现不管你输入的密码是正确还是错误的密码都错误的提示信息,真有想放弃的感觉,其实真的要有耐心和毅力的,心想这么容易的话,还有学的必要吗,呵呵,慢慢的心又平静下来了啊,投入到了程序之中, 再次仿真,令人欣慰的是,如我所思考的,问题解决了,再把对密码的每一位进行比较加去,打击人的是,又不对了啊,呵呵,真的是可笑我居然把一个编码键值与直接的显示数值相比较,那肯定是不会相等的啊,对此做了相应的改动之后,一切都正确了。接着就是如果输入的密码错误次数连续超过三次,则应该显示 NO 的错误提示12信息,前两次只有绿灯亮,三次错

29、误之后,绿灯和蓝灯都亮,呵呵,这次还好,一试就成功了,感觉这个模块是我做的最理想的一个模块了啊。工夫不负有心人,至此,老师分配给我们的基本任务就完成了,心里感觉特别的爽啊!我自己还想再里面加上修改密码的功能,用“#”来充当确定键。到此软件的调试就结束了!5.2 硬件接线及调试虽然软件设计是非常重要的,但是还是纸上谈兵啊,真正要到了调试的时候,这又是一个另一个比设计还头痛的事,我们说它令人头痛事有原因的,按理是通的,但调试不一定可以出来,甚至于设计是错误的,调试是设计的试金石啊!对单片机系统的实验室,我们在之前已经做了几个实验,对它有了初步的了解,使我们在这次做单片机课程设计不至于对单片机试验台

30、太陌生。我们大概发了不到两天的时间就把源程序写出来了,并且调试成功了,但由于老师不方便,所以推迟到了第二个星期才到实验室正式调试了,到了实验室,真的是头晕,一看实验台的元器件,与我们设计的完全的不同,最突出的两点是键盘和 I/O 端口 ,我们在寝室模拟仿真用的是 3*4 的键盘,而学校是不规则的 3*8 的键盘,另外,在 I/O 的问题也比较的严俊,只能用 p1 口,所以只能用 8255 的芯片来扩展了,以在之前的程序基础之上进行改动.还好,算是比较的顺利,只是稍微做了一下调试,功能就基本上对了.呵呵,付出了努力,还是有回报的,最终所有的功能都能在试验台上操作成功!13设计总结课程设计是培养学

31、生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。回顾起此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践,在接近四星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知

32、识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好,通过这次课程设计之后,一定把以前所学过的知识重新温故。通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进之功能不断完善,成为自己的东西。 俗话说“好的开始是成功的一半”。

33、说起课程设计,我认为最重要的就是做好设计的预习,认真的研究老师给的题目,选一个自己有兴趣的题目。其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。 软件的编程也要我们不断的调试,最终一个能完成课程设计的劳动成果出来了,很高兴它能按着设计的思想与要求运动起来。 当然,这其中也有很多问题,第一、不够细心比如由于粗心大意错了线,由于对课本理论的不熟悉导致编程出现错误。第二,是在学习态度上,这次课程设计是对我的学习态度的一次检验。对于这

34、次单片机综合课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这次实习所遇到的多半问题多数都是由于我们不够严谨。第三,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。 这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的14辛勤指导下,终于游逆而解。同时,在老师那里我学得到很多实用的知识。在此对汪超老师以及给过我帮助的所有同学再次表示忠心的感谢!参 考 文 献1、 微型计算机原理及应用许立梓编 机械工业出版社 20022、 微型计算机接口技术及应用刘乐善编 华中理工大学

35、出版社 2000 3、 计算机硬件技术基础试验教程邹逢兴编 高等教育出版社 20004、 16 位微型计算机原理接口及其应用周佩玲编 中国科学技术大学出版社2000 5、 微型计算机原理与接口技术吴秀清编 中国科学技术出版社 20016、 微型计算机接口技术邓亚平编 清华大学出版社 20017、 单片机原理及及应用王迎旭编 机械工业出版社 20018、 单片机应用程序设计技术 周航慈 著 北京航空航天大学出版社 20029、 单片机实用技术问答 谢宜仁 主编 人民邮电出版社 20021516附 录XTAL218XTAL119 ALE30EA31PSEN29RST9P0./AD039P0.1/A

36、D138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD63P0.7/AD732P2.7/A1528P2.0/A821P2.1/A92P2./A1023P2.3/A124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD1P3.2/INT012P3./INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115U1 80C51SRCFILE=.wave文件01.ASMPROGRAM=dianzisuo.

37、HEXR110R310LS1 SOUNDERD2 LED-REDD3 LED-GREN 1234567890#123A B C DR210kR410D4 LED-BLUE硬件原理图17源程序:ORG 0000HSTART:MOV R7,#03HMOV 50H,#82H ;密码付初值MOV 51H,#92HMOV 52H,#99HMOV 53H,#0B0HMOV 54H,#0A4HMOV 55H,#0F9HMOV 60H,#01H ;显示付初值MOV 61H,#03HMOV 62H,#07HMOV 63H,#0FHMOV 64H,#1FHMOV 65H,#3FHMAIN: ;主程序MOV R0,

38、#60HMOV R1,#20HMOV R2,#0HMOV P0,#0FFH ;开机显示_MOV P3,#7FHMOV P1,#0F7HLOOP: LCALL KEYCJNE A,#89H,MAIN1JMP MAINMAIN1:CJNE A,#9CH,MAIN2LCALL CHECKJMP MAINMAIN2:LCALL DISPLAYINC R0INC R1INC R2CJNE R2,#06H,LOOP18LOOP2:LCALL KEYCJNE A,#89H,MAIN3JMP MAINMAIN3:CJNE A,#9CH,MAIN4LCALL CHECKJMP MAINMAIN4:JMP LOO

39、P2KEY:MOV P2,#0FH ;键盘输入子程序JNB P2.0,Y1JNB P2.1,Y2JNB P2.2,Y3JNB P2.3,Y4JMP KEYY1:MOV P2,#0FFHMOV P2,#0F0HJNB P2.4,Y11JNB P2.5,Y12MOV A,#0B0HRETY11:MOV A,#0F9HRETY12:MOV A,#0A4HRETY2:MOV P2,#0FFHMOV P2,#0F0HJNB P2.4,Y21JNB P2.5,Y22MOV A,#82HRETY21:MOV A,#99HRETY22:MOV A,#92HRETY3:MOV P2,#0FFH19MOV P2,

40、#0F0HJNB P2.4,Y31JNB P2.5,Y32MOV A,#90HRETY31:MOV A,#0F8HRETY32:MOV A,#80HRETY4:MOV P2,#0FFHMOV P2,#0F0HJNB P2.4,Y41JNB P2.5,Y42MOV A,#9CHRETY41:MOV A,#89HRETY42:MOV A,#0C0HRETDISPLAY:MOV R1,A ;显示子程序MOV P1,#0BFHMOV P3,R0RETCHECK:DEC R1 ;检查密码子程序MOV A,R1CJNE A,50H,DOWNDEC R1MOV A,R1CJNE A,51H,DOWNDEC

41、R120MOV A,R1CJNE A,52H,DOWNDEC R1MOV A,R1CJNE A,53H,DOWNDEC R1MOV A,R1CJNE A,54H,DOWNDEC R1MOV A,R1CJNE A,55H,DOWNMOV P0,#82HLCALL GOODMOV P1,#58HMOV P3,#7FHC2:LCALL KEYCJNE A,#89H,C1JMP MAINC1:CJNE A,#9CH,C2MOV P1,#0F7HMOV P0,#02HLCALL GAIMIRETDOWN: DJNZ R7,DOWN1MOV P0,#00HLCALL BADDOWN2:CPL P3.7JM

42、P DOWN2DOWN1:MOV P0,#8DHLCALL BADMOV P3,#7FHRETGAIMI:MOV P3,#7FH ;修改密码子程序MOV P1,#0F7H21MOV R0,#60HMOV R1,#20HMOV R2,#0HLOOP3:LCALL KEYCJNE A,#89H,GAIMI1JMP GAIMIGAIMI1:CJNE A,#9CH,GAIMI2LCALL XIUGAIRETGAIMI2:LCALL DISPLAYINC R0INC R1INC R2CJNE R2,#06H,LOOP3LOOP4:LCALL KEYCJNE A,#89H,GAIMI3JMP GAIMIG

43、AIMI3:CJNE A,#9CH,GAIMI4LCALL XIUGAIRETGAIMI4:JMP LOOP4XIUGAI:DEC R1MOV 50H,R1DEC R1MOV 51H,R1DEC R1MOV 52H,R1DEC R1MOV 53H,R1DEC R1MOV 54H,R1DEC R1MOV 55H,R1LCALL GOODRET22GOOD:MOV 3AH,#0C2H ;显示 GOOD 子程序MOV 3BH,#0A3HMOV 3CH,#0A3HMOV 3DH,#0A1HMOV 30H,#02HMOV 31H,#04HMOV 32H,#08HMOV 33H,#10HMOV R0,#3

44、AHMOV R1,#30HMOV R2,#04HMOV R3,#0FFHLOOP1:MOV A,R1MOV P3,AMOV A,R0MOV P1,AACALL YANCHIMOV P1,#0FFHINC R0INC R1DJNZ R2,LOOP1MOV R0,#3AHMOV R1,#30HMOV R2,#04HDJNZ R3,LOOP1RETBAD: MOV 3AH,#0C8H ;显示 NO 子程序MOV 3BH,#0C0HMOV 30H,#04HMOV 31H,#08HMOV R0,#3AHMOV R1,#30HMOV R2,#02HMOV R3,#0FFH23LOOP5:MOV A,R1MOV P3,AMOV A,R0MOV P1,AACALL YANCHIMOV P1,#0FFHINC R0INC R1DJNZ R2,LOOP5MOV R0,#3AHMOV R1,#30HMOV R2,#02HDJNZ R3,LOOP5RETYANCHI: MOV R6,#6H ;延时程序YC1: MOV R5,#0FFHDJNZ R5,$DJNZ R6,YC1RETend

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 课程设计

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报