关于8x8点阵显示课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XXXX大学
课程设计报告
课题:基于AT89S51的8*8点阵设计
院系:电子工程系
专业:
班级:
姓名:
学号:
指导老师:
日期:
摘要
本文介绍了一款以单片机AT89S51为控制器的LED点阵显示屏系统的设计。

该系统可实现英文字符的显示和动态特效显示。

并且可以通过级连的方式来扩大显示屏幕的尺寸以达到增加显示内容的目的。

系统采用PC机作为上位机,上位机向单片机发送控制命令和上位机所存储的显示代码,AT89S51单片机接收并处理PC机的控制命令以及显示代码,由显示驱动模块驱动一个16×16分辨率的LED点阵显示屏的扫描显示。

PC机与单片机之间的通信采用RS—232C通信标准来实现。

所选用的AT89S51单片机具有价格低廉程序写入方便的特点使得整个系统方便维护和检修。

除此之外,该系统只占用了单片机少量的I /O口和内存,为系统留下了功能扩展的空间。

关键字:AT89S51;LED点阵显示;串行通信
Abstract
This paper introduces a design of the LED lattice display system base on MCU AT89S51. The system can display in both Chinese and English characters of the show and from top to bottom and move around the magic show. And can be cascaded to expand the screen size to achieve increased content purposes. The PC sends control commands and displays code to microcontroller, AT89S51 receives control commands from PC and shows the code, Driver module drives a 16×16-resolution LED lattice LED’s panel display scan showed. Communication between PC and the microcontroller using RS-232C communications standards. the characteristics that AT89S51 microcontroller is cheap and could be coded conveniently makes the whole system Convenient to Maintenance and Repair. In addition, the system will take up only a small amount of the
MCU I/O and memory,so that the system has functional space for expansion.
Key words: AT89S51, lattice LED’s panel display, serial communication
目录
引言 (5)
第一章系统基本原理及功能要求 (7)
1.1 系统基本原理 (7)
1.2 设计思想 (7)
1.3 功能要求 (8)
第二章硬件设计 (8)
2.1 单片机最小系统 (8)
2.1.1 AT89S51基本参数 (9)
2.1.2 复位电路 (11)
2.1.3 晶振电路 (12)
2.2 键盘调整单元 (12)
2.3 LED点阵显示单元 (13)
2.4 LED点阵驱动单元 (15)
第三章软件设计 (16)
3.1 点阵左移程序设计 (16)
3.2 点阵上移程序设计 (17)
3.3 点阵翻转程序设计 (17)
3.4 按键消抖及键盘程序设计 (18)
3.5 主程序设计流程图 (19)
3.6 全部程序 (20)
第四章安装及调试 (24)
4.1 元器件列表 (24)
4.2 调试中出现的问题及解决 (25)
心得体会及小结 (25)
谢词 (26)
附录 (27)
附录I 电路原理PCB图 (27)
附录II 电路仿真图 (28)
相关参考文献 (29)
引言
单片机技术的研究现状
我国开始使用单片机是在1982 年,短短五年时间里发展极为迅速。

1986 年在上海召开了全国首届单片机开发与应用交流会,有的地区还成立了单片微型计算机应用协会,那是全国形成的第一次高潮。

截止今日,单片机应用技术飞速发展,我们上因特网输入一个“单片机”的搜索,将会看到上万个介绍单片机的网站,这还不包括国外的。

在2003年7月,在上海、广州、北京等大城市所做的一次专业人才需求报告中,单片机人才的需求量位居第一。

一块小小的片子,为何有这样的魔力?
我们首先从它的构成说起:单片机,亦称单片微电脑或单片微型计算机。

它是把中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。

计算机的产生加快了人类改造世界的步伐,但是它毕竟体积大。

微计算机(单片机)在这种情况下诞生了,它为我们改变了什么?纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC 卡、电子宠物等,这些都离不开单片机。

