8×8点阵数字滚动显示_精品文档.doc
《8×8点阵数字滚动显示_精品文档.doc》由会员分享,可在线阅读,更多相关《8×8点阵数字滚动显示_精品文档.doc(6页珍藏版)》请在冰豆网上搜索。
项目一8×8点阵数字滚动显示
LED点阵的元件符号及内部结构图:
对应编码:
00H,00H,00H,00H,00H,00H,00H,00H ;NULL
00H,00H,3EH,41H,41H,41H,3EH,00H ;0
00H,00H,00H,00H,21H,7FH,01H,00H ;1
00H,00H,27H,45H,45H,45H,39H,00H ;2
00H,00H,22H,49H,49H,49H,36H,00H ;3
00H,00H,0CH,14H,24H,7FH,04H,00H ;4
00H,00H,72H,51H,51H,51H,4EH,00H ;5
00H,00H,3EH,49H,49H,49H,26H,00H ;6
00H,00H,40H,40H,40H,4FH,70H,00H ;7
00H,00H,36H,49H,49H,49H,36H,00H ;8
00H,00H,32H,49H,49H,49H,3EH,00H ;9
00H,00H,00H,00H,00H,00H,00H,00H ;NULL
硬件设计原理:
单片机利用外部晶振作为时钟信号输入,RST端口接入上电复位信号使它加电后自动进行复位操作。
将要显示的字符码表编入单片机的程序中,由单片机控制时序输出相应的扫描数据和字符数据。
行码数据由单片机P0口输出,经一个双向总线收发器控制传输方向后进入LED点阵,点亮相应的发光二极管。
列码扫描信号由P3口输出后,直接输入LED点阵控制8列的扫描,每列选通时间为5ms,看上去就像8列同时显示的效果一样。
加上行中相应的LED灯被点亮,就能看到显示的字符了。
三、源程序代码:
R_CNTEQU31H ;列码R_NCT=31H单元
NUMBEQU32H ;行码NUMB=32H单元
TCOUNTEQU33H ;拉幕计数值TCOUNT=33H单元
ORG00H ;程序起始地址
LJMPSTART
ORG0BH ;中断入口地址
LJMPINT_T0
ORG30H ;子程序入口地址
START:
;主程序开始
MOVR0,#00H ;每列的行码起始序号置0
MOVR_CNT,#00H ;列:
初值00送到31H单元
MOVNUMB,#00H ;行:
初值00送到32H单元
MOVTCOUNT,#00H ;计数单元初值置0
MOVTMOD,#01H ;计数定时器选用16位的计数器,工作在方式1
MOVTH0,#(65536-5000)/256 ;定时5ms。
定时器高位初值为236
MOVTL0,#(65536-5000)MOD256 ;定时器低位初值为120
SETBTR0 ;启动C/T的定时器T0
MOVIE,#82H ;CPU开中断
SJMP$ ;中断等待
INT_T0:
MOVTH0,#(65536-5000)/256 ;定时5ms,设置定时器T0高位初值为236
MOVTL0,#(65536-5000)/256 ;定时器T0低位初值为120
MOVDPTR,#TAB ;读列码表首地址,放入DPTR
MOVA,R_CNT ;读列码偏移地址,放入A中
MOVCA,@A+DPTR ;基址变址寻址将寻到的列码数据放入A中
MOVP3,A ;将列码数据送P3口输出
MOVDPTR,#NUB ;装入显示数据的地址
MOVA,NUMB ;显示幕次的偏移地址
MOVCA,@A+DPTR ;寻到数据的行码地址
MOVP0,A ;将该地址值输出
INCNUMB ;行码地址加1
NEXT1:
INCR_CNT ;扫描列码地址加1
MOVA,R_CNT ;把列地址放入A中
CJNEA,#8,NEXT2 ;A不等于8,转子程序NEXT2,否则往下执行
MOVR_CNT,#00H ;就把列码置0
MOVNUMB,R0 ;行码地址送存储单元格中
NEXT2:
INCTCOUNT ;拉幕计数序号加1
MOVA,TCOUNT ;将幕次序号送A中
CJNEA,#40,NEXT4 ;此序号不等于40转Next4,否则往下执行
MOVTCOUNT,#00H ;把拉幕时序归0
INCR0 ;行码起始地址加1
CJNER0,#88,NEXT3 ;行码自加次数不满11字符×8行/字符=88行就转Next3
MOVR0,#00H ;不然就把行码置0
NEXT3:
MOVNUMB,R0 ;送新的一幕行码起始位给R0
NEXT4:
RETI ;中断返回
TAB:
;列码码表
DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH ;列扫描从右向左
NUB:
;行码码表,字符数据
DB00H,00H,00H,00H,00H,00H,00H,00H ;NULL
DB00H,00H,3EH,41H,41H,41H,3EH,00H ;0
DB00H,00H,00H,00H,21H,7FH,01H,00H ;1
DB00H,00H,27H,45H,45H,45H,39H,00H ;2
DB00H,00H,22H,49H,49H,49H,36H,00H ;3
DB00H,00H,0CH,14H,24H,7FH,04H,00H ;4
DB00H,00H,72H,51H,51H,51H,4EH,00H ;5
DB00H,00H,3EH,49H,49H,49H,26H,00H ;6
DB00H,00H,40H,40H,40H,4FH,70H,00H ;7
DB00H,00H,36H,49H,49H,49H,36H,00H ;8
DB00H,00H,32H,49H,49H,49H,3EH,00H ;9
DB00H,00H,00H,00H,00H,00H,00H,00H ;NULL
END ;结束汇编
开始
程序流图:
初始化端口
设定扫描时间
拉幕时序清0
取列扫描地址
取行数据地址
数据输出
Yes
幕次数计满?
No
幕次数加1
送新的行码地址
项目一8×8点阵数字滚动显示
一、设计要求
本次设计采用单片机AT89C51驱动8×8点阵LED显示屏,轮流显示0~9的数字。
显示方式采用自左向左拉幕式显示。
二、硬件电路介绍
1.AT89C51单片机:
P0口:
P0口为一个8位漏级开路双向I/O口。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0口能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,当P2口被写“1”时,其管脚被内部上拉电阻拉高,P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输出,由于外部下拉为低电平,它将输出电流。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
AT89C51单片机的外形及引脚排列说明如后页图示。
AT89C51单片机的外形及引脚排列如右图。
2.74LS373芯片:
当三态允许控制端OE为低电平时,O0~O7为正常逻辑状态,可用来驱动负载或总线。
当OE为高电平时,O0~O7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。
当锁存允许端LE为高电平时,O随数据D而变。
当LE为低电平时,O被锁存在已建立的数据电平.
D0~D7数据输入端 OE三态允许控制端(低电平有效) LE锁存允许端 O0~O7输出端
3.respack-8器件:
排阻器件,起上拉电阻的作用。
4.8×8LED点阵
8×8LED点阵可作为信息输出器件。
它是由发光二极管阵列按8排8列的方式排列起来,由x和y引脚输入的电信号对其进行选通,使不同位置的二极管被点亮,相应地显示出文字或图案等信息来。
四、硬件设计仿真:
五、设计调试过程及问题
在PC机上运行Proteus软件,将电路原理图中的元件找出并相应地连接好线;在Keil汇编软件中输入设计的程序,编译通过后生成十六进制文件,并再把该文件下载到虚拟的AT89C51单片机内。
因为单片机的RST引脚经电容接到了Vcc电源上,同时并联接地,所以系统可以上电后自动执行一次复位操作。
问题一第一次连接硬件电路,由于没有接74LS373双向总线收发器,所以在LED点阵和单片机I/O口之间就直接连接了,结果LED显示屏无法显示单片机输出的结果,所有的LED灯都不亮。
看来直接跳线时单片机I/O口输出的信号不足以驱动8乘8点阵工作。
当8051单片机的P0口输出八位低地址时,必须接入74LS373作地址锁存器。
问题二仿真时会看到LED点阵中有字显示的地方(前景)灯是灭的,无字显示的地方(背景)灯是亮的,这出现“阴文”显示状态。
产生这种显示的原因是因为8×8点阵LED引脚接反了,应该正端接P3,负端接P0。
即可看到正确的“阳文”方式显示出的数字。
问题三仿真时出现数字是反着的,产生这种显示的原因是因为点阵的列码扫描信号线A~H与单片机的P3.0~P3.7口相应的顺序接反了,把对应的接线顺序倒过来,才正确。