1、洛 阳 理 工 学 院 仿真文件及keil文件下载 单片机原理及接口技术 课程设计报告 题目: 数码管按键显示 系别: 电气工程与自动化 班级: B100410 姓名: 李奇杰 目录 第一章 设计目的及要求 1 1.1 设计意义 1 1.2 设计内容 1 1.3 设计要求 1 第二章 硬件设计原理与连接 2 2.1 单片机的选择 2 2.2 译码器的选择 2 2.3 数码管的选择 3 2.4 单片机最小系统 4 2.5 硬件原理与仿真连接 4 第三章 汇编程序设计 5 3.1 程序流程图 5 3
2、2 汇编代码 5 第四章 仿真结果及分析 5 4.1 仿真结果 5 4.2 结果分析 5 参考文献 6 附录 7 数码管按键显示 第一章 设计目的及要求 1.1 设计意义 在单片机的产品设计中,人机交互是非常重要的分,而且随着系统的日益复杂,以及人们对产品的人机交互能力的要求不断提升,常握单片机系统中的人机界面基础设计能力成为了学习单片机的基础课程,而4X4键盘的操作和LED数码管的动态显示是人机界面设计的基础内容,掌握这些基础设计能力,加深对人机界面的认识,同时提高人机界面系统设计能力。 1.2 设计内容 给 4×4 键盘的每个键定义一个功能,其中把定义为
3、0~9 的键盘称为数字键,把定义成 DEL 的键称为删除键,把定义成 ENT 的键成为确认键,其他键称为保留键。如果是数字键按下,把代表数字显示在数码管上:按键按下时,6 位数码管靠右边显示该键的代表数字;继续按键时,已经显示在数码管上的数字左移一位,按键代表的数字显示在最右边的数码管上。 1.3 设计要求 熟练掌握51单片机汇编指令 掌握51单片机I/O接口的用法与注意事项 了解设计步骤与思路 用51单片机驱动4X4矩阵键盘编写相应的扫描式键盘驱动程序 用51单片机驱动数码管静态显示,并自行搭建驱动电路,注意电流 按下按键数码管有相应的显示 9 第二章 硬
4、件设计原理与连接 2.1 单片机的选择 选用AT89C51单片机,引脚排列示意图如下: 由于我们选用P0口作为输出口需要注意: 当P0输出数据时,写信号加在锁存器的R引脚上,内部总线上的数据通过S脚由锁存器的“!Q”端反相输出到Q2的栅极。若内部总线上数据为1,则Q2栅极上为0,此时Q2截止,Q2处于漏极开路的开漏状态,因此为了保证P0.0输出高电平,必须外接上拉电阻,否则P0端口不能正常工作51单片机P0口介绍!若内部总线上数据为0,则Q2栅极为1,此时Q2导通,P0.0输出低电平。 2.2 译码器的选择 在Proteus中方真时用的是7SEG-BCD-BLUE的LED数码管
5、直接输出BCD码方便了程序的编写,但在实际应用中没有这样的数码管,多用BCD译码器进行译码,同时提供驱动电流以驱动数码管。 经过资料的搜索查询,我们找到了数字电路中学习过的传统常用的74LS248其特点如下: A,B,C,D 译码地址输入端 /BI,/RBO 消隐输入(低电平有效) 脉冲消隐输出(低电平有效) /LT 灯测试输入端(低电平有效) /RBI 脉冲消隐输入端(低电平有效) a~g 段输出(低电平有效) 输出端(a~g)为低电平有效,可直接驱动指示灯或共阴极 LED 当
6、要求输入 0~15 时,消隐输入(/BI)应为高电平或开路,对于输出 0 时还要求脉冲消隐输入(/RBI)为高电平或开路。 当 BI 为低电电平,不管其它输入端状态如何,a~g 均为低电平。 当/RBI 和地址端(A~D)均为低电平,并且灯测试(/LT)为高电平时,a~g 均为低电平,脉冲消隐输出(/RBO)为低电平。 当 BI 为高电平开路时,/L T 的低电平可使 a~g 为高电平。 若是在Proteus中用SEG-BCD-BLUE的LED数码管仿真则可以完全显示出4 X 4矩阵键盘的所有按键,若是用74LS248驱动,则不会显示10 ~15的按键 2.3 数码管的
7、选择 用单片机驱动LED数码管有很多方法,按显示方式可分静态显示和动态(扫描)显示;按译码方式可分硬件译码和软件译码。静态显示数据稳定,占用很少的CPU时间。动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。LED数码管的外围电路一般需要一个限流电阻和加大驱动电流的晶体管。 LED数码管是由发光二级管显示字段组成的显示器,有“8”字段和“米”字段之分,这种显示器有共阳极和共阴极两种。 本设计采用静态电路设计显示驱动。 2.4 单片机最小系统 系统选择的是AT89C51根据其Datasheet上的典型应用电路画出了其最小系统的电路图 包括晶振电路
8、和复位电路 复位电路具有上电自动复位和手动复位的功能 2.5 硬件原理与仿真连接 由于 第三章 汇编程序设计 3.1 程序流程图 3.2 汇编代码 见附录 第四章 仿真结果及分析 4.1 仿真结果 仿真文件及keil文件下载 4.2 结果分析 按下按键数码管有对应的显示,但是A~F由于用显示译码器的原因无法显示,但在仿真是用7SEG-BCD-BLUE的LED数码管直接连接P0口的低4位是可以显示的。 至此我们实现了用数码管显示按键的任务,当把键盘用于一个大的系统中时,这只是其中的一个小的部分,我们可以判断扫描码,来给系统设定特定的任务操作,从
9、而赋予每个按键以功能。 参考文献 [1] 李朝青. 单片机原理及接口技术(第三版). 北京:北京航空航天大学出版社,2005 [2] 李朝青. 单片机学习辅导测验及解答讲义. 北京:北京航空航天大学出版社,2003 [3] 朱定华,等. 单片微机原理与应用. 北京:清华大学出版社,北京:北方交通大学出版社,2003 [4] 李维祥. 单片机原理与应用. 天津:天津大学出版社,2001 附录 ORG 0000H AJMP KEY ORG 0030H KEY: MOV P1,#0F0H ;令所有行为低电平,全扫描字P1.0~P1.3,列为输入方式
10、 MOV R7,#0FFH ;设置计常数 KEY1: DJNZ R7,KEY1 ;延时 MOV A,P1 ;读取P1口的列值 XRL A,#0F0H ;判别是否有键值按下 JZ KEY ;无键按下时退出 SKEY: MOV A,#00 ;下面进行行行扫描,1行1行扫 MOV R0,A ;R0作为行计数器,开始为0 MOV R1,A ;R1作为列计数器,开始为0 MOV R3,#0FEH ;R3作为行扫描字暂存,低4位为行扫描字
11、SKEY1: MOV A,R3 MOV P1,A ;输出行扫描字,高4位全1 NOP NOP NOP ;3个NOP使P1口输出稳定 MOV A,P1 ;读列值 MOV R1,A ;暂存列值 XRL A,R3 ;取列值 ;高电平则有按键闭合 JNZ SKEY3 ;有按键下转SKEY3,无按键下时进行一行扫描 INC R0 ;行计数加1 SETB C ;准备将行扫描左移1位,形成下一行扫描字,C=1保证输出行扫描字中高4位全部为1,为列输入做准
12、备;低4位中只有1位为0 MOV A,R3 RLC A ;R3带进位C左移1位 MOV R3,A ;形成下一行扫描字→R3 MOV A,R0 CJNE A,#04H,SKEY1 AJMP KEY ;最后一行扫(4次)是否完毕 ;列译码 SKEY3: MOV A,R1 JNB ACC.4,SKEY5 JNB ACC.5,SKEY6 JNB ACC.6,SKEY7 JNB ACC.7,SKEY8 AJMP KEY SKEY5: MOV A,#00H MO
13、V R2,A ;存0列号 AJMP DKEY SKEY6: MOV A,#01H MOV R2,A ;存1列号 AJMP DKEY SKEY7: MOV A,#02H MOV R2,A ;存2列号 AJMP DKEY SKEY8: MOV A,#03H MOV R2,A ;存3列号 AJMP DKEY ;键位置译码 DKEY: MOV A,R0 ;取行号 ACALL DECODE MOV P0,A ;输出到BCD数码管 AJMP KEY ;键值移码 DECODE: MOV A,R0 ;取行号送A MOV B,#04H ;每一行按键个数 MUL AB ;行号X按键数 ADD A,R2 ;行号X按键数+列号=键值(号),在A中 RET DE10MS:MOV R5,#10H ;延时10ms子程序 DS1: MOV R6,#0FFH DS2: DJNZ R6,DS2 DJNZ R5,DS1 RET