以前没有单片机时,这些东西也能做,但是只能使用复杂的模拟电路,然而这样做出来的产品不仅体积大,而且成本高,并且由于长期使用,元器件不断老化,控制的精度自然也会达不到标准。

在单片机产生后,我们就将控制这些东西变为智能化了,我们只需要在单片机外围接一点简单的接口电路,核心部分只是由人为的写入程序来完成。

这样产品的体积变小了,成本也降低了,长期使用也不会担心精度达不到了。

所以,它的魔力不仅是在现在,在将来将会有更多的人来接受它、使用它。

据统计,我国的单片机年容量已达1-3 亿片,且每年以大约16%的速度增长,但相对于世界市场我国的占有率还不到1%。

特别是沿海地区的玩具厂等生产产品多数用到
单片机,并不断地辐射向内地。

所以,学习单片机在我国是有着广阔前景的。

研究单片机技术的目的和意义
单片机一词最初源于“microcontroller”。

单片机也叫做“微控制器”或者“嵌入式微控制器”,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

概括的讲,一块芯片就成了一台计算机。

它的体积小、质量轻、价格便宜,为学习、应用和开发提供了便利条件。

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。

导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。

更不用说自动控制领域的机器人、智能仪表、医疗器械了。

因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

所以掌握单片机技术无论是对自身的就业还是自身日后的发展都有一个深远的意义。

设计内容
本设计共分为四章,描述了单片机8*8点阵的具体设计方法以及调试过程。

第一章为系统基本原理及功能要求,介绍了设计思路,具体的工作方式,以及本设计功能要求;第二章为硬件设计,主要是单片机的最小系统,主要有AT89S51的基本参数、电源电路、复位电路、键盘电路、显示电路、晶振电路等;第三章为软件设计。

其主要为键盘程序,主程序以及整个设计的程序等;第四章为电路的安装及调试。

列出了元器件列表以及在调试过程中的加工方法等;最后还附录了原图和仿真图。

本设计的特色,采用了USB供电,方便快捷。

第一章系统基本原理及功能要求
1.1 系统的基本原理
MCS-51单片机作为主控芯片,控制整个电路的运行。

其外围电路主要有两部分:复位电路和晶体振荡器。

复位电路的功能是:系统上电时提供复位信号,直至系统电源稳定后,撤消复位信号。

为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。

该设计采用含有二极管的复位电路,复位电路可以有效的解决电源毛刺和电源缓慢下降(电池电压不足)等引起的问题,在电源电压瞬间下降时可以使电容迅速放电,一定宽度的电源毛刺也可令系统可靠复位。

晶体振荡电路:MCS-51单片机中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别为该反向放大器的输入端和输出端。

这个反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器。

外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。

对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性。

如果使用石英晶体,电容应该使用30pF 10pF。

1.2 设计思想
点阵内部结构及外形如下,8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则9脚接高电平13脚接低电平,则第一个点就亮了;如果要将第一行点亮,则第9脚要接高电平,而(13、3、4、10、6、11、15、16)这些引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第13脚接低电平,而(9、14、8、12、1、7、2、5)接高电平,那么第一列就会点亮。

LED驱动显示采用动态扫描方法,动态扫描方式是逐行轮流点亮,这样扫描驱动电路就可以实现多行的同名列共用一套列驱动器。

以8*8点阵为例,把所有同一行的发光管的阴极连在一起,把所有同一列的发光管的阳极连在一起(共阴的接法),先送出对应第1列发光管亮灭的数据并锁存,然后选通第1列使其燃亮一定的时间,然后熄灭;再送出第2列的数据并锁存,然后选通第2列使其燃亮相同的时间,然后熄灭;….第8列之后,又重新燃亮第1列,反复轮回。

当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形。

该方法能驱动较多的LED,控制方式较灵活,而且节省单片机的资源。

