以8155作为接口的键盘显示系统的设计.docx
《以8155作为接口的键盘显示系统的设计.docx》由会员分享,可在线阅读,更多相关《以8155作为接口的键盘显示系统的设计.docx(22页珍藏版)》请在冰豆网上搜索。
以8155作为接口的键盘显示系统的设计
单片机原理
课程设计报告
设计题目:
以8155作为接口的键盘显示系统的设计
专业班级:
自动化
学号:
姓名:
指导教师:
沈怀洋
起止日期:
2015年12月28日~2016年1月3日
目录
1.课程设计目的1
2.课程设计要求1
3.设计内容1
3.1设计方案1
3.2硬件各单元电路的设计2
3.2.1显示部分的设计2
3.2.2键盘部分的设计7
3.3软件设计10
3.3.1程序框图11
3.3.2程序清单12
4.总结14
参考文献14
附录15
1.课程设计目的
(1)加深对单片机原理的理解;
(2)培养实践动手能力,开发创新思维;
(3)提高分析、解决问题的能力;
(4)了解单片机系统开发流程。
2.课程设计要求
(1)设计一个以8155作为单片机扩展并行接口的键盘显示系统;
(2)设计以单片机为核心的键盘和显示系统硬件电路和软件程序,主要分为以下两部分设计:
①设计单片机显示电路和显示部分软件程序;
②设计单片机键盘电路和键盘部分软件程序;
(3)设计总的实用电路并写出总的软件程序清单。
3.设计内容
3.1设计方案
根据课程设计要求,设计一个以8155作为接口的键盘显示系统,通过各硬件部分的连接原理,得到如图一所示的键盘显示系统。
图一以单片机为核心的键盘显示系统
如图一所示的键盘显示系统,单片机使用8155的I/O端口扩展,通过PC口与键盘的连接接收来自键盘的信号,通过PA口发送位选信号到八段LED显示器的公共端,通过PB口发送段选信号分别连接到八段LED显示器的a—g和SP引脚上。
这样由键盘和8155以及单片机构成键盘显示系统的键盘部分,由显示器和8155以及单片机构成键盘显示系统的显示部分,下面分别详细介绍设计。
3.2硬件各单元电路的设计
3.2.1显示部分的设计
(1)显示部分概述
单片机的键盘显示系统的显示部分是由8个八段LED显示器构成的。
八段LED显示器是一种把8个LED显示段(分别为A、B、C、D、E、F、G、DP,其中DP是小数点位段)集成在一起的显示设备,如图二所示,具有两种类型,一种是共阳型,一种是共阴型。
共阳型就是把多个LED显示段的阳极接在一起,为阳极公共端G。
共阴型就是把多个LED显示段的阴极接在一起,为阴极公共端。
八段LED显示器的显示分为静态和动态两种。
静态显示的特点是各个LED显示器能够文档地同时显示各自的字形,在任何时刻,所有的数码管同时亮,缺点是占用单片机的资源,并且比较耗电;动态显示是指各LED显示器轮流地一位一位的显示各个字符,在某一时刻,只有一位LED显示器亮,因为人的视觉暂留,在看到8个八段LED显示器时好像是同时显示不同字形,但必须保证扫描速度足够快,字符才不闪烁。
本次课程设计的显示系统选择使用的是动态显示方式,八段LED显示器采用共阳型。
动态显示有利于减少显示系统在显示时占有单片机CPU的资源,并且减少硬件电路的耗能,从而提高显示系统的可靠性。
图二八段LED显示器元件图
(2)显示电路的构成
单片机采用动态显示的方法控制LED显示器的显示,使用软件查表的方法,预先将LED能显示的字形码组成一个有顺序的字形表,通过在单片机的RAM中建立一个显示缓冲区,在显示缓存区的存储单元个数与显示系统的LED显示器个数相等,它们是一一对应的,八个存储单元对应八个LED显示器;其中显示缓冲区的每个存储单元保存LED显示器需要显示的字符在字形表中的地址偏移量,单片机通过这个地址偏移量查找出所要显示字符的字形码。
D7
D6
D5
D4
D3
D2
D1
D0
TM2
TM1
IEB
IEA
PC2
PC1
PB
PA
表一8155命令字
如表一所示,8155的命令字共有8位,其中D3和D2是PC口的四种方式控制位,D1和D0分别是PA口和PB口的输入/输出方式控制字,根据硬件电路设计,8155芯片的PA口和PB口作为显示输出,故PA=1,PB=1;PC口作为键盘输入,工作在ALT1方式,PC1=PC2=0,在使用8155前,需要为其送03H的方式控制字。
如表二所示,片选输入线,单片机选中8155芯片工作,I/O端口选通输入线,选中8155芯片某一I/O寄存器工作。
根据图三所示,可知单片机的P2.7引脚连接到
引脚,当
=0时,使8155芯片工作,令P2.7=0;单片机的P2.6引脚连接
当
=1时,使8155的I/O端口工作,令P2.6=1。
A7
A6
A5
A4
A3
A2
A1
A0
所选端口
0
1
*
*
*
*
*
0
0
0
命令/状态寄存器
0
1
*
*
*
*
*
0
0
1
A口
0
1
*
*
*
*
*
0
1
0
B口
0
1
*
*
*
*
*
0
1
1
C口
0
1
*
*
*
*
*
1
0
0
计数器低8位
0
1
*
*
*
*
*
1
0
1
计数器高8位
0
1
*
*
*
*
*
*
*
*
RAM单元
表二8155端口地址分配
单片机和8155芯片其他引脚连接:
:
ALE为允许地址输入线,与单片机的ALE引脚相连,当ALE=1时,8155允许AD7-AD0上地址锁存到“地址锁存器”,否则,地址锁存器处于封锁状态。
:
8155的
同单片机的
相连,
为写命令线,
为读命令线,当
=0,
=1时,8155处于读数据状态;
=1,
=0时,8155为写数据状态。
:
RESET是8155芯片的总清输入线,它与单片机的RESET引脚相连,当单片机的从RESET引脚输出一个大于600ns宽的正脉冲到8155芯片的RESET引脚时,8155将处于总清状态,PA、PB、PC口都定义为输入方式。
由上得出8155端口地址分配如下:
0400命令/状态口
0401PA口(位选口)
0402PB口(段选口)
0403PC口(键盘输入口)
(3)电路所用到的芯片
8个八段LED显示器、PNP三极管、8155、单片机、电阻、电源VCC
(4)显示电路的连接
单片机通过8155对8个八段LED显示器进行连接,达到控制显示器的目的,使用单片机的P1和P2口作为地址数据分时复用口,P1口的8个引脚分别与8155的AD口的8个引脚相连;其中8155的PA口通过PNP三极管作为驱动器和LED的控制端G相连接,PA口作为位选口,控制LED的亮灭;8155的PB口作为段选口,与LED显示器各段对应的引脚a,b,c,d,e,f,g,SP连接。
图三显示系统电路的构成
驱动电路由8个PNP三极管构成,如图三所示,根据驱动数码管段码能力,本课程设计设计采用数码管位选端与PNP三极管集电极相连,三极管发射极接5V直流电源,三极管基极与8155芯片PA口相连,数码管段选端与PB口相连。
通过单片机的所有P1口和部分P2口对8155芯片进行控制,达到单片机对8个八位LED显示器位、段的控制。
(5)显示部分的调试程序
1 程序框图
图四显示系统程序设计框图
如图四所示的程序框图,先给8155送方式控制字,在确定了8155的端口地址后,得到偏移量,即显示缓冲区的每个存储单元用于存放相应LED显示器要显示的字符在字形码表中的地址偏移量,因此CPU就可以根据这个地址偏移量通过查询字形码表找出所要显示字符的字形码表,送到8155芯片的PB口,即可显示数,下面为程序清单。
2 程序清单
ORG1000H
DISPLAY:
MOVPSW,#18H;使寄存器工作在01#区
MOVA,#03H;方式控制字03H送A
MOVDPTR,#0400H;DPTR指向8155的命令口
MOVX@DPTR,A;方式控制字03H送给8155命令口
DISPLAY1:
MOVR0,#80H;显示缓冲区初始地址80H送R0
MOVR3,#0FEH;字位码0FEH送R3
MOVA,R3;字位码0FEH送A
LD0:
MOVDPTR,#0401H;DPTR指向8155的PA口
MOVX@DPTR,A;将字位码送给8155的PA口
MOVDPTR,#0402H;DPTR指向8155的PB口
MOVA,@R0;将要显示字符的偏移量送A
ADDA,#0DH;对A进行地址修正,加0DH
MOVCA,@A+PC;查字形码表
MOVX@DPTR,A;将所显示字符码送给8155的PB口
ACALLDELAY;调用延时1ms子程序
INCR0;寄存器R0中的数加一,指向下一缓冲地址
MOVA,R3;字位码送A
JNBACC.7,LD1;判断累加器A的最高位是否为0,若为0,则LD1
RLA;若不为0,字位码左移一位
MOVR3,A;将左移一位后的数送回R3
AJMPLD0;跳转到LD0,将显示下一数码
LD1:
RET;返回主程序
DATATAB:
DB0C0H,0F9H,0A4H,0B0H,99H;八段LED显示器字形码表
DB92H,82H,0F8H,80H,90H
DB88H,83H,0C6H,0A1H,86H
DB8EH,0FFH,0CH,89H,7FH
DB0BFH
DELAY:
MOVR7,#02H;延时1ms的子程序
DELAY1:
MOVR6,#0FFH
DELAY2:
DJNZR6,DELAY2
DJNZR7,DELAY1
RET
3.2.2键盘部分的设计
(1)键盘部分概述
键盘作为单片机的输入设备,可以通过键盘的输入实现人机通讯。
根据键盘的大小可以分为独立连接式和矩阵式两类;根据对按键的译码方法又可分为编码键盘和非编码键盘两种,编码键盘主要通过硬件电路产生被按键的键码和一个选通脉冲,选通脉冲常用在单片机中断请求,用以通知被按键的键码,但是这种键盘硬件电路太复杂,不适合单片机使用;非编码键盘只是通过每个按键与相应连接点的接通和断开,键码是通过相应的扫描处理程序形成的,非编码键盘的硬件电路简单,适合单片机使用。
(2)
键盘电路的构成
图五键盘系统电路
键盘电路由四个按键KEY1、KEY2、KEY3、KEY4和四个电阻构成独立式非编码键盘,按键的另一端和8155的PC口连接,同时与电阻相连,电阻另一端与+5V电源连接,当有按键按下时,PC的某一端口就从高电平变成了低电平。
通过扫描程序对PC口进行扫描,就可扫描出哪个键被按下。
键盘键值表的编码规则是按顺序编码,上述四个键按顺序分别编码为01H、02H、03H、04H。
按键的去抖动处理。
在按下某个按键时,被按的按键簧片总会有轻微的抖动,通常抖动持续10ms左右。
所以CPU在按键抖动期间扫描键盘一定会得到错误的键盘键值,最好的去抖动方法是使CPU在检测到有按键按下时延时20ms再进行扫描键盘,以获得准确的键值。
窜键处理。
当用户操作键盘时,不小心按下了一个以上按键,发生了窜键。
CPU处理窜键的原则是最后放开的按键被认为是真正按下的键。
因此在处理窜键时,预先设定一个窜键标志寄存器,在键盘扫描前清零。
当窜键标志寄存器不为零时,即有窜键发生,则要求CPU返回主程序重新开始下一次扫描,获取最后真正按下的键;当没有窜键发生时,所获得的就是真的键值。
(3)键盘电路所用到的元件
按键、电阻、电源VCC、8155、单片机
(4)键盘电路的连接
键盘电路的连接如图所示,大部分连接电路已经在显示电路中介绍,这部分只介绍键盘和8155的连接。
键盘电路的连接如图所示,键盘的一端分别和PC0、PC1、PC2、PC3连接,另一端都和地连接,电阻的一端与PC口连接,同键盘并联,但是另一端接的是电源。
(5)键盘部分调试程序
1 程序框图
图六键盘系统程序设计框图
如图六的流程图所示,键盘扫描程序由主程序段和求键值程序段构成。
当没有键按下时,使累加器A=0FFH作为主程序判断的标志;当有键按下时,经过键盘扫描,在经过查表,得到按键的键值。
以下为详细设计的程序清单。
2 程序清单
ORG0100H
KEY:
MOVDPTR,#0403H;DPTR指向8155的PC口
MOVXA,@DPTR;读取PC口的状态
ANLA,#0FH;屏蔽高四位
CJNEA,#0FH,KEYSCAN;如果有键按下,则KEYSCAN
SJMPEXIT;如果没有键按下,则EXIT
KEYSCAN:
ACALLDY12MS;延时12秒去抖动
KEYSM1:
MOVDPTR,#0403H;DPTR再次指向8155的PC口
MOVXA,@DPTR;重新读取PC口的状态
ANLA,#0FH;屏蔽高四位
CJNEA,#0FH,JSADD;判断是否真的有键按下,如果有键按下,则JSADD
MOVA,#0FFH
EXIT:
SJMPDONE;如果没有键按下,则跳转到DONE
JSADD:
JBACC.0,JSADD1;如果KEY1按键没有被按下,则JSADD1
MOVA,#00H
AJMPJSADD4;跳转到JSADD4
JSADD1:
JBACC.1,JSADD2;如果KEY2按键没有被按下,则JSADD2
MOVA,#01H
AJMPJSADD4
JSADD2:
JBACC.2,JSADD3;如果KEY3按键没有被按下,则JSADD3
MOVA,#02H
AJMPJSADD4
JSADD3:
JBACC.3,JSADD4;如果KEY3按键没有被按下,则JSADD4
MOVA,#03H
JSADD4:
MOVDPTR,#TAB;DPTR指向键值表的初始地址
MOVCA,@A+DPTR;得到键值送A
DONE:
RET;返回
TAB:
DB01H,02H,03H,04H;键值表
DY12MS:
MOVR7,#18H;延时12ms子程序
DY12MS1:
MOVR6,#0FFH
DY12MS2:
DJNZR6,DY12MS2
DJNZR7,DY12MS1
RET
3.3软件设计
设计此电路可以作为计数器使用,所以根据硬件电路设计了分秒计时器。
各个键的功能如下:
KEY1:
开始键或暂停开始键
KEY2:
暂停键
KEY3:
复位键
KEY4:
确认键(防止误操作)
本软件设计只能计时99分钟59秒,超过99分钟59秒将重新开始计时。
设计原理如下
1单片机和其他硬件刚插上电工作时,显示器就显示了一遍数,
其中对应的数码为:
(为了使设计便于表述,将显示器显示的数做成相应的表格)
显示器1
显示器2
显示器3
显示器4
显示器5
显示器6
显示器7
显示器8
P
C
A
0
0
b
0
0
②然后进行键盘扫描,当只按下KEY1键时,显示数码为:
显示器1
显示器2
显示器3
显示器4
显示器5
显示器6
显示器7
显示器8
d
-
A
0
0
b
0
0
之后按下KEY4键后,显示器4,5,7,8开始显示计时的数。
③当只按下KEY2键时,计时器仍在计数,显示数码为:
显示器1
显示器2
显示器3
显示器4
显示器5
显示器6
显示器7
显示器8
E
-
A
*
*
b
*
*
当按下KEY4键后,显示器4,5,7,8一直显示到暂停为止计时的数。
④当只按下KEY3键时,计时器仍然在计数并且显示,显示数码为:
显示器1
显示器2
显示器3
显示器4
显示器5
显示器6
显示器7
显示器8
F
-
A
*
*
b
*
*
之后按下KEY4键后,显示器4,5,7,8开始重新从00开始计时。
根据上述设计原理和需要实现的功能,设计出下面所示的程序框图和程序清单。
3.3.1程序框图
图七分秒计时器程序设计框图
3.3.2程序清单
ORG0030H
START:
MOV87H,#11H;给数据缓冲区赋初始值
MOV86H,#0CH
MOV85H,#0AH
MOV82H,#0BH
MOV81H,#00H
MOV80H,#00H
MOV83H,#00H
MOV84H,#00H
LP:
ACALLDISPLAY;调用显示子程序
ACALLKEY;调用键盘扫描子程序
CJNEA,#0FFH,LOOP1;判断是否有键按下
LJMPLP;若无键按下,则LP
LOOP1:
JNBACC.0,LP;如果KEY1按键没有被按下,则LP
MOV87H,#0DH;按下KEY1键后,再次为缓冲区赋初值
MOV86H,#14H
MOVR2,#01H
LJMPYES;跳转到YES
PRO1:
JBACC.1,PRO2;如果KEY2按键没有被按下,则PRO2
MOV87H,#0EH
MOV86H,#14H
MOVR2,#02H
LJMPYES
PRO2:
JBACC.2,PRO3;如果KEY3按键没有被按下,则PRO3
MOV87H,#0FH
MOV86H,#14H
MOVR2,#03H
LJMPYES
YES:
ACALLDISPLAY;重新调用显示子程序
ACALLKEY;重新调用键盘扫描子程序
PRO3:
JBACC.3,LP;如果KEY4按键没有被按下,则LP
MOVA,R2
CJNEA,#01H,FIRST;确认是否KEY1按下,否则FIRST
ACALLTIME;调用计时子程序
LX:
MOV80H,R1;给数据缓冲区送计时数据
MOV81H,R3
MOV83H,R4
MOV84H,R5
MOVA,R1
ACALLDISPLAY;调用显示子程序
CJNEA,#0AH,LX;判断秒的个位是否计时到10,否则LX
MOVR1,#00H;到10,给R1送0
INCR3
MOVA,R3
CJNER3,#06H,LX;判断秒的十位是否计时到6,否则LX
MOVR3,#00H
INCR4
MOVA,R4
CJNER4,#0AH,LX;判断分的十位是否计时到10,否则LX
MOVR4,#00H
INCR5
MOVA,R5
CJNER5,#0AH,LX;判断分的十位是否计时到10,否则LX
LJMPSTART
FIRST:
CJNEA,#02H,SECOND;确认是否KEY2按下,否则SECOND
CLRTR0;暂停计时
PAUSE:
ACALLDISPLAY
AJMPPAUSE
SECOND:
LJMPSTART;复位重新从0开始计数
ORG0300H;计时子程序
TIME:
MOVTMOD,#01H;使T0的定时方式为01
MOVTH0,#3CH;装入初始值
MOVTL0,#0B0H
MOVIE,#82H;开T0中断
SETBTR0;启动T0开始计数
MOVRO,#14H;
SJMP$;等待中断
ORG000BH
AJMPBRT0
ORG0080H
BRT0:
DJNZR0,NEXT;若未到1s,则NEXT
MOVRO,#14H;否则恢复R0初值
INCR2;计时1s次数
NEXT:
MOVTH0,#3CH;重装初始值
MOVTL0,#0B0H
RETI
END
注:
显示和键盘子程序略去,可直接使用以上详细介绍的键盘和显示子程序,其中DISPLAY是显示子程序,KEY是键盘子程序。
4.总结
通过这次课程设计,让我明白了键盘显示系统的设计方法,也锻炼了自己的思维能力,将单片机的零散的知识串到一起,设计出一个实用电路。
首先硬件方面,通过原理图的绘制和思考,使我对单片机的接口有了更深的理解,熟悉了一些单片机常用的电路引脚和连接方法。
在软件方面,通过对键盘扫描程序和显示程序的设计,让我学会了分析问题和解决问题的能力,加深了对所学理论知识的理解和运用,使我的思维得到了锻炼。
这次设计就是让我们将知识学以致用,将书本上学到的知识应用于实践。
尽管这次课程设计遇到了许多的问题,但是也都一一得以解决,比如显示系统的软件程序设计时,遇到了很多问题,但是经过向沈老师的指导,并且和同学们的讨论,使得难懂的问题得到解决;感谢沈老师和同学的热情帮助,没有你们,我不可能顺利完成这次课程设计。
这次课程设计同时也磨练了我的耐心,遇到困难时不要退缩,要静下心来去寻找解决问题的方法,否则很难有最后的成功。
因此,我觉得这次的课程设计对我而言算是一次全新的尝试,也是一次很好的锻炼,让我迈出了单片机开发设计的第一步,我相信只要不断努力,单片机开发水平一定会有很大的提高和进步。
参考文献
[1]胡汉才.单片机原理及其接口技术.北京:
清华大学出版社,2010
[2]康华光.电子技术基础.北京:
高等教育出版社,2005
[3]何立民.单片机应用系统设计.北京:
北京航空航天大学出版社,1993
[4]楼然笛.单片机开发.北京:
人民邮电出版社,1994
[5]潘永雄,沙河.电子线路CAD实用教程.西安:
西安电子科技大学出版社,2012
[6]付家才.单片机控制工程实践技术.北京:
化学工业出版社,2004
[7]李光才.单片机课程设计实例指导.北京:
北京航空航天大学出版社,2004
[8]朱定华.单片机原理及接口技术实验.北京:
北方交通大学出版社,2002
[9]刘湘涛.江世明.单片机原理与应用.北京:
电子工业出版社,2006
[10]黄正谨.综合电子设计与实践.东南大学出版社.2002
评语:
指导教师:
(签字)
年月日
附录