项目一8×8点阵数字滚动显示LED点阵的元件符号及内部结构图:ﻩﻩ对应编码:00H, 00H, 00H,00H, 00H, 00H, 00H, 00H ﻩﻩ;NULLﻩ 00H, 00H, 3EH, 41H, 41H, 41H, 3EH, 00H ﻩﻩ; 000H, 00H, 00H, 00H, 21H, 7FH,01H,00H ;12ﻩ 00H, 00H, 27H, 45H, 45H, 45H,39H, 00Hﻩﻩ;;300H, 00H, 22H,49H, 49H, 49H, 36H, 00H ﻩﻩﻩ00H, 00H, 0CH, 14H, 24H, 7FH, 04H,00H ﻩ; 45;ﻩ 00H, 00H, 72H, 51H, 51H, 51H, 4EH, 00H ﻩﻩﻩ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_CNT EQU 31Hﻩﻩ;列码R_NCT=31H单元NUMB EQU 32Hﻩ;行码NUMB=32H单元TCOUNT EQU 33Hﻩ;拉幕计数值TCOUNT=33H单元ﻩORG 00Hﻩﻩ;程序起始地址LJMP STARTﻩORG 0BHﻩﻩ;中断入口地址ﻩLJMP INT_T0ﻩﻩORG 30Hﻩ;子程序入口地址START: ﻩﻩ;主程序开始ﻩMOV R0, #00H ﻩ;每列的行码起始序号置0ﻩMOV R_CNT, #00Hﻩ;列:初值00送到31H单元ﻩMOV NUMB, #00Hﻩﻩ;行:初值00送到32H单元ﻩMOV TCOUNT, #00Hﻩ;计数单元初值置0ﻩMOV TMOD, #01Hﻩﻩ;计数定时器选用16位的计数器,工作在方式1MOV TH0, #(65536-5000)/256ﻩﻩ;定时5ms。
定时器高位初值为236MOV TL0, #(65536-5000) MOD 256 ;定时器低位初值为120ﻩSETB TR0ﻩﻩ;启动C/T的定时器T0MOV IE, #82Hﻩ;CPU开中断SJMP $ ﻩﻩﻩ;中断等待I NT_T0: ﻩﻩMOV TH0, #(65536-5000)/256 ﻩ;定时5ms,设置定时器T0高位初值为236ﻩMOV TL0, #(65536-5000)/256ﻩﻩ;定时器T0低位初值为120ﻩMOV DPTR, #TABﻩﻩ;读列码表首地址,放入DPTRﻩMOV A, R_CNTﻩﻩ;读列码偏移地址,放入A中ﻩMOVCA, @A+DPTRﻩﻩ;基址变址寻址将寻到的列码数据放入A中ﻩMOV P3,A ﻩﻩﻩ;将列码数据送P3口输出ﻩMOV DPTR,#NUBﻩ;装入显示数据的地址ﻩMOV A, NUMBﻩﻩ;显示幕次的偏移地址ﻩMOVC A, @A+DPTRﻩﻩﻩ;寻到数据的行码地址MOV P0, A ﻩﻩ;将该地址值输出ﻩINC NUMBﻩﻩﻩ;行码地址加1NEXT1: ﻩﻩﻩﻩINC R_CNT ﻩﻩ;扫描列码地址加1MOV A, R_CNTﻩﻩ;把列地址放入A中ﻩCJNEA, #8, NEXT2ﻩ;A不等于8,转子程序NEXT2,否则往下执行ﻩMOVR_CNT, #00H;就把列码置0MOV NUMB, R0 ﻩ;行码地址送存储单元格中NEXT2:ﻩINC TCOUNT ﻩ;拉幕计数序号加1MOV A, TCOUNTﻩ;将幕次序号送A中ﻩCJNE A, #40, NEXT4ﻩ;此序号不等于40转Next4,否则往下执行MOV TCOUNT, #00H ﻩ;把拉幕时序归0ﻩINC R0 ﻩﻩﻩ;行码起始地址加1ﻩCJNE R0, #88, NEXT3;行码自加次数不满11字符×8行/字符=88行就转Next3ﻩMOV R0, #00Hﻩ;不然就把行码置0NEXT3:MOV NUMB,R0;送新的一幕行码起始位给R0NEXT4:RETIﻩﻩ;中断返回TAB: ﻩ;列码码表DB0FEH, 0FDH, 0FBH, 0F7H, 0EFH, 0DFH,0BFH,7FH ;列扫描从右向左NUB:ﻩ;行码码表,字符数据DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00Hﻩ;NULLDB 00H, 00H, 3EH, 41H, 41H, 41H, 3EH, 00H ﻩ; 01;DB 00H, 00H, 00H, 00H,21H, 7FH, 01H, 00H ﻩﻩDB 00H, 00H, 27H, 45H, 45H, 45H, 39H, 00H ; 23;ﻩDB 00H, 00H, 22H, 49H, 49H, 49H, 36H, 00H ﻩﻩDB 00H, 00H, 0CH, 14H, 24H, 7FH, 04H, 00H ; 4DB 00H, 00H, 72H, 51H, 51H, 51H,4EH, 00H ;5DB 00H, 00H, 3EH, 49H, 49H, 49H, 26H, 00Hﻩﻩ; 6ﻩDB00H, 00H, 40H, 40H, 40H, 4FH, 70H, 00H ;7ﻩDB 00H, 00H, 36H,49H, 49H, 49H, 36H, 00H ﻩ; 8ﻩDB00H, 00H, 32H, 49H, 49H,49H, 3EH, 00H ﻩ; 9DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H ﻩﻩ;NULLEND ﻩﻩ;结束汇编程序流图:项目一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脚两个机器周期的高电平时间。
A T89C51单片机的外形及引脚排列说明如后页图示。
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口相应的顺序接反了,把对应的接线顺序倒过来,才正确。