LED点阵显示模块进行的方法有两种:
1)水平方向(X方向)扫描,即逐列扫描的方式(简称列扫描方式):此时用一个P口输出列码决定哪一列能亮(相当于位码),用另一个P口输出行码(列数据),决定该列上哪个LED亮(相当于段码)。

能亮的列从左到右扫描完8列(相当于位码循环移动8次)即显示出一个完整的图像。

2)竖直方向(Y方向)扫描,即逐行扫描方式(简称行扫描方式):此时用一个P口输出决定哪一行能亮(相当于位码),另一个P口输出列码(行数据,行数据为将列数据的点阵旋转90度的数据)决定该行上哪些LED灯亮(相当于段码)。

能亮的行从上向下扫描完8行(相当于位码循环移位8次)即显示一帧完整的图像。

1.3 功能要求
单片机上电后,此时显示水平向左滚动显示“职业2 class 2011年”,若没有按键按下,则循环显示;当按键1按下时,则上移显示“加油杜刘”,若没有按键按下,则循环显示;若按下按键2时,则翻页显示“方形、笑脸及花型”,若没有按键按下,则循环显示。

第二章硬件设计
2.1 单片机最小系统
2.1.1 AT89S51的基本参数
引脚功能说明
·Vcc:电源电压
·GND:地
·P0口:P0口是一组8位漏极开路型双向I/0口,也即地址/数据总线复用口。

作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“l”可作为高阻抗输入端用。

在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

在F1ash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

·P1口:Pl 是一个带内部上拉电阻的8位双向I/O口,Pl的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口写“l”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。

作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

Flash编程和程序校验期间,Pl接收低8位地址。

端口引脚第二功能
P1.5 MOSI(用于ISP犏程)
P1.6 MISO(用于ISP犏程)
P1.7 SCK (用于ISP犏程)
·P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

Flash编程或校验时,P2亦接收高位地址和其它控制信号。

·P3 口:P3 口是一组带有内部上拉电阻的8 位双向I/0 口。

P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。

对P3口写入“l”时,它们被内部上拉电阻拉高并可作为输入端口。

作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。

P3口除了作为一般的I/0口线外,更重要的用途是它的第二功能,如下表所示:P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。

端口引脚第二功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 INT0(外中断0)
P3.3 INT1(外中断1)
P3.4 T0(定时/计数器0外部输入)
P3.5 T1(定时/计数器1外部输入)
P3.6 WR(外部数据存储器写选通)
P3.7 RD(外部数据存储器读选通)
·RST:复位输入。

当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

WDT 溢出将使该引脚输出高电平,设置SFR AUXR的DISRT0 位(地址8EH)可打开或关闭该功能。

DISRT0位缺省为RESET输出高电平打开状态。

·ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字
节。

即使不访问外部存储器,ALE 仍以时钟振荡频率的1/6 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。

要注意的是:每当访问外部数据
存储器时将跳过一个ALE脉冲。

对F1ash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。

如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。

该位置位后,只有一条M0VX和M0VC指令ALE才会被激活。

此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。

·PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S51 由外部程序存储器取指令(或
数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。

当访问外部数据存储器,没有两次有效的PSEN信号。

·EA/VPP:外部访问允许。

欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接
地)。

需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。

如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。

F1ash存储器编程时,该引脚加上+12V的编程电压Vpp。

·XTALl:振荡器反相放大器及内部时钟发生器的输入端。

·XTAL2:振荡器反相放大器的输出端。

2.1.2 复位电路
单片机有多种复位方式,常用的复位操作有上电复位和手动复位方式。

复位电路工作原理:
上电瞬间RST引脚的电位与VCC等电位,RST引脚为高电平,随着电容C5充电电流的减少,RST引脚的电位不断下降,可以保持RST引脚在为高电平的时间内完成复位操作。

手动复位:当单片机已在运行当中时,按下复位键S5后再松开,也能使RST 引脚为一段时间的高电平,从而实现AT89C51单片机复位。

上电复位:上电复位电路是—种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。

上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复位信号随着VCC 对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。

