宿迁学院10微机课程设计点阵LED显示实验.docx
《宿迁学院10微机课程设计点阵LED显示实验.docx》由会员分享,可在线阅读,更多相关《宿迁学院10微机课程设计点阵LED显示实验.docx(23页珍藏版)》请在冰豆网上搜索。
宿迁学院10微机课程设计点阵LED显示实验
课程设计报告
课程设计名称:
微型计算机技术及应用
系:
三系
学生姓名:
班级:
学号:
成绩:
指导教师:
开课时间:
2012-2013学年1学期
点阵LED显示实验
一、设计题目
课设题目:
LED显示设计
二、主要内容
在课程设计时,1人一组,设计报告由学生独立完成,不得互相抄袭。
教师的主导作用主要在于指明设计思路,启发学生独立设计的思路,解答疑难问题和按设计进度进行阶段审查。
学生必须发挥自身学习的主动性和能动性,主动思考问题、分析问题和解决问题,而不应处处被动地依赖指导老师。
学生在设计中可以引用所需的参考资料,避免重复工作,加快设计进程,但必须和题目的要求相符合,保证设计的正确。
学生学会掌握和使用各种已有的技术资料,不能盲目地、机械地抄袭资料,必须具体分析,使设计质量和设计能力都获得提高。
学生要在老师的指导下制定好自己各环节的详细设计进程计划,按给定的时间计划保质保量的完成个阶段的设计任务。
设计中可边设计,边修改,软件设计与硬件设计可交替进行,问题答疑与调试和方案修改相结合,提高设计的效率,保证按时完成设计工作并交出合格的设计报告。
三、具体要求
要求:
①.从键盘输入数字(0~9);
②.从LED显示0~9。
四、实验原理
1.8×8LED双色点阵显示器及4x4键盘显示控制器
1.
点阵LED显示器是将许多LED类似矩阵一样排列在一起组成的显示器件,当微机输出的控制信号使得点阵中有些LED发光,有些不发光,即可显示特定的信息。
8x8点阵LED相当于8x8个发光二级管组成的列阵,对于共阳极LED来说,其中每一行共用一个阳极(列控制),每一列共用一个阴极(行控制),行控制和列控制满足正确的电平就可以使相应的发光管点亮。
编程使得8位数码管初始显示8279---1,然后在小键盘上每按一个键,8位数码管上显示出相应字符,按A键返回。
2.部分实验电路图
图1键盘显示电路图
图2LED显示电路
3.8255A芯片工作原理
8255A是一种可编程的I/O接口芯片,可以与MCS-51系统单片机以及外设直接相连,广泛用作外部并行I/O扩展接口。
①.8255A的内部结构
8255A内部由PA、PB、PC三个8位可编程双向I/O口,A组控制器和B组控制器,数据缓冲器及读写控制逻辑四部分电路组成。
8255A结构框图和引脚图如下:
②.8255A的引脚功能
数据总线(8条):
D0~D7,用于传送CPU和8255A间的数据、命令和状态字。
控制总线(6条):
RESET:
复位线,高电平有效。
/CS:
片选线,低电平有效。
/RD、/WR:
/RD为读命令线,/WR为写命令线,皆为低电平有效。
A0、A1:
地址输入线:
用于选中PA、PB、PC口和控制寄存器中哪一个工作。
③.8255A控制字和状态字
8255A有两个控制字:
方式控制字和C口置位/复位控制字。
用户通过程序可以把这两个控制字送到8255A的控制寄存器,以设定8255A的工作方式和C口各位状态。
方式控制字用于设定8255A三个端口工作于什么方式,是输入还是输出方式。
④.8255A的工作方式
8255A在使用前要写入一个方式控制字,选择A、B、C三个端口各自的工作方式,共有三种;
方式0:
基本的输入输出方式,即无须联络就可以直接进行的I/O方式。
其中A、B、C口的高四位或低四位可分别设置成输入或输出。
方式1:
选通I/O,此时接口和外围设备需联络信号进行协调,只有A口和B口可以工作在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0.
方式2:
双向I/O方式,只有A口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。
8255A是一个并行输入、输出器件,具有24个可编程设置的I/O口,包括3组8位的I/O为PA口、PB口、PC口,又可分为2组12位的I/O口:
A组包括A口及C口高4位,B组包括B口及C组的低4位。
A口可以设置为方式0、方式1、方式2,B口与C口只能设置为方式0或方式1.
4.8279芯片工作原理
8279是可编程的键盘、显示接口芯片。
它既具有按键处理功能,又具有自动显示功能,在单片机系统中应用很广泛。
8279内部有键盘FIFO(先进先出堆栈)/传感器,双重功能的8*8=64BRAM,键盘控制部分可控制8*8=64个按键或8*8阵列方式的传感器。
该芯片能自动消抖并具有双键锁定保护功能。
显示RAM容量为16*8,即显示器最大配置可达16位LED数码显示。
①.8279的内部结构及引脚功能
8279采用单±5V电源供电,40脚封装,其引脚图如下:
DB0~DB7:
双向数据总线,用来传送8279与CPU之间的数据和命令。
CLK:
时钟输入线,用以产生内部定时的时钟脉冲。
RESET:
复位输入线,8279复位后被置为字符显示左端输入,二键闭锁的触点回弹型式,程序时钟前置分频器被置为31,RESET信号为高电平有效。
CS:
片选输入线,低电平有效,单片机在CS端为低时可以对8279读/写操作。
A0:
缓冲器低位地址,当A0为高电平时,表示数据总线上为命令或状态,当为低电平时,表示数据总线上为数据。
RD:
读信号输入线,低电平有效,将缓冲器读出,数据送往外部总线。
WR:
写信号输入线,低电平有效,将缓立器读出,将数据从外部数据总线写入8279的缓冲器。
IRQ:
中断请求输出线,高电平有效,在键盘工作方式下,当FIFO/传感器RAM中有数据时,此中断线变为高电平,在FIFO/传感器RAM每次读出时,中断线就下降为低电平,若在RAM中还有信息,则此线重又变为高电平。
在传感器工作方式中,每当探测到传感器信号变化时,中断线就变为高电平。
SL0~SL3:
扫描线,用来扫描按键开关,传感器阵列和显示数字,这些可被编程或被译码。
RL0~RL7:
回送线,经过按键或传感器开关与扫描线联接,这些回送线内部设置有上拉电路,使之保持为高电平,只有当一个按闭合时,对应的返回线变为低电平;无按键闭合时,均保持高电平。
SHIFT:
换位功能,当有开关闭合时被拉为低电平,没有按下SHIFT开关时,SHIFT输入端保持高电平,在键盘扫描方式中,按键一闭合,按键位置和换位输入状态一起被存贮起来。
CNTL/STB:
当CNTL/STB开关闭合时将其拉到低电平,否则始终保持高电平,对于键盘输入方式,此线用作控制输入端,当键被按下时,按键位置就和控制输入状态一起被存贮起来,在选通输入方式中,作选通用,把数据存入FIFORAM中。
OUTA3~OUTA0及OUTB3~OUTB0:
显示输出A口及B口,这两个口是16×4切换的数字显示。
这两个端口可被独立控制,也可看成一个8位端口。
BD:
空格显示,此输出端信号用于在数字转换时将显示空格或者用显示空格命令控制其显示空格字符。
VCC:
+5V电源输入线。
VSS:
地线输入线。
②.8279的编程方法
1.8279可按其功能分为:
键盘功能块;显示功能块;控制功能块;与CPU接口功能块控制功能块包括控制和定时寄存器,定时和控制,扫描计数器三部分,它主要用来控制键盘和显示功能块工作。
控制和定时寄存器:
用于存贮来自CPU的编程命令,CPU对8279编程以确定键盘与显示器工作方式和其它工作条件时,先把命令控制数据放到数据总线上,然后使A0=1,WR=0CS=0,并在WR上升沿把命令键存在控制和定时寄存器中,并经译码,建立适当的功能。
定时和控制:
它含基本的定时计数器,第一个计数器是一个分频系数为2-31的前置定时器,分频系数可由程序预置,使内部频率为100KHz,从而能给出5.1ms键盘扫描时间和10.3ms反跳时间,其它计数器将此基本频率分频后,提供适当的按键扫描.行扫描.键盘阵列扫描.以及显示器扫描次数。
扫描计数器:
扫描计数器有两种工作方式,在编码工作方式时,计数器提供一种二进制计数,通过管脚SL0-SL3输出后经外部译码才能提供给键盘和显示器的扫描作用,在译码工作方式时,扫描计数器对最低二位进行译码,SL0-SL3输出4选1的译码信号,作为显示器和键盘的译码扫描。
键盘功能块包括:
返回缓冲器,键盘反跳及控制,8x8FIFO传感器RAM,FIFO/传感器RAM状态.
2.返回缓冲器与键盘反跳及控制:
8条返回线被返回缓冲器缓冲,在键盘工作方式中,这几条线被逐个检测,以找出该行键中闭合的键,如果反跳电路测知某键闭合,则它等待10.3ms,然后重核此键是否仍然闭合,如果仍闭合,那么该键在矩阵中的行列地址以及SHIFT和CNTL的状态一起被送到FIFORAM中,其在FIFORAM中的数据格式如下:
D7D6D5D4D3D2D1D0
CNTLSHIFTSCANRETURN
3.显示功能块包括:
显示寄存器,16X8显示RAM,显示地址寄存器.
4.I/O接口功能块:
8279通过数据缓冲器与I/O控制,使8279与CPU系统总线接口,I/O控制部分用CS.A0.RD和WR四条线控制CPU与8279之间的数据交换,数据缓冲器是数据交换的双向通道,控制信号与数据交换间的逻辑关系见下表:
CSA0WRRD
10CPU从8279读状态
0101CPU向8279写状态
10CPU从8279读数据
001CPU向8279写数据
1XXX数据缓冲器输出呈三态
x为任意数(0或1)
五、
流程图
六、代码
datasegment
ioportEQU0c400h-0280h;端口始地址
PORT0EQUioport+2B0H;8279DATAPORT
PORT1EQUioport+2B1H;8279CTRLPORT
IO273EQUioport+280h;273端口地址
io8255aEQUioport+288h;8255端口A地址
io8255bEQUioport+289h;8255端口B地址
io8255cEQUioport+28ah;8255端口C地址
io8255ctrEQUioport+28bh;8255控制端口地址
TABDB000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB000h,000h,000h,03ch,000h,024h,000h,024h,000h,024h,000h,024h,000h,03ch,000h,000h
DB000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB000h,000h,000h,010h,000h,018h,000h,010h,000h,010h,000h,010h,000h,038h,000h,000h
DB000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB000h,000h,000h,018h,000h,024h,000h,020h,000h,010h,000h,008h,000h,03ch,000h,000h
DB000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB000h,000h,000h,018h,000h,024h,000h,010h,000h,020h,000h,024h,000h,018h,000h,000h
DB000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB000h,000h,000h,010h,000h,018h,000h,014h,000h,012h,000h,03eh,000h,010h,000h,010h
DB000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB000h,000h,000h,03ch,000h,004h,000h,004h,000h,01ch,000h,020h,000h,020h,000h,01ch
DB000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB000h,000h,000h,018h,000h,024h,000h,004h,000h,01ch,000h,024h,000h,024h,000h,018h
DB000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB000h,000h,000h,07ch,000h,040h,000h,020h,000h,010h,000h,010h,000h,010h,000h,010h
DB000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB000h,000h,000h,018h,000h,024h,000h,024h,000h,018h,000h,024h,000h,024h,000h,018h
DB000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB000h,000h,000h,018h,000h,024h,000h,024h,000h,038h,000h,020h,000h,024h,000h,018h
BUFERDB0h
SEC1DB8h;显示缓冲单元置显示初值8279-1
SEC2DB2h
SEC3DB7h
SEC4DB9h
SEC5DB12h
SEC6DB12h
SEC7DB12h
SEC8DB1h
LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;显示代码表
DB7FH,6FH,77H,7CH,39h,5EH,79h,71h
DB73H,3EH,40H
KEYDATADB23H,2BH,33H,3BH,22H,2AH,32H,3AH;键值表
DB21H,29H,31H,39H,20H,28H,30H,38H
KEYSDB0FFH
dataends
stackssegment
db100dup(?
)
stacksends
codesegment
assumecs:
code,ds:
data,ss:
stacks,es:
data
start:
CLI
MOVAX,DATA
MOVDS,AX
MOVDX,io8255ctr
MOVAL,80H
OUTDX,AL
MOVDX,PORT1
MOVAL,00H
OUTDX,AL;设置8279方式字
MOVAL,2AH
OUTDX,AL;设置分频系数
MOVAL,0d0h
OUTDX,AL;清显示
MOVAL,90h
OUTDX,AL;设置从左边开始写入数据
TEST1:
INAL,DX;判断8279工作是否正常
ANDAL,80H
JNZTEST1
KEY1:
CALLKEY;调用键盘显示子程序
LP0:
MOVCX,08H
MOVSI,OFFSETSEC1
LP2:
MOV[SI],BH;键号存入显示缓冲单元
INCSI
LOOPLP2
CMPBH,0AH;判断是否为'A'
JLLP1
MOVAX,4C00H;返回
INT21H
LP1:
MOVDI,OFFSETKEYS
MOV[DI],BH
MOVAH,KEYS
CMPAH,0FFH
JZKEY1
CALLOFFLED
MOVSI,0H
STR1:
MOVAL,20H
MOVBL,AH
MULBL
ADDSI,AX
CALLDEL1
CALLDELAY0
JMPKEY1
DISPW0PROCNEAR
PUSHCX
MOVAL,0FFH;关行H[7:
15]
MOVDX,IO273
OUTDX,AL
MOVAH,0feH;显示上半个字
MOVBX,IO8255a
CLC
CALLDISPW1
MOVAL,0FFH;关行H[0:
7]
MOVDX,IO8255A
OUTDX,AL
MOVAH,0feh;显示下半个字
MOVBX,IO273
CLC
CALLDISPW1
MOVAL,0FFH
MOVDX,IO273
OUTDX,AL
POPCX
RET
DISPW0ENDP
DISPW1PROCNEAR
MOVCX,08H
DAT1:
MOVDX,BX
MOVAL,AH
OUTDX,AL
MOVAL,TAB[SI]
MOVDX,io8255B
OUTDX,AL
INCSI
MOVAL,TAB[SI]
MOVDX,IO8255C
OUTDX,AL
CALLDELAY0
CALLOFFLED
INCSI
ROLAH,01H
LOOPDAT1
RET
DISPW1ENDP
DEL1PROCNEAR
MOVCX,12H;设置每个字符显示时间间隔参数
DEL2:
PUSHCX
DEL3:
PUSHCX
DEL4:
PUSHSI
CALLDISPW0;调用显示子程序
POPSI
LOOPDEL4
POPCX
LOOPDEL3
POPCX
LOOPDEL2
RET
DEL1ENDP
KEYPROCNEAR
MOVDX,PORT1
MOVAL,0d0h
OUTDX,AL;清显示
WREP:
CALLDISP
MOVDX,PORT1
INAL,DX
ANDAL,07H
JZWREP
MOVDX,PORT0
INAL,DX
MOVBL,AL
MOVBH,0H
MOVSI,OFFSETKEYDATA
KEY0:
MOVAL,[SI]
CMPAL,BL
JNEKEY5
JMPKEY4
KEY5:
ADDSI,01H
ADDBH,01H
CMPBH,10H
JNEKEY0
JMPKEY4
KEY4:
MOVBUFER,0H
RET
KEYENDP
DISPPROCNEAR
DISP0:
MOVDX,PORT1
INAL,DX
ANDAL,80H
JNZDISP0
MOVSI,OFFSETSEC1
MOVCX,8H
DISP1:
MOVBX,OFFSETLED
CLD
LODSB
XLAT
MOVDX,PORT0
OUTDX,AL
LOOPDISP1
RET
DISPENDP
DELAY0PROCNEAR;软件延时子程序
PUSHCX
MOVCX,20H
DELAY:
PUSHCX
DELA2:
PUSHCX
DELA3:
LOOPDELA3
POPCX
LOOPDELA2
POPCX
LOOPDELAY
POPCX
RET
DELAY0ENDP
OFFLEDPROCNEAR
MOVDX,io8255B
MOVAL,0H
OUTDX,AL
MOVDX,io8255C
OUTDX,AL
RET
OFFLEDENDP
JMPstart
codeends
endstart
七、调试结果及运行截图
1、代码调试结果如下:
2、实验连线图
3、实验结果截图
图1显示0图2显示1
图3显示2图4显示3
图5显示4图6显示5
图7显示6图8显示7
图9显示8图10显示9
八、总结及感想
本次课程设计的主要功能是实现从小键盘输入数字0~9并将其用8×8双色LED点阵显示出来,在本次试验中遇到的主要问题是在使用LED灯的过程中,有的时候直接使用LED没有反应,需要先插在“绿选”上,然后插在行选上,才有正确的结果,这可能与程序中的一些程序状态字相关,也有可能是其他原因,总的来说对于程序的运行影响不大。
通过本次课程设计,我学习了8279芯片以及8255A芯片的基本功能及编程方法,掌握了一般键盘和显示电路的工作原理,进一步掌握定时器的使用和中断处理程序的编程方法,理解串行接口键盘单片机汇编语言程序的基本结构,了解单片机汇编语言程序的设计和调试方法,掌握几个的基本的传送类、控制类指令的使用方法,学习了延时子程序的编写和使用,对汇编语言的代码书写与应用有了更加深刻的了解,对定时器、矩阵键盘查询、LED等相关知识更加的熟悉,懂得如何把所学的知识点串联起来运用,更懂得如何去思考。
虽然也遇到各种各样的问题,但在老师以及同学的帮助下,总算是达到了预期的效果。