kl800.com省心范文网

基于AT89C51单片机的16x16点阵LED显示器设计

单片机课程设计报告书
设计题目:
基于AT89C51单片机的16*16点阵LED显示器设计
姓 名: 院 系: 专 业: 学 号: 指导教师: 教师职称:
2012 年 11 月 25 日

目录
摘要 ………………………………………………………………………………1 第 1 章 引言 ………………………………………………………………………1 1.1 LED 及 LED 显示屏 ……………………………………………………………1 1.2 功能要求 ………………………………………………………………………2 1.3 方案论证 ………………………………………………………………………2 第 2 章 系统总体方案及硬件设计 ………………………………………………3 2.1 AT89C51 的原理及说明 …………………………………………………………3 2.2 显示屏总体设计方案 …………………………………………………………3 2.3 列驱动电路 ……………………………………………………………………4 2.4 行驱动部分 ……………………………………………………………………4 第 3 章 系统硬件电路的设计 …………………………………………………8 3.1 单片机系统及外围电路 ………………………………………………………8 3.2 列驱动电路 ……………………………………………………………………8 3.3 行驱动电路 ……………………………………………………………………9 第 4 章 系统程序的设计 ………………………………………………………10 4.1 显示驱动程序 …………………………………………………………………10 4.2 系统主程序 ……………………………………………………………………11 4.3 单片机汇编程序 …………………………………………………………………11 第 5 章 系统调试 ………………………………………………………………22 第 6 章 设计心得 ………………………………………………………………22 参考文献 ………………………………………………………………………22 附录 ………………………………………………………………………… 23
1

摘要:本设计使用简单单片机AT89C51作为主控制模块,利用简单的外围电路来驱动16×16 的点阵LED显示屏。在本设计中主要用两个74HC595来驱动16×16点阵显示屏的列,用AT89C51 来驱动16×16点阵显示屏的行,可以最终实现——“十六乘十六点阵可调速显示屏设计” 十 五个汉字的自动左移,而且它们的“进”和“出”是以滚动形式设计的。也就是说,硬件电 路大致上可以分成单片机系统及外围电路、列驱动电路和行驱动电路三部分。从而可以实现 一个室内用的16×16点阵LED图文显示屏,在目测条件下LED显示屏各点亮度均匀、充足,可 显示图形和文字,显示图形或文字应稳定、清晰无串扰,图形或文字显示有静止、移入移出 等显示方式。最后,利用烧录器可以很方便的实现单片机与PC机等外围存储设备的数据传输, 并能利用软件方便的进行显示内容的多样变化,另一方面,LED点阵显示屏作为一种新兴的 显示器件,是由多个独立的LED发光二极管封装而成。进行了单片机AT89C51的软件仿真并成 功完成了仿真验证。结果表明包括系统具体的硬件设计方案,软件流程图和部分C语言程序等 方面。具有在负载范围内, 只需通过简单的级连就可以对显示屏进行扩展,是一种成本低廉 的图文显示方案意义。它在实际生活中具有广泛的应用。
关键词:单片机、16*16点阵、滚动显示
第1章 引言
1.1 LED 及 LED 显示屏
LED显示屏显示画面色彩鲜艳,立体感强,静如油画,动如电影,广泛应用于车站、码 头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它 公共场所。在实际应用中的显示屏由于成本和可靠性的因素常采用一种称为动态扫描的显示 方法。LED 就是Light Emitting Diode(发光二极管)的缩写。在某些半导体材料的PN结中, 注入的少数载流子与多数载流子复合时会把多余的能量以光的形式释放出来,从而把电能直 接转换为光能。PN结加反向电压,少数载流子难以注入,故不发光。这种利用注入式电致发 光原理制作的二极管叫发光二极管,通称LED。LED显示屏是一种通过控制半导体发光二极管 的显示方式,用来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示 屏幕。
LED显示屏分为图文显示屏和视频显示屏,均由LED矩阵块组成。图文显示屏可与计算机 同步显示汉字、英文文本和图形;视频显示屏采用微型计算机进行控制,图文、图像并茂, 以实时、同步、清晰的信息传播方式播放各种信息,还可显示二维、三维动画、录像、电视、 VCD节目以及现场实况。LED显示屏显示画面色彩鲜艳,立体感强,静如油画,动如电影,广 泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工
2