为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持足够长
的时间。

电路图如下: R9
4.7K
VCC VCC
RST
VSS C5
10MF/25V
AT89C51
R24.7K VCC VCC
RST VSS C 10MF/25V AT89C51R1S5 RST
图1 上电复位电路图 图2 按键电平复位电路图
2.1.3晶振电路
AT89C51
单片机芯片内部设有一个由反向放大器构成的振荡器,XTAL1和XTAL2分别为振荡电路的的输入端和输出端,时钟可有内部或外部生成,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就会产生自激振荡。

系统采用的定时元件为石英晶体和电容组成的并联谐振回路。

晶振频率fosc 采用12MHZ ,C1、C2的电容值取30pF ,电容的大小起频率微调的作用。

晶振电路图如图所示。

C1
30pF
C2
30pF
X112MHZ
XTAL1
XTAL2
图3 晶振电路图 2.2 键盘调整单元
S1接P3.2 口,S2接P3.3口。

如图示:
图4 键盘连接图
A(1)单片机上电后,此时显示水平向左滚动显示“职业2 class 2011年”,若没有按键按下,则循环显示;
(2)当按键s1按下时,则由上到上显示“加油杜刘”;
(3)若按下按键s2时,则翻页显示“花型和笑脸”。

B这里存在按键抖动,可以采用硬件去抖,也可以采用软件去抖,不过硬件去抖所需的元器件较多,所占的电路面积较大,增加了电路的成本和复杂度,所以采用软件消抖。

到下一章详细介绍。

2.3 LED点阵显示单元
本设计采用ATMEL公司的AT89C51作矩阵显示控制系统控制核心,12MHZ晶振,8 8点阵共阳LED显示器。

其中,P0口作为字符数据输出口,P2口为字符显示扫描输出口,第31脚(EA)接电源,P1.7开关S1,电阻,驱动用9012三极管。

本设计LED矩阵显示器电路选用8×8点阵模块,系统由单片机控制。

LED 显示屏是将发光二极管按行按列布置的,在扫描驱动方式下可以按行扫描按列控制,也可以按列扫描按行控制。

本文就是使用1块8×8点阵,采用按列扫描按行控制控制方式,扫描顺序自左向右,以满足汉字显示的要求。

8×8点阵LED 结构如图5所示。

a
b
c
d
e
f
g
h 8
12345678×8点阵LED
图5 LED 数码显示管
8×8 点阵LED 的工作原理。

图6为8
×8点阵LED 外观及引脚图,其等效电路如图7所示,只要其对应的X 、Y 轴顺向偏压,即可使LED 发亮。

例如如果想使左上角LED 点亮,则Y0=1,X0=0即可。

应用时限流电阻可以放在X 轴或Y 轴。

图6 8×8点阵LED 外观及引脚图
图7 8×8点阵LED等效电路
一个8×8点阵是由64个发光二极管按规律组成的,如图7所示。

图中,行接低电平,列接高电平,发光二极管导通发光。

2.4 LED点阵驱动单元
正向点亮一颗LED,至少也要10~20mA,若电流不够大,则LED不够大。

而不管是AT89S51的I/O口,还是TTL、CMOS的输出端,其高态输出电流都不是很高,不过1~2mA而已。

因此很难直接高态驱动LED,这时候就需要额外的驱动电路,通常有共阳型与共阴型LED阵列驱动电路,本设计才用共阳型高态扫描信号驱动电路。

单片机的P0口每个引脚能提供5mA的拉电流,20mA的灌电流,其余口每个引脚仅能提供5mA的灌电流,这样,LED的行和列都需增加驱动电路。

若选用共阳型LED,当一行(或一列)的8个LED全部点亮时,若每只LED有10mA 电流流过,则共阳端将有80mA的电流流过,这样,可设计成P2口的引脚加驱动电路后接共阳端,每只LED的10mA电流灌如P0口的引脚,减少了行(或列)驱动电路。

