4X4矩阵键盘控制数码管显示按键值.docx
《4X4矩阵键盘控制数码管显示按键值.docx》由会员分享,可在线阅读,更多相关《4X4矩阵键盘控制数码管显示按键值.docx(22页珍藏版)》请在冰豆网上搜索。
4X4矩阵键盘控制数码管显示按键值
4X4矩阵键盘控制数码管显示按键值
4X4矩阵键盘控制数码管显示按键值一、设计内容与要求
用80C51单片机控制系统显示按键值0~F。
二、设计目的意义
2.1设计目的
1、了解单片机系统中实现LED动态显示的原理及方法;
2、详细了解8051芯片的性能及编程方法;
3、了解单片机系统基本原理,了解单片机控制原理;
4、掌握AT89C51输入/输出接口电路设计方法;
5、掌握AT89C51程序控制方法;
6、掌握单片机汇编编程技术中的设计和分析方法;
7、掌握使用PROTEUS软件进行仿真的方法。
8、学会使用并熟练掌握电路绘制软件Protel99SE;
9、掌握电路图绘制及PCB图布线技巧。
2.2设计意义
1、在系统掌握单片机相应基础知识的前提下,熟悉单片机应用系统的设计方法及系统设计的基本步骤。
2、完成所需单片机应用系统原理图设计绘制的基础上完成系统的电路图设计。
3、完成系统所需的硬件设计制作,在提高实际动手能力的基础上进一步巩固所学知识。
4、进行题目要求功能基础上的软件程序编程,会用相应软件进行程序调试和测试工作。
5、用AT89C51设计出题目所要求的数码管动态循环显示,并针对实际设计过程中软、硬件设计方面出现的问题提出相应解决办法。
6、通过单片机应用系统的设计将所学的知识融会贯通,锻炼独立设计、制作和调试单片机应用系统的能力;领会单片机应用系统的软、硬件调试方法和系统的研制开发过程,为进一步的科研实践活动打下坚实的基础。
三、系统硬件电路图
3.1Proteus软件简介以及仿真电路图
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、
1
ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
Proteus软件具有其它EDA工具软件(例:
multisim)的功能。
这些功能是:
(1)原理布图
(2)PCB自动或人工布线
(3)SPICE电路仿真
革命性的特点:
1)互动的电路仿真(
用户甚至可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。
(2)仿真处理器及其外围电路
可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。
还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。
配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。
图3-1所示为使用proteus软件建立的模型,经仿真,程序实现了预定功能。
图3-1
3.2Protel99SE简介以及所绘图形
Protel99SE是应用于Windows9X/2000/NT/XP操作系统下的EDA设计软件,采用设计库管理模式,可以进行联网设计,具有很强的数据交换能力和开放性及3D模拟功能,是一个32位的设计软件,可以完成电路原理图设计,印制电路板设计和可编程逻辑器件设计等工作,可以设计32个信号层,16个电源--地层和16个机加工层。
Protel99SE的系统组成
按照系统功能来划分,Protel99se主要包含以下两大部分和6个功能模块。
1、电路工程设计部分
(1)电路原理设计部分(AdvancedSchematic99):
电路原理图设计部分包括
2
电路图编辑器(简称SCH编辑器)、电路图零件库编辑器(简称Schlib编辑器)和各种文本编辑器。
本系统的主要功能是:
绘制、修改和编辑电路原理图;更新和修改电路图零件库;查看和编辑有关电路图和零件库的各种报表。
(2)印刷电路板设计系统(AdvancedPCB99):
印刷电路板设计系统包括印刷电路板编辑器(简称PCB编辑器)、零件封装编辑器(简称PCBLib编辑器)和电路板组件管理器。
本系统的主要功能是:
绘制、修改和编辑电路板;更新和修改零件封装;管理电路板组件。
(3)自动布线系统(AdvancedRoute99):
本系统包含一个基于形状(Shape-based)的无栅格自动布线器,用于印刷电路板的自动布线,以实现PCB设计的自动化。
2、电路仿真与PLD部分
(1)电路模拟仿真系统(AdvancedSIM99):
电路模拟仿真系统包含一个数字/模拟信号仿真器,可提供连续的数字信号和模拟信号,以便对电路原理图进行信号模拟仿真,从而验证其正确性和可行性。
(2)可编程逻辑设计系统(AdvancedPLD99):
可编程逻辑设计系统包含一个有语法功能的文本编辑器和一个波形编辑器(Waveform)。
本系统的主要功能是;对逻辑电路进行分析、综合;观察信号的波形。
利用PLD系统可以最大限度的精简逻辑部件,使数字电路设计达到最简化。
3)高级信号完整性分析系统(AdvancedIntegrity99):
信号完整性分析系统(
提供了一个精确的信号完整性模拟器,可用来分析PCB设计、检查电路设计参数、实验超调量、阻抗和信号谐波要求等。
Protel99SE的功能特性:
(1)开放式集成化的设计管理体系
(2)超强功能的、修改与编辑功能
(3)强大的设计自动化功能
鉴于Protel99SE有如此强大功能,因此在本最小系统设计中使用Protel99SE制图,所制电路原理图和PCB图如下所示。
图3-2电路原理图
3
图3-3单片机Protel图
图3-4复位电路
4
图3-5晶振电路
图3-6电源电路
四、程序流程图及源程序
4-1(程序流程图
主控制芯片为AT89C52,16个键盘读入数据,数码管动态显示。
.软件流程图如下:
主程序流程图:
5
5.3源程序
cs8255equ0ffffh;8255命令控制口
outsegequ0fffch;字形控制口
outbitequ0fffdh;字位/键扫控制口
in_keyequ0fffeh;键盘读入口
ledbufequ7eh;显示缓冲/回车前光标位置ledbufrequ77h;回车后光标位置
blnpntequ50h;闪动指针单元
org0
ledgd:
movsp,#60h
movdptr,#cs8255
mova,#89h;命令字:
a,b输出、c输入
movx@dptr,a;8255初始化
;清显示缓冲单元
ldegd:
movblnpnt,#ledbuf
mova,#10h
movr0,#ledbufrlegs:
mov@r0,a
incr0
cjner0,#ledbuf,legs
inca;送待令符“p.”
mov@r0,a
ledt:
callxeg2;调闪动显示、键扫消抖子程序
cjnea,#10h,leg0;比较键值
leg0:
jncldegd;如果是功能键则返回闪动的“P.”
acallxeg3;送当前led光标闪动单元
sjmpledt;完成送数操作返回显示键扫入口
;刷新光标单元调正闪动指针
xeg3:
movr4,a;暂存键值
movr0,#blnpnt;光标单元
mova,@r0
movr1,a
mova,r4;恢复键值
mov@r1,a
6
mova,#ledbufr;回车后光标位置
cjnea,01h,xg30;r1
decr1
mova,#ledbuf;回车前光标位置
sjmpxg31xg30:
decr1
mova,r1xg31:
mov@r0,a
ret
;闪动显示子程序
xeg2:
movr6,#80hxge0:
acallxgel;显示、键扫消抖程序
jnbacc.5,xgx0
djnzr6,xge0
movr0,#blnpnt
mova,@r0
movr0,a
mova,@r0
movr7,a
mova,#10h
mov@r0,a
movr6,#30hxge1:
acallxgel
jnbacc.5,xgex1;显示、键扫消抖程序
djnzr6,xge1
mova,r7
mov@r0,a
sjmpxeg2xgex1:
movr6,a
mova,r7
mov@r0,a
mova,r6xgx0:
ret
;显示、键扫消抖程序
xgel:
calldisp;显示
callgetkey;得到键盘扫描码
movr4,a;键消抖处理程序
movr1,#48h
mova,@r1
movr2,a
incr1
mova,@r1
7
movr3,a
mova,r4
xrla,r3
movr3,04h;r4
movr4,02h;r2
jzxge10
movr2,#88h
movr4,#88h;键盘消抖延迟参数xge10:
decr4
mova,r4
xrla,#82h
jzxge11
mova,r4
xrla,#0eh
jzxge11
mova,r4
jzxge12
movr4,#20h
decr2
sjmpxge13xge12:
movr4,#0fhxge11:
movr2,04h;r4
nop
nop
movr4,03h;r3
xge13:
movr1,#48h
mova,r2
mov@r1,a
incr1
mova,r3
mov@r1,a
mova,r4
jbacc.5,xg113
movdptr,#keycode
movca,@a+dptrxg113:
ret
;显示子程序
disp:
pushdpl
pushdph
setbrs1
movr0,#ledbuf
movr2,#80h
movdptr,#ledmap
8
disp2:
mova,@r0
movca,@a+dptr
pushdpl
pushdph
movdptr,#outseg
movx@dptr,a
mova,r2
movdptr,#outbit
movx@dptr,a
popdph
popdpl
movr3,#0
djnzr3,$;闪动延迟
clrc
rrca;右移显示
movr2,a
decr0
jnzdisp2
clrrs1
popdph
popdpl
ret
;键扫子程序
getkey:
setbrs1
movr2,#0feh
movr3,#08h
movr0,#00hlgep1:
pushdpl
pushdph
movdptr,#outbit
mova,r2
movx@dptr,a
rla
movr2,a
movdptr,#in_key
movxa,@dptr
popdph
popdpl
cpla
anla,#0fh
jnzlgep0
incr0
djnzr3,lgep1
9
xgep33:
mova,#20h
xgep3:
movr2,a
mova,#0fh
pushdpl
pushdph
movdptr,#outbit
movx@dptr,a
popdph
popdpl
mova,r2
clrrs1
sjmpreturn
lgep0:
cpla
jbacc.0,xgep0
mova,#00h
sjmplgepp
xgep0:
jbacc.1,xgep1
mova,#08h
sjmplgepp
xgep1:
jbacc.2,xgep2
mova,#10h
sjmplgepp
xgep2:
jbacc.3,xgep33
mova,#18h
lgepp:
adda,r0
sjmpxgep3
return:
ret
;键值表
keycode:
db07h,04h,08h,05h,09h,06h,0ah,0bh
db01h,00h,02h,0fh,03h,0eh,0ch,0dh
db10h,11h,12h,13h,14h,15h,16h,17h
db18h,19h,1ah,1bh,1ch,1dh,1eh,1fh
;字形表
ledmap:
db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
db80h,90h,88h,83h,0c6h,0a1h,86h,8eh
db0ffh,0ch,89h,7fh,0bfh
End
五、系统说明与设计分析
5.18051单片机介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh
10
ProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
图5-1AT89C51封装图
1、主要特性:
?
与MCS-51兼容
?
4K字节可编程闪烁存储器
?
寿命:
1000写/擦循环
?
数据保留时间:
10年
?
全静态工作:
0Hz-24Hz
?
三级程序存储器锁定
?
128*8位内部RAM
?
32可编程I/O线
?
两个16位定时器/计数器
?
5个中断源
?
可编程串行通道
11
?
低功耗的闲置和掉电模式
?
片内振荡器和时钟电路
其包含中央处理器(CPU)、存储器(程序存储器ROM和数据存储器RAM)、定时/计数器、并行I/O接口(P1、P2、P3、P0共4个8位口)、一个双工串行接口和5个中断源等几大单元及数据总线、地址总线和控制总线三大总线等结构组成。
下图是MCS-51系列单片机的内部结构示意图。
图5-2MCS,51结构框图
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
现在我们对这些引脚的功能加以说
明:
12
图5-3AT89C51引脚图
P0口:
图5-4P0口位结构原理图
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
13
图5-5P1口位结构原理图
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
图5-6P2口位结构原理图
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口
14
当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
图5-7P3口位结构原理图
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
表5-1P3口特殊功能表
15
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2、振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
3、芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM,定时器,计数器,串
16
口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
4、编程与校验
图5-889C51的闪速存储器编程和校验
5.2单片机系统设计步骤
1、理解设计任务要求(通过阅读有关资料及调查研究);
2、对总体方案进行分析、论证,验证其可行性;
3、系统硬件电路的设计,使用Protel软件制作硬件电路图。
根据PCB图制作系统硬
件电路板并焊上相关元件,检测线路是否导通;
4、系统控制软件的设计:
1)以功能明确、相互界面能清晰分割的软件程序为基础,确定主程序流程框图;
2)以主程序流程框图为基础,确定各模块程序算法及实现的功能,进一步确定各
17
模块程序流程框图;
3)根据软件流程框图,用汇编语言或C语言编写主程序和延时子程序;
4)系统软件仿真、硬件制作、硬件的调试;
5)编写课程设计说明书,答辩验收。
六、结论
由于系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项指标。
这次实训提高了我们的设计能力与及对电路的分析能力.同时在软件的编程方面得到更到的提高,对编程能力得到加强.同时对所学的知识得到很大的提高与巩固.本次实验熟悉了单片机的使用和功能,了解了DS130经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计的功能,熟悉了KeiluVision3进行程序调试,利用Proteus7.12进行硬件仿真
由于所学知识有限,硬件选择和程序编写有一定不合理性,有待改进。
在整个设计过程中,发挥团队精神,分工合作,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。
较好的完成了作品。
达到了预期的目的,在最初的设计中,发挥“三个臭皮匠,顶个诸葛亮”的作用。
相互学习、相互讨论、研究。
完了最初的设想。
在电路焊接时虽然没什么大问题,但从中也知道了焊接在整个作品中的重要性,电路工程量大,不能心急,一个个慢慢来不能急于求成。
反而达到事半功倍的效果。
对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。
程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同组员的讨论,理清了思路,反而得心应手。
在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。
也练就了我们的耐心,做什么事都在有耐心。
此次比赛中学到了很多很多东西,这是最重要的。
总之,我们的能力得到了全方位的提高。
18