业企业管理和其它公共场所。 它的优点:亮度高、工作电压低、功耗小、微型化、易与集成电路匹配、驱动简单、寿
命长、耐冲击、性能稳定。
1.2 功能要求
设计一个室内用16×16点阵LED图文显示屏,要求在目测条件下LED显示屏各点亮度均 匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰,图形或文字显示有静 止、移入移出等显示方式。
1.3 方案论证
16×16的点阵显示屏共有256个发光二极管,显然单片机没有这么多端口,如果我们采 用锁存器来扩展端口,按8位的锁存器来计算,16×16的点阵需要256/8=32个锁存器。这个 数字很庞大,因为我们仅仅是16×16的点阵,在实际应用中的显示屏往往要大的多,这样在 锁存器上花的成本将是一个很庞大的数字。因此在实际应用中的显示屏几乎都不采用这种设 计,而采用另一种称为动态扫描的显示方法。
动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如 16行)的同名列共用一套列驱动器。具体就16×16的点阵来说,我们把所有同一行的发光管 的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第一 行发光管亮灭的数据并锁存,然后选通第一行使其燃亮一定的时间,然后熄灭;再送出第二 行的数据并锁存,然后选通第二行使其燃亮相同的时间,然后熄灭;…… 第十六行之后又 重新燃亮第一行,这样反复轮回。当这样轮回的速度足够快(每秒24次以上),由于人眼的 视觉暂留现象,我们就能看到显示屏上稳定的图形了。
采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器, 在硬件方面无疑是十分经济的。但是,串行传输过程较长,数据按顺序一位一位地输出给列 驱动器,只有当一行的各列数据都已传输到位之后,这一行的各列才能并行地进行显示。这 样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两个部分。对于串 行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下,留给行显示的 时间就太少了,以至影响到LED的亮度。
解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。 即在显示本行各列数据的同时,传送下一行的列数据。为了达到重叠处理的目的,列数据的 显示就需要具有锁存功能。经过上述分析,可以归纳出列驱动器电路应具备的主要功能。对 于列数据准备来说,它应能实现串入并出的移位功能;对于列数据显示来说,应具有并行锁 存的功能。这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以 准备下一行的列数据,而不会影响本行的显示。
第 2 章 系统总体方案及硬件设计
3

2.1 AT89C51 的原理及说明
AT89C51 是美国 Intel 公司生产的低电压,高性能 CHMOS8 位单片机,片内含 4k bytes 的可反复擦写的只读程序存储器(PEROM)和蔼可亲 128 bytes 的随机存取数据存储器(RAM), 器件采用 Intel 公司的高密度、非易失性存储技术生产,片内置通用 4 位中央处理器(CPU) 和 Flash 存储单元,功能强大 AT89C51 单片机适合于许多较为复杂控制应用场合。

AT89C51 引脚图

2.2 显示屏总体设计方案
单 片 机

列驱动器







LED 显示点阵



2.3 列驱动电路
列驱动电路有集成电路74HC595构成。它具有一个8位串入并出的移位寄存器和一个8位 输出锁存器的结构,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本 行列数据的同时,传送下一行的列数据,既达到重叠处理的目的。
4

74HC595的外形及内部结构如图所示。它的输入侧有8个串行移位寄存器,每个移位寄存 器的输出都连接一个输出锁存器。引脚SI是串行数据的输入端。引脚SCK是移位寄存器的移 位时钟脉冲,在其上升沿发生移位,并将SI的下一个数据打入最低位。移位后的各位信号出 现在各移位寄存器的输出端,也就是输出锁存器的输入端。RCK是输出锁存器的打入信号, 其上升沿将移位寄存器的输出打入输出锁存器。引脚G是输出三态门的开放信号,只有当其 为低时锁存器的输出才开放,否则为高组态。SCLR信号是移位寄存器清零输入端,当其为低 时移位寄存器的输出全部为零。由于SCK和RCK两个信号是互相独立的,所以能够做到输入串 行移位与输出锁存互不干扰。芯片的输出端为QA~QH,最高位QH可作为多片74HC595级联应 用时,向上一级的级联输出。但因为QH受输出锁存器的打入控制,所以还从输出锁存器前引 出QH,作为与移位寄存器完全同步的级联输出。
2.4 行驱动器
由于4点阵显示器有16行,为充分利用单片机的接口,本电路中运用了单片机AT89C51的 P1口和P2口,其输入是一个16进制码,解码输出为低态扫描信号,单片机P1口和P2口输出生 产16条行选通讯信号线,再经过驱动器驱动对应的线。
5