本次设计选用的8×8LED是共阳型,通过P2口接8550三极管进行行驱动,为防止流过LED的电流过大,在P0口接限流电阻,保护LED,电路
如图所示
单片机的串口与行驱动器相连,用来发送显示数据信息。

P0口与LED阵列的行引脚相连,送出数据、地址以及系统控制信号。

输出低态时,最大可吸取0.5A,即500mA,若每个LED取30mA,8个LED同时点亮,需要240mA,完全满足LED点亮的基本条件。

驱动图:
图8 LED驱动图电路
第三章软件设计
本程序采用C语言编写,用Keil Uvision4进行调试及烧写,程序中延时函数的延时时间在调试中得出。

3.1点阵左移程序设计
在LED阵列里,可以通过动态显示方式让所要显示的文字或图形水平移动。

在8*8点阵里,其左移就是显示不同的字形,让字体动起来,就是当列扫描第一列时,送汉字第二列的数据列;扫描第二列时,送汉字的第三列数据、、、、、、这样以此类推。

汉字就动起来了。

以“职业2 class 2011年”为例,将列扫描信号接到89S51的P2口上,将显示信号接到P0口上,每次扫描一个视窗(8条扫描线),从jin[0]开始为第一扫描视窗,第一扫描视窗显示完毕后,再以jin[1]
开始为第二个扫描视窗,直到第jin[164]个视窗显示完毕,再由第一个视窗开始扫描。

实现本操作采用列扫描方式。

流程图如图9所示:
图9 左移程序流程图
3.2点阵上移程序设计
在LED 阵列里,可以通过动态显示方式让所要显示的文字或图形上下移动。

以“加油杜刘”为例,将行扫描信号接到89S51的P0口上,将显示信号接到P2口上,每次扫描一个视窗(8条扫描线),从gun[0]开始为第一扫描视窗,第一扫描视窗显示完毕后,再以gun[1]开始为第二个扫描视窗,直到第gun[59]个视窗显示完毕,再由第一个视窗开始扫描。

实现本操作采用行扫描方式。

流程图如图一所示。

3.3点阵翻转程序设计
在LED 阵列里,可以通过动态显示方式让所要显示的文字或图形翻转。

读取阵列或输出延

8列 从第一个字型开始 60次
从第一列开始扫描 165个字下一个字型 NO NO
YES
YES NO YES
通过8组视觉一个图形,在很快的刷新频率下,就可看出效果。

实现本操作也是采用行扫描方式。

3.4按消抖及键盘程序
键盘在按下和松开的过程中都会产生抖动现象,一般解决此种问题有两种:一种是软件消抖;另一种是软件消抖。

由于硬件消抖较复杂(增加电路的复杂性与成本),通常采用程序来消抖。

抖动产生原因:在按键按下或松开时,会产生10~20毫秒的抖动,如图10示。

因此当按键在操作时,通过执行10~20毫秒的延时程序即可。

当按键被按下的瞬间,程序将执行delay函数,这个函数就是一个延时子程序。

图10 按键抖动图
理想波形
实际波形
10ms 10ms
void delay(uint z) //延时子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
.................................
. ................................
这里设置按键及操作状态是:
1:当按下按键时,单片机检测到第一个低电平信号,随即调用delay函数以延时20毫秒左右。

2:delay函数结束后,若手没有放开,开关为低电平,此时程序进入while(1)的死循环,程序便停留在此处;若手放开了,则程序进入松手检测,单片机检测
到开关为高电平,则执行下一步程序,否则一直停留在死循环里。