74LS241
三态八缓冲器/线驱动器/线接收器(3S,两组控制)

简要说明: 241 为三态输出的八组缓冲器和总线驱动器,其主要电器特性的典型值如下
(不同厂家具体值有差别):

型号

tPLH

54LS241/74LS241

12ns

tphl 12ns

PD 110mW

引出端符号:

1A1~1A4,2A1~2A4

输入端

/1G, /2G

三态允许端(低电平有效)

1Y1~1Y4,2Y1~2Y4

输出端

逻辑图:

6

双列直插封装
极限值: 电源电压 …………………………………………. 7V 输入电压 …………………………………………. 5.5V 输出高阻态时高电平电压 …………………………. 5.5V 工作环境温度 54XXX …………………………………. -55~125℃ 74XXX …………………………………. 0~70℃ 存储温度 …………………………………………. -65~150℃
功能表:

推荐工作条件:

电源电压 Vcc

54 74

输入高电平电 ViH

输入低电平电 ViL

54 74

输出高电平电流 54

IOH

74

54LS244/74LS244 最小 额定 最大

4.5

5

5.5

4.75

5

5.25

2

0.7

0.8

-12

-15

单位
V V V mA

7

输出低电平电流 54

IOL

74

12

24

mA

动态特性(TA=25℃)





tPLH 输出由低到高传输延迟时间 tPHL 输出由高到低传输延迟时间 tPZH 输出由高阻态到高允许时间 tPZL 输出由高阻态到低允许时间 tPHZ 输出由高到高阻态禁止时间 tPLZ 输出由低到高阻态禁止时间

测试条件
Vcc =5V CL=45pF RL=667 Ω
Vcc=5V CL=5pF RL=90 Ω

静态特性(TA 为工作环境温度范围)

LS244 最大
18 18 23 30 18 25

单位
ns ns ns ns ns ns





测 试 条 件【1】

VIK 输入嵌位电压 △VT 滞后电压
VOH 输出高电平电压

VOL 输出低电平电压

II 最大输入电压时输 出电流
IIH 输入高电平电流

IIL 输入低电 平电流

1A,2A

Vcc=最小,Iik=-18mA

Vcc=最小

Vcc=最小,VIL=最大,VIH=2V, IOH=-3mA

Vcc=最小,VIL=最大, 54

IOL=最大

74

Vcc=最大,VI=7V

Vcc=最大,VIH=2.7V

Vcc=最大,VIL=0.4V

IOS 输出短路电流 IOZH 输出高阻态时高
电平电流 IOZL 输出高阻态时低
电平电流
Icc 电源电流

Vcc=最大
Vcc=最大,VIH=2V VIL=最大,VO=2.7V Vcc=最大,VIH=2V,VIL=最大
,VO=0.4V

1Y,2Y 均为高电平

Vcc= 最大

1Y,2Y 均为低电平

1Y,2Y 均为高阻态

LS244 最小 最大
-1.5 0.2

单位
V V

2.4

V

0.4

V

0.5

0.1 mA

20 uA

-0.2 mA

-40 -225 mA 20 uA

-20 uA

27 46 mA 54

测试条件中的“最小”和“最大”用推荐工作条件中的相应值。

8

第 3 章 系统硬件电路的设计
硬件电路大致上可以分成单片机系统及外围电路、列驱动电路和行驱动电路三部分。
3.1AT89C51 单片机
AT89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器,(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能 CMOS8 位微处理器。
(1)AT89C51 引脚图如图所:
AT89C51 单片机引脚图 (2)AT89C51 单片机 P 口的特点: P0 口:P0 口为一个 8 位漏级开路双向 I/O 口,每脚可吸收 8TTL 门电流。当 P1 口的管脚第 一次写 1 时,被定义为高阻输入。P0 能够用于外部程序数据存储器,它可以被定义为数据/ 地址的第八位。在 FIASH 编程时,P0 口作为原码输入口,当 FIASH 进行校验时,P0 输出 原码,此时 P0 外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。 P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电 流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流, 当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的 管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或 16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用 内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的 内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写 入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3 口将输出电流(ILL)这是由于上拉的缘故。
3.2单片机系统及外围电路
单片机采用89C51或其兼容系列的芯片,采用24M或更高频率的晶振,以获得较高的刷新 频率,使显示更稳定。单片机的串口与列驱动器相连,用来送显示数据。P1口与P2口为行驱
9

动器,送出行信号;P3.5~P3.7口则用来发送控制信号。P0口空着,在有必要时可以扩展系 统的ROM和RAM。16×16点阵显示屏的硬件原理图如图3-1
图 3-1 16×16 点阵显示屏硬件原理图
3.3列驱动电路
列驱动电路由集成电路74HC595构成,它具有一个8位串入并出的移位寄存器和一个8位 输出锁存器的结构,而且移位寄存器和输出锁存器的控制是各自独立的,可以实现在显示本 行各列数据的同时,传送下一行的列数据,即达到重叠处理的目的。
74HC595的外形及内部结构如图7.3所示。它的输入侧有8个串行移位寄存器,每个移位 寄存器的输出都连接一个输出锁存器。引脚SI是串行数据的输入端。引脚SCK是移位寄存器 的移位时钟脉冲,在其上升沿发生移位,并将SI的下一个数据打入最低位。移位后的各位信 号出现在各移位寄存器的输出端,也就是输出锁存器的输入端。RCK是输出锁存器的打入信 号,其上升沿将移位寄存器的输出打入到输出锁存器。引脚G是输出三态门的开放信号,只 有当其为低时锁存器的输出才开放,否则为高阻态。SCLR信号是移位寄存器的清零输入端, 当其为低时移位寄存器的输出全部为零。由于SCK和RCK两个信号是互相独立的,所以能够做 到输入串行移位与输出锁存互不干扰。芯片的输出端为QA~QH,最高位QH可作为多片74HC595 级联应用时,向上一级的级联输出。但因QH受输出锁存器打入控制,所以还从输出锁存器前 引出了QH’,作为与移位寄存器完全同步的级联输出。
10

3.4行驱动电路

图 3-2 74HC595 外形及内部逻辑结构图

单片机P1口与P2口为行驱动器,送出行信号;P3.5~P3.7口则用来发送控制信号。74LS154 译码后生成16条行选通信号线,一条行线上要带动16列的LED进行显示。

第 4 章 系统程序的设计

显示屏软件的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的 要求显示。根据软件分层次设计的原理,我们可把显示屏的软件系统分成两大层:第一层是 底层的显示驱动程序,第二层是上层的系统应用程序。显示驱动程序负责向屏体送显示数据, 并负责产生行扫描信号和其它控制信号,配合完成LED显示屏的扫描显示工作。显示驱动程 序由定时器T0中断程序实现。系统应用程序完成系统环境设置(初始化)、显示效果处理等 工作,由主程序来实现。
从有利于实现较复杂的算法(显示效果处理)和有利于程序结构化考虑,显示屏程序适 宜采用C语言编写。
4.1显示驱动程序

刷新率(帧频)? 1 16

? T0溢出率

?1 16

?

f osc

12(65536

? t0 )

显示驱动程序在进入中断后首先要对定时器T0重新赋初值以保证显示屏刷新率的稳定,

1/16扫描的显示屏的刷新率(帧频)的计算公式如下:

其中fosc为晶振频率,t0为定时器T0初值(工作在16位定时器模式)。

然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通

过串口发送给移位寄存器。为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关

11

闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显 示。图4-1为显示驱动程序(显示屏扫描函数)流程图。

进入中断 定时器赋初值 读取行号并增 1 送新行显示数据
消隐 切换显示数据 送新行号、打开显示
退出中断 图 4-1 显示驱动程序流程图

开始 系统初始化
“滚动出”显示效果 “加速”显示效果 “减速”显示效果 “默认”显示效果
图 4-2 系统主程序流程图

4.2系统主程序
系统主程序开始以后首先是对系统环境初始化,包括设置串口、定时器、中断和端口。 然后以“滚动出”效果显示一个字,停留约3秒,接着向左滚动显示“十六乘十六点阵可调 速显示屏设计”十五个汉字,停留约3秒,再向左滚动显示“十六乘十六点阵可调速显示屏 设计”这十五个汉字,循环重复,由于单片机没有停机指令,所以我们可以设置系统程序不 断地循环执行上述显示效果。图4-2是系统主程序的流程图。

4.3 单片机汇编程序
#include <reg51.h>

12

sbit SET=P3^5; sbit ADD=P3^6; sbit SUB=P3^7; sbit LOCK=P3^2; sbit DAT=P3^0; sbit CLK=P3^1;
unsigned char cnt,cnt2,line,*p,*old,shift,t[4]; char speed,i;
bit sec,key_mark;
unsigned char code Matrix001[32]= { /*---转换字符 十 ---*/ 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01, 0x00, 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01, 0x00, };
unsigned char code Matrix002[32]= { /*---转换字符 六 ---*/ 0x02,0x00,0x01,0x00,0x00,0x80,0x00,0x80,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00, 0x00, 0x04,0x40,0x04,0x20,0x08,0x10,0x08,0x08,0x10,0x08,0x20,0x04,0x40,0x04,0x00, 0x00,
};
unsigned char code Matrix003[32]=
13

{ /*---转换字符 乘 ---*/ 0x00,0xF8,0x3F,0x00,0x01,0x00,0x7F,0xFC,0x01,0x00,0x09,0x24,0xF9,0x38,0x09, 0x22, 0x39,0x22,0xCB,0x9E,0x05,0x40,0x09,0x20,0x31,0x18,0xC1,0x06,0x01,0x00,0x01, 0x00, };
unsigned char code Matrix004[32]= { /*---转换字符 十 ---*/ 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01, 0x00, 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01, 0x00, };
unsigned char code Matrix005[32]= { /*---转换字符 六 ---*/ 0x02,0x00,0x01,0x00,0x00,0x80,0x00,0x80,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00, 0x00, 0x04,0x40,0x04,0x20,0x08,0x10,0x08,0x08,0x10,0x08,0x20,0x04,0x40,0x04,0x00, 0x00, };
unsigned char code Matrix006[32]= { /*---转换字符 点 ---*/ 0x02,0x00,0x02,0x00,0x02,0x00,0x03,0xFC,0x02,0x00,0x02,0x00,0x3F,0xF0,0x20, 0x10, 0x20,0x10,0x20,0x10,0x3F,0xF0,0x00,0x00,0x24,0x88,0x22,0x44,0x42,0x44,0x80, 0x04, };
14

unsigned char code Matrix007[32]= { /*---转换字符 阵 ---*/ 0x00,0x40,0x7C,0x40,0x44,0x40,0x4B,0xFE,0x48,0x80,0x50,0xA0,0x49,0x20,0x49, 0xFC, 0x44,0x20,0x44,0x20,0x44,0x20,0x6B,0xFE,0x50,0x20,0x40,0x20,0x40,0x20,0x40, 0x20, };
unsigned char code Matrix008[32]= { /*---转换字符 可 ---*/ 0x00,0x00,0x7F,0xFE,0x00,0x10,0x00,0x10,0x1F,0x10,0x11,0x10,0x11,0x10,0x11, 0x10, 0x11,0x10,0x11,0x10,0x1F,0x10,0x11,0x10,0x00,0x10,0x00,0x10,0x00,0x50,0x00, 0x20, };
unsigned char code Matrix009[32]= { /*---转换字符 调 ---*/ 0x00,0x00,0x47,0xFC,0x24,0x44,0x24,0x44,0x05,0xF4,0x04,0x44,0xE4,0x44,0x27, 0xFC, 0x24,0x04,0x25,0xF4,0x25,0x14,0x2D,0x14,0x35,0xF4,0x24,0x04,0x04,0x14,0x08, 0x08, };
unsigned char code Matrix010[32]= { /*---转换字符 速 ---*/ 0x00,0x40,0x20,0x40,0x17,0xFC,0x10,0x40,0x03,0xF8,0x02,0x48,0xF2,0x48,0x13, 0xF8, 0x10,0xE0,0x11,0x50,0x12,0x48,0x14,0x44,0x10,0x40,0x28,0x00,0x47,0xFE,0x00,
15

0x00, };
unsigned char code Matrix011[32]= { /*---转换字符 显 ---*/ 0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F, 0xF0, 0x04,0x40,0x44,0x44,0x24,0x44,0x14,0x48,0x14,0x50,0x04,0x40,0xFF,0xFE,0x00, 0x00, };
unsigned char code Matrix012[32]= { /*---转换字符 示 ---*/ 0x00,0x00,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x01, 0x00, 0x01,0x00,0x11,0x10,0x11,0x08,0x21,0x04,0x41,0x02,0x81,0x02,0x05,0x00,0x02, 0x00,
};
unsigned char code Matrix013[32]= { /*---转换字符 屏 ---*/ 0x00,0x00,0x3F,0xF8,0x20,0x08,0x20,0x08,0x3F,0xF8,0x24,0x10,0x22,0x20,0x2F, 0xF8, 0x22,0x20,0x22,0x20,0x3F,0xFC,0x22,0x20,0x42,0x20,0x44,0x20,0x84,0x20,0x08, 0x20, };
unsigned char code Matrix014[32]= { /*---转换字符 设 ---*/
16

0x00,0x00,0x21,0xF0,0x11,0x10,0x11,0x10,0x01,0x10,0x02,0x0E,0xF4,0x00,0x13, 0xF8,
0x11,0x08,0x11,0x10,0x10,0x90,0x14,0xA0,0x18,0x40,0x10,0xA0,0x03,0x18,0x0C, 0x06,
};
unsigned char code Matrix015[32]= { /*---转换字符 计 ---*/ 0x00,0x40,0x20,0x40,0x10,0x40,0x10,0x40,0x00,0x40,0x00,0x40,0xF7,0xFE,0x10, 0x40, 0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x40,0x14,0x40,0x18,0x40,0x10,0x40,0x00, 0x40, };
unsigned char code Matrix016[32]= { /*---转换字符 代 ---*/ 0x08,0x90,0x08,0x88,0x08,0x88,0x10,0x80,0x10,0xBE,0x37,0xC0,0x30,0x80,0x50, 0x40, 0x90,0x40,0x10,0x40,0x10,0x20,0x10,0x22,0x10,0x12,0x10,0x0A,0x10,0x06,0x10, 0x02, };
unsigned char code Matrix100[32]={0};
unsigned char code end;
void SendData(unsigned char *q) {
unsigned char i,t;
t=*q;
17

for(i=0;i<16;i++) { if(i==8)
t=*(q+1);
if(t&1) DAT=1; else DAT=0;
CLK=0; CLK=1;
t>>=1; } LOCK=0; LOCK=1;
}
void t0() interrupt 1 {
TH0=-50000>>8; TL0=-50000;
if(++cnt2>speed) {
cnt2=0; sec=1; } }
void t1() interrupt 3
18

{ TH1=-1000>>8;
TL1=-1000;
if(++cnt>=0) {
cnt=0;
if(++line>15) line=0;
P1=P2=0xff;
t[0]=*(p+(line<<1)); t[1]=*(p+1+(line<<1)); t[2]=*(p+32+(line<<1)); t[3]=*(p+33+(line<<1));
if(shift<=7) {
t[0]=(t[0]<<shift)|(t[1]>>(8-shift)); t[1]=(t[1]<<shift)|(t[2]>>(8-shift)); } else { t[0]=(t[1]<<(shift-8))|(t[2]>>(16-shift)); t[1]=(t[2]<<(shift-8))|(t[3]>>(16-shift)); }
SendData(t);
if(line<8) P1=~(1<<line);
19

else P2=~(1<<(line-8));
} }
void delay() {
unsigned char i,j;
for(i=0;i<4;i++) for(j=0;j<100;j++) ;
}
void key() {
if(!SET) {
p=Matrix001; shift=0; } else if(!ADD) {
speed+=4; } else if(!SUB) {
speed-=4; if(speed<=1)
speed=1; } }
void init_t0()
20

{ TH0=-50000>>8;
TL0=-50000; TMOD|=0X01; IE|=0X82; }
void init_t1() {
TH1=-1000>>8; TL1=-1000; TMOD|=0X10; IE|=0X88; }
void delay500ms() {
char n;
IE=0X88; //DISABLE T0 INTERRUPT for(n=0;n<10;n++) {
TH0=-50000>>8; TL0=-50000; while(!TF0);
TF0=0; } IE=0X8A; }
main() {
21

p=Matrix001;
init_t0(); init_t1();
speed=1;
TR0=TR1=1; delay500ms();
while(1) {
if((!SET || !ADD || !SUB) && !key_mark) {
delay(); if(!SET || !ADD || !SUB) {
key(); key_mark=1; }
} else if(SET && ADD && SUB )
key_mark=0;
if(sec) {
sec=0;
shift++; if(shift>=16) //移动一次 {
22

shift=0; p+=32;
if(p>=&end-32) p=Matrix001;
delay500ms(); } } } }
第 5 章 系统调试
硬件调试
打开 Proteus 7.5 Professional 软件,按照方案所选的电路元件来设计整体电路,线把个 芯片按一定的位置放好,然后对相应的对象进行连接,连接时需仔细,以免调试时发生错误。 做好之后把编程所生成的。HEX 文件加载到 AT89C51 中,运行仿真软件,查看运行效果。 如果运行出错那么就根据他相应的提示来修改错误,直到仿真成功为止。
打开 Topwin 软件,装载 CLOCKJT.HEX,通过编程器将该文件烧写入 AT89C51 中。将 AT89C51 插入实验仪相应的插座上,在实验仪上按照电路原理图连线。打 开电源,观察数码管的变化。
第6章 设计心得
在此次课程设计中,让我巩固了单片机及以前所学的很多知识,使我从单纯 的理论学习上升到了实践应用学习这一环节。同时还用到了 C++编程,以前只是 在课堂上应用过,从来没有认真用它做过什么实在的东西。我们学东西就要学以 致用,在这里我深刻的感觉到理论和实践的差别性,学得好不一定做得好,但要 做得好就一定要学得好。通过两个星期的课程设计,我的理论知识和动手能力在 一定程度上都得到了提高,也学到很多新知识。此次实训主要是让我们进一步深 入理解单片机系统的工作原理,对接口电路的设计及调试方法;同时在实训中我 们设计的单片机仿真正常,但进过老师的讲解我们发现了一些不足,进过我组成 员思考讨论最终验证了老师讲解的问题,单片机的输出功耗太小无法带动 16*16 个 LED 灯所以在我组成员共同的努力下进行了深刻的反思,在以后的实验或实训 中要以理论为前提。理论联系实际,结合专业知识来分析解决问题;掌握用单片 机进行实际产品开发的基本过程,加强模块化设计思想的培养,增加对专业的兴 趣,从而为我们以后的工作打下基础。
23

【参考文献】
[1] 谢辉.单片机原理及应用. [M].北京:化学工业出版社 2010.5 [2] 李全利.单片机原理及接口技术. [M].北京:高等教育出版社,2009 [3] 苏家健.单片机原理及应用技术. [M].北京:高等教育出版社.2004.1 [4] 楼然苗.51 系列单片机设计实例. [M].北京:北京航空航天大学出版社,2003. [5] 赵晓安. MCS-51 单片机原理及应用. [M].天津:天津大学出版社,2001.3

1. 硬件原理图

附录

2. 元器件清单表

编号 1 2 3 4 5 6

名称 芯片 轻触开关 万能电路板 芯片座 芯片 LED 点阵显示器
芯片

型号 AT89C51
8脚 74HC595 8*8 74LS241

单位 片 只 块 块 块 块


数量 1 3 1 4 2 4
2

备注

24

25