3.3主程序设计流程图
图11 主程序流程图
Delay 延时 开始 显示“职业....” Key1=0? Delay 延时 上移“加油....” 翻页显示“方形和笑脸” Key=0? !Key !Key1 Delay 延时 Delay 延时 !Key !Key1 YES YES NO NO 非0 非0 非0 非0 0 0 0 0
3.4全部程序
本设计的全部程序如下:
#include<reg51.h>
#include<intrins.h> //左右位循环移动头文件
#define uint unsigned int //宏定义
#define uchar unsigned char
uchar i,d,k,j,n,t;
sbit key=P3^2; //按键1
sbit key1=P3^3; //按键2
void delay(uint z); //延时子函数声明
void fanye(); //翻页显示子函数声明
void shangyi(); //上移子函数声明
void zuoyi();//左移子函数声明
uchar code jin[]={ // 职业2 class 2011年
0xff,0xff,
0xbe,0x80,0xaa,0x00,0xff,0x11,0xf5,0x11,//职
0xff,0xff,0xff,
0xff,0xb7,0xaf,0x81,0xbf,0x80,0xaf,0xb7,//业
0xff,0xff,0xff,
0xff,0x9f,0xad,0xb6,0xba,0xbd,0xff,0xff,//2
0xff,0xff,0xff,
0xc3,0xbd,0xbd,0xff,0x81,0xbf,0xc3,0xbd,
0xbd,0x81,0xff,0xb3,0x6d,0x9b,0xff,0xb3,0x6d,0x9b,//class 0xff,0xff,0xff,
0x3f,0x5b,0x6d,0x75,0x7b,0xff,//2
0x83,0x7d,0x83,0xff,0x01,0xff,0x01,0xff,//011
0xdb,0xc5,0xd4,0x01,0xd5,0xdf,0xff,//年
0xff,0xff,0xff,0xff,0xff,0xff,0xff //空屏
};
uchar code bianhuan[]={
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//空屏
0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00,//方形3
0xff,0x81,0xbd,0xbd,0xbd,0xbd,0x81,0xff,//方形2
0xff,0xff,0xc3,0xdb,0xdb,0xc3,0xff,0xff,//方形1
0xff,0xff,0xff,0xe7,0xe7,0xff,0xff,0xff,//方形0
0xff,0xff,0xc3,0xdb,0xdb,0xc3,0xff,0xff,//方形1
0xff,0x81,0xbd,0xbd,0xbd,0xbd,0x81,0xff,//方形2
0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00,//方形3
0xff,0x81,0xbd,0xbd,0xbd,0xbd,0x81,0xff,//方形2
0xff,0xff,0xc3,0xdb,0xdb,0xc3,0xff,0xff,//方形1
0xff,0xff,0xff,0xe7,0xe7,0xff,0xff,0xff,//方形0
0xff,0xff,0xc3,0xdb,0xdb,0xc3,0xff,0xff,//方形1
0xff,0x81,0xbd,0xbd,0xbd,0xbd,0x81,0xff,//方形2
0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00,//方形3
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, //空屏
0xff,0x99,0xe7,0xff,0xff,0xbd,0xc3,0xff, //笑脸显示
0x99,0x66,0x66,0xff,0xff,0xbd,0xdb,0xe7,
0x99,0x66,0x66,0xff,0xff,0xbd,0xdb,0xe7,
0xff,0x99,0xe7,0xff,0xff,0xbd,0xc3,0xff,
0x99,0x66,0x66,0xff,0xff,0xbd,0xdb,0xe7,
0x99,0x66,0x66,0xff,0xff,0xbd,0xdb,0xe7,
0x99,0x66,0x66,0xff,0xff,0xbd,0xdb,0xe7,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//空屏
0x7d,0xbb,0xd7,0xef,0xd7,0xbb,0x7d,0xff,//十字花形1 0xef,0xef,0xef,0x00,0xef,0xef,0xef,0xef,//十字花形2
0x7d,0xbb,0xd7,0xef,0xd7,0xbb,0x7d,0xff,//十字花形1 0xef,0xef,0xef,0x00,0xef,0xef,0xef,0xef,//十字花形2
0x7d,0xbb,0xd7,0xef,0xd7,0xbb,0x7d,0xff,//十字花形1 0xef,0xef,0xef,0x00,0xef,0xef,0xef,0xef,//十字花形2
0x7d,0xbb,0xd7,0xef,0xd7,0xbb,0x7d,0xff,//十字花形1 0xef,0xef,0xef,0x00,0xef,0xef,0xef,0xef,//十字花形2
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff//空屏
};
uchar code gun[]={
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//空屏
0xff,0xfd,0x10,0x55,0x55,0x15,0xf2,0xff,//加
0xff,0xff,0xff,
0xff,0xdf,0x04,0x57,0x04,0x57,0x04,0xff,//油
0xff,0xff,0xff,
0xfb,0xb0,0x1b,0xb1,0xba,0x0b,0xfb,0xff,//杜
0xff,0xff,0xff,
0xff,0x7b,0x60,0x55,0x5b,0x75,0x2e,0xff,//刘
0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff//空屏
};
void main() //主函数体
{ while(1)
{
zuoyi(); //左移滚动显示
if(key==0)
{
delay(50); //按键前期去抖
while(!key);
delay(50); //按键后期去抖
while(!key);
fanye(); //翻页显示
}
if(key1==0)
{
delay(50); //按键前期去抖
while(!key);
delay(50); //按键后期去抖
while(!key);
shangyi(); //上移显示
}
}
}
void delay(uint z) //延时子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
void zuoyi() //左移子程序
{
while(key&&key1)
{
for(j=0;j<165;j++)
{
d=0xfe; //初始扫描信号
for(k=60;k>0;k--)
{ for(i=0;i<8;i++)
{
P2=0xff; //列扫描
P0=0;
P0=jin[i+j];
P2=d;
delay(4);
d=_crol_(d,1); //循环左移一位
}
}
if(key==0) break; //key按下时跳转画面
if(key1==0) break; //key1按下时跳转画面
}
}
}
void shangyi() //上移子程序
{ while(key&&key1)
{for(n=0;n<60;n++)//循环扫描一遍35帧
{d=0xfe;
for(t=0;t<100;t++)//速度或扫描次数
for(i=0;i<8;i++)//一帧扫描8行
{ P0=0xff; //行扫描
P2=0;
P2=gun[i+n];
P0=d;
delay(4);
d=_crol_(d,1);
}
if(key==0) break; //key按下时跳转画面
if(key1==0) break; //key1按下时跳转画面
}
}
}
void fanye() //翻页子程序
{ while(key&&key1)
{for(n=0;n<32;n++)//循环扫描一遍35帧
{d=0xfe;
for(t=0;t<100;t++)//速度或扫描次数
for(i=0;i<8;i++)//一帧扫描8行
{ P0=0xff; //行扫描翻页
P2=0;
P2=bianhuan[i+8*n];
P0=d;
delay(5);
d=_crol_(d,1);
}
if(key==0) break; //key按下时跳转画面
if(key1==0) break; //key1按下时跳转画面
}
}
}
第四章安装及调试
4.1元器件列表
名称规格数量单片机最小系统AT89S51、万用板等1套点阵显示屏CPM12088BR共阳极1块三极管9012 8个
电阻1 200欧8个
电阻2 2000欧8个
按钮开关低手柄2个
导线普通若干
4.2调试过程中出现的问题及解决
1:在调试时候点阵显示乱码,经检查是将点阵屏拐角焊接反掉了。

因此先在板子上焊接上底座有助于方便调整点阵的反正。

2:本次采用的是万用版,偶尔出现显示屏熄灭现象,经过万用表检查为接线处虚焊问题。

重新对虚焊点进行补焊。

3:在调试按键程序时,当一个按键按下有效果,再按下其它按键后,没有效果,并且一直保持原来的显示效果。

经过反复检查程序,由于在子程序中没有添加以下两句的检测:if(key==0) break; //key按下时跳转画面
if(key1==0) break; //key1按下时跳转画面。

心得体会及小结。

相关文档
最新文档