基于单片机的LED点阵广告牌设计

更新时间:2023-10-22 16:26:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

编号

本科生毕业设计

基于单片机的LED点阵广告牌设计

LED dot matrix billboard design based on singlechip

学 生 姓 名 专 业 学 号 指 导 教 师 学 院

二〇一五年六月

毕业设计(论文)原创承诺书

1.本人承诺:所呈交的毕业设计(论文)《基于单片机的LED点阵广告牌设计》,是认真学习理解学校的《长春理工大学本科毕业设计(论文)工作条例》后,在教师的指导下,保质保量独立地完成了任务书中规定的内容,不弄虚作假,不抄袭别人的工作内容。

2.本人在毕业设计(论文)中引用他人的观点和研究成果,均在文中加以注释或以参考文献形式列出,对本文的研究工作做出重要贡献的个人和集体均已在文中注明。

3.在毕业设计(论文)中对侵犯任何方面知识产权的行为,由本人承担相应的法律责任。

4.本人完全了解学校关于保存、使用毕业设计(论文)的规定,即:按照学校要求提交论文和相关材料的印刷本和电子版本;同意学校保留毕业设计(论文)的复印件和电子版本,允许被查阅和借阅;学校可以采用影印、缩印或其他复制手段保存毕业设计(论文),可以公布其中的全部或部分内容。

以上承诺的法律结果将完全由本人承担!

作 者 签 名: 年 月 日

摘要

本设计使用AT89C51单片机作为主控制模块,利用简单的外围电路来驱动64×16的LED点阵显示屏。利用其本身强大的功能,可以很方便的实现单片机与PC机间的数据传输及存储,并能用软件方便的进行显示内容的变化,另一方面点阵显示屏广泛的应用于公共场所,所以本设计具有很强的实用性。本LED显示屏能够以动态扫描的方式同时显示4个16×16点阵汉字,并能通过软件修改显示内容和效果。把字符内码存储在空闲的单片机程序存储器空间,使本LED显示系统能掉电存储1024个字符。设计中采用了SPI接口的GB2312标准字库。因为采用串行传输方式,使本系统的可扩展性得到提升,便于多个显示单元的级联。本文从LED的显示原理入手,详细阐述了LED动态显示的过程以及硬件电路的设计。

关键词:LED 动态显示 单片机 点阵字库 AT89C51

I

Abstract

This design uses AT89C51 MCU as a main controller, and depends on a simple external circuit to drive 64×16 the lattice LED display. By using its own powerful functions and capacity of internal E2PROM, it is easy to accomplish the MCU and PC and E2PROM for internal storage, data transmission equipment ,and it also can be used conveniently to show a variety of content changes. The other dot matrix display is widely used in many public places. Therefore, the design has a strong practical application.The LED Display dynamic scan can show the way at the same time four 16 × 16 dot matrix Chinese characters, and PC software can modify the content and effect shows. IAP used in the application of programmable technology, the characters within the code stored in the SCM free program memory space, so that the LED display system can store 1,024 brown-out characters. SPI used in the design of the interface standard GB2312 character. Because serial transmission used, so that the system can be enhanced scalability, for a number of display units of the cascade. This article from the start LED display principle, elaborated on the LED display dynamic process, as well as hardware circuit design.

Key Words :LED;Dynamic display ;SCM ;Lattice library;AT89C51

II

目录

摘要 ............................................................ I Abstract ....................................................... II 第1章 概述 ..................................................... 1

1.1 绪论 .................................................... 1 1.2 本课题研究的目的、意义 .................................. 1 1.3 国内外研究现状 .......................................... 1 第2章 主要元器件的概述 ......................................... 3

2.1 AT89C51单片机的功能及其引脚 ............................ 3 2.2 74HC04逆变器的功能 ..................................... 5 2.3 74HC595的引脚及其功能 .................................. 5 2.4 74HC154功能及其引脚 .................................... 7 2.5 LED的结构及其用法 ...................................... 7 第3章 显示原理及控制方式分析 ................................... 8

3.1 LED电子显示屏的分类 .................................... 8 3.2 LED电子显示屏概述 ...................................... 8 3.3 LED点阵模块结构 ....................................... 10 3.4 LED动态显示原理 ....................................... 11 3.5 LED常见的控制方式 ..................................... 11 3.6 设计方案论证 ........................................... 13

3.6.1 显示模式方案 ..................................... 13 3.6.2 数据传输方案 ..................................... 14

第4章 电路设计 ................................................ 15

4.1 电路设计框图 ........................................... 15 4.2 主电路设计 ............................................. 15 4.3 键盘模块设计 ........................................... 15 4.4 驱动模块 ............................................... 15 4.5 逆变电路 ............................................... 16 4.6 16×16LED点阵显示制作 ................................. 17

4.6.1 16×16LED点阵的内部结构及工作原理 ............... 17 4.6.2 用8×8LED点阵构成16×16LED点阵 ................. 18 4.7 LED显示驱动电路 ....................................... 20 第5章 字模生成 ................................................ 21

5.1 字模简介 ............................................... 21

III

禁止,置位无效。

(8) /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,

每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

(9) /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器

(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 (10) XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 (11) XTAL2:来自反向振荡器的输出。

2.2 74HC04逆变器的功能

逆变器是组合逻辑电路的一个重要的器件,74HC04的输出是低电平有效,74HC04是六反相器,即一个集成块上有六个反相器.输入为高电平,输出就为低电平,输入低电平,输出就为高电平.74HC04要比74LS04驱动电流大.它有两个作用,一个是高低电平的转换,还有一个就是增加信号的驱动能力,信号一般都从MCU从发出,直接驱动其他器件的能力不够,中间加一个逻辑电路来增加驱动能力。 74HC04是一个普通的非门,而74HC14是斯米特触发器,是具有滞后特性的数字传输门。该器件既可以像普通“与非”门那样工作,也可以接成斯密特触发器来使用[4]。

2.3 74HC595的引脚及其功能

74HC595是硅结构的CMOS器件, 兼容低电压TTL电路,遵守

JEDEC NO.7A标准。具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器有相互独立的时钟。数据在SH_cp(移位寄存器时钟输入)的上升沿输入到移位寄存器中,在ST_cp(存储器时钟输入)的上升沿输入到存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7'),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。8位串行输入/输出或者并行输出移位寄存器,具有高阻关断状态。三态。输出寄存器(三态输出:就是具有高电平、低电平和高阻抗三种输出状态的门电路。)可以直接清除 100MHz的移位频率。将串行输入的8位数字,转变为并行输出的8位数字,例如控制一个8位数码管,将不会有闪烁。74HC595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。74HC595是串入并出带有锁存功能移位寄存器,它的使用方法很简单,在

5

正常使用时SCLR为高电平,G为低电平。从SER每输入一位数据,串行输595是串入并出带有锁存功能移位寄存器。从SER每输入一位数据,串行输入时钟SCK上升沿有效一次,直到八位数据输入完毕,输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端。入时钟SCK上升沿有效一次,直到八位数据输入完毕,输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端[3]。

74HC595引脚即外观如图2-3 所示

图2-3 74HC595引脚图

表2-4 74HC595引脚说明

符号

引脚 第15脚,第1-7脚 第8脚 第9脚 第10脚 第11脚 第12脚 第13脚 第14脚 第16脚 6

描述 8位并行数据输出, 地 串行数据输出 主复位(低电平) 移位寄存器时钟输入 存储寄存器时钟输入 输出有效(低电平) 串行数据输入 电源 Q0--Q7 GND Q7 MR SHCP STCP OE DS VCC

2.4 74HC154功能及其引脚

74HC154为 4 线-12 线译码器,当选通端(G1、G2)均为低电平时,可将地址端(ABCD)的二进制 编码在一个对应的输出端,以低电平译出。若将 G1 和 G2 中的一个作为数据输入端,由 ABCD 对输出寻址, 还可作 1 线-16 线数据分配器。工作环境温度为0~70℃,对社会的要求非常适合[1] 。

图2-4 74HC154引脚图

引脚说明:

1-11、13-17 :输出端。(outputs (active LOW)) 12:Gnd电源地。(ground (0 V))

18-19:使能输入端、低电平有效。(enable inputs (active LOW)) 20-23:地址输入端。(address inputs) 24:VCC电源正。(positive supply voltage)

2.5 LED的结构及其用法

LED,50年前人们已经了解半导体材料可产生光线的基本知识,第一个商用二极管产生于1960年。LED是英文light emitting diode(发光二极管)的缩写,它的基本结构是一块电致发光的半导体材料,置于一个有引线的架子上,然后四周用环氧7树脂密封,即固体封装,所以能起到保护内部芯线的作用,所以LED的抗震性能好该电路的显示采用逐行扫描方式。工作时,由单片机取出第一行需要显示的内容经延时一段时间后再进行下一行点阵数据的显示。需要注意的是,每次只能选通一行数据,即要通过不断的逐行扫描来实现汉字或字符的显示。

7

第3章 显示原理及控制方式分析

3.1 LED电子显示屏的分类 (1) .按颜色分类:

① ② ③

单基色显示屏:单一颜色(红色或绿色)。

双基色显示屏:红和绿双基色,256级灰度、可以显示65536种颜色。 全彩色显示屏:红、绿、蓝三基色,256级灰度的全彩色显示屏可以显

示一千六百多万种颜色。 (2).按显示器件分类: ① ②

LED数码显示屏:显示器件为7段码数码管,适于制作时钟屏、利率屏LED点阵图文显示屏:显示器件是由许多均匀排列的发光二极管组成的等,显示数字的电子显示屏。

点阵显示模块,适于播放文字、图像信息。 (3).按使用场合分类:

① 室内显示屏:发光点较小,一般Φ3mm--Φ8mm,显示面积一般零点几至

十几平方米。

② 室外显示屏:面积一般几十平方米至几百平方米,亮度高,可在阳光下

工作,具有防风、防雨、防水功能。

(4) .按发光点直径分类:

① 室内屏:Φ3mm、Φ3.75mm、Φ5mm。

② 室外屏:Φ10mm、Φ12mm、Φ16mm、Φ19mm、Φ21mm、Φ26mm。

室外屏发光的基本单元为发光筒,发光筒的原理是将一组红、绿、蓝发光二极管封在一个塑料筒内共同发光增强亮度。

3.2 LED电子显示屏概述

LED(Light Emitting Diode),发光二极管,简称LED,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极使整个晶片被环氧树脂封装起来。半导体晶片由两部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子。但这两种半导体连接起来的时候,它们之间就形成一个“P-N结”。当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED发光的原理。

多个 LED发光灯组成固定的字符或图形进行显示,即形成LED点阵图文显示屏。其主要特征是只控制LED点阵中各发光器件的通断(发光或熄灭),而不控制LED的发光强弱。LED点阵的汉字显示方式是先根据所需要的汉字提取汉字点阵(如16×16 点阵),将点阵文件存入ROM,形成新的汉字编码;而

8

在使用时则需要先根据新的汉字编码组成语句,再由MCU根据新编码提取相应的点阵进行汉字显示[1]。

LED点阵显示具有如下特点:

(1) 电压:LED使用低压电源,供电电压在6-24V之间,根据产品不同而异,所以它是一种比使用高压电源更安全的电源。

(2) 效能:消耗能量比同光效的白炽灯减少80%。

(3) 适用性:每个单元LED小片是3-5mm的正方形,所以可以制备成各种形状的器件,并且适合于易变的环境。

(4) 稳定性:10万小时,光衰为初始的50%。

(5) 响应时间:其白炽灯的响应时间为毫秒级,LED灯的响应时间为纳秒级。

(6) 对环境污染:无有害金属汞。

(7) 颜色:改变电流可以变色,发光二极管方便地通过化学修饰方法,调整材料的能带结构和带隙,实现红黄绿蓝橙多色发光。

由于LED的众多优势,在市场中得到了广泛的应用,主要应用领域有: (1)、信号指示应用:信号照明是LED单色光应用比较广泛也是比较早的一个领域,约占LED应用市场的4%左右。

(2)、显示应用:指示牌、广告牌、大屏幕显示等, LED用于显示屏幕的应用约占LED应用的20%—25%,显示屏幕可分为单色和彩色。

(3)、照明应用:便携灯具,汽车用灯,特殊照明。由于LED尺寸小,便于动态的亮度和颜色控制,因此比较适合用于建筑装饰照明。背光照明:普通电子设备功能显示背光源、笔记本电脑背光源、大尺寸超大尺寸LCD显示器背光源等。以及投影仪用RGB光源[2]。

LED电子显示屏(Light Emitting Diode Panel)是由几百--几十万个半导体发光二极管构成的像素点,按矩阵均匀排列组成。利用不同的半导体材料可以制造不同色彩的LED像素点。目前应用最广的是红色、绿色、黄色。而蓝色和纯绿色LED的开发已经达到了实用阶段。 LED显示屏是一种通过控制半导体发光二极管的亮度的方式,来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。

LED显示屏分为图文显示屏和条幅显示屏,均由LED矩阵块组成。图文显示屏可与计算机同步显示汉字、英文文本和图形;而条幅显示屏则适用于小容量的字符信息显示。LED显示屏因为其像素单元是主动发光的,具有亮度高,视角广、工作电压低、功耗小、寿命长、耐冲击和性能稳定等优点。因而被广泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它公共场所。

LED显示屏的发展前景极为广阔,目前正朝着更高亮度、更高气候耐受性、

9

{ scan=0; if(RightFlag==1) { for(j=0;j<31;j+=2) { ST=0; SendByte(hanzi[i][j+1]); SendByte(hanzi[i][j]); SendByte(hanzi[i+1][j+1]); SendByte(hanzi[i+1][j]); SendByte(hanzi[i+2][j+1]); SendByte(hanzi[i+2][j]); SendByte(hanzi[i+3][j+1]); SendByte(hanzi[i+3][j]); ST=1; EN=0; P2=scan; delay(5); EN=1; scan++; } } else break; }

for(k=0;k

40

EN=1; scan++; } } else break; } } else break; } }

void UpDisplay(void) //上移 {

uchar i,j,k,scan; char temp=0; for(i=0;i<6;) { if(UpFlag==1) { for(k=0;k

41

} temp++; //控制译码的 if(temp==16) { temp=0; //temp复位 i+=4; //显示下四个字 } } else break; } }

void DownDisplay(void) //下移 {

uchar i,j,k,scan; char temp=30; for(i=0;i<6;) { if(DownFlag==1) { for(k=0;k

42

} temp-=2; if(temp==-2) { temp=30; i+=4; } } else break; } }

void ZJDisplay1(void) //只在下移基础上稍微改下(综合上移和下移) {

uchar i,j,k,scan,temp; for(i=0;i<6;) { if(ZJ1Flag==1) { for(k=0;k

43

temp++; if(temp==16) { temp=0; i+=4; } } else break; } }

void ZJDisplay2(void) //只在下移基础上稍微改下(综合上移和下移) {

uchar i,j,k,scan,z=0; char temp=30; for(i=0;i<6;) { if(ZJ2Flag==1) { for(k=0;k

44

第4章 电路设计

4.1 电路设计框图

16*16LED动态扫描显示模块键盘模块AT89C51主控制模块驱动电路点阵模块逆变电路

图4-1 电路设计框图

4.2 主电路设计

主电路的功能是完成汉字之间的转换, 再送往LED显示,并且接受键盘操作,对汉字显示方式进行校正。

设计采用动态显示,轮流扫描各个LED使之显示相应的数型码,当扫描频率大于人眼所能识别的频率时就看不到闪烁现象。动态显示的亮度不如静态显示,但静态显示占用的I/O口资源较多,往往用移位寄存器74LS164等来扩充。

其I/O口不足的情况,当显示位数较多时,这样势必增加硬件开销,增大成本,不利于开阔市场。本设计的突出之处在于硬件电路简单,大大减少了硬件开销,这样又势必增加了软件开发的难度,但降低了成本有利于市场的开阔。

4.3 键盘模块设计

右移、上移、下移、上显、下显。

本设计中键盘模块由6*1的键盘矩阵组成,分别对应六种显示模式:左移、键盘是由若干按钮组成的开关矩阵,它是单片机系统中最常用的输入设备,用户能通过键盘向计算机输入指令、地址和数据。一般单片机系统中采和非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。

4.4 驱动模块

本设计中,驱动电路模块由8个74HC595组成,形成动态显示驱动电路。 74HC595内含8位串入、串/并出移位寄存器和8位三态输出锁存器。寄存器和锁存器分别有各自的时钟输入(SCLK和SLCK),都是上升沿有效。当SCLK

15

从低到高电平跳变时,串行输入数据(SDA)移入寄存器;当SLCK从低到高电平跳变时,寄存器的数据置入锁存器。清除端(CLR)的低电平只对寄存器复位(QS为低电平),而对锁存器无影响。当输出允许控制(EN)为高电平时,并行输出(Q0~Q7)为高阻态,而串行输出(QS)不受影响。

74HC595最多需要5根控制线,即SDA、SCLK、SLCK、CLR和EN。其中CLR可以直接接到高电平,用软件来实现寄存器清零;如果不需要软件改变亮度,EN可以直接接到 低电平,而用硬件来改变亮度。把其余三根线和单片机的I/O口相接,即可实现数据从SDA口送入74HC595,在每个SCLK的上升沿,SDA口上的数据移入寄存器,在SCLK的第9个上升沿,数据开始从QS移出。如果把第一个74HC595的QS和第二个74HC595的SDA相接,数据即移入第二个74HC595中,照此一个一个接下去,可接任意多个。数据全部送完后,给SLCK一个上升沿,寄存器中的数据即置入锁存器。此时如果EN为低电平,数据就会从并口Q0~Q7输出,把Q0~Q7与LED的8段相接,LED就可以实现显示了。

4-2 驱动模块

4.5 逆变电路

逆变电路有16个逆变器74HC04组成。

逆变电路是与整流电路(Rectifier)相对应,把直流电变成交流电称为逆变。当交流侧接在电网上,即交流侧接有电源时,称为有源逆变;当交流侧直接和负载链接时,称为无源逆变。

逆变电路的应用非常广泛。在已有的各种电源中,蓄电池、干电池、太阳能电池等都是直流电源,当需要这些电源向交流负载供电时,就需要逆变电路。另外,交流电机调速用变频器、不间断电源、感应加热电源等电力电子装置使用非常广泛,其电路的核心部分都是逆变电路。它的基本作用是在控制电路的控制下将中间直流电路输出的直流电源转换为频率和电压都任意可调的交流电源。

桥式逆变电路的开关状态由加于其控制极的电压信号决定,桥式电路的PN端加入直流电压Ud,A、B端接向负载。当T1、T4打开而T2、T3关合时,u0=Ud;相反,当T1、T4关合而T2、T3打开时,u0=-Ud。于是当桥中各臂以频率 f(由控制极电压信号重复频率决定)轮番通断时,输出电压u0将成为交变方波,其幅值为Ud。重复频率为f,其基波可表示为把幅值为Ud的矩形波uo。由此可见,控制信号频率f可以决定输出端频率,改变直流电源电压Ud可以改变基波幅值,

16

从而实现逆变的目的。

为了满足不同用电设备对交流电源性能参数的不同要求,已发展了多种逆变电路,并大致可按以下方式分类:

(1).按输出电能的去向分,可分为有源逆变电路和无源逆变电路。前者逆变电路输出的电能返回公共交流电网,后者输出的电能直接输向用电设备。

(2).按直流电源性质可分为由电压型直流电源供电的电压型逆变电路和由电流型直流电源供电的电流型逆变电路。

(3).按主电路的器件分,可分为:由具有自关断能力的全控型器件组成的全控型逆变电路;由无关断能力的半控型器件(如普通晶闸管)组成的半控型逆变电路。半控型逆变电路必须利用换流电压以关断退出导通的器件。若换流电压取自逆变负载端,称为负载换流式逆变电路。这种电路仅适用于容性负载;对于非容性负载,换流电压必须由附设的专门换流电路产生,称自换流式逆变电路。

(4).按电流波形分,可分为正弦逆变电路和非正弦逆变电路。前者开关器件中的电流为正弦波,其开关损耗较小,宜工作于较高频率。后者开关器件电流为非正弦波,因其开关损耗较大,故工作频率较正弦逆变电路低。

(5).按输出相数可分为单相逆变电路和多相逆变电路。

4-3 逆变电路

4.6 16×16LED点阵显示制作

4.6.1 16×16LED点阵的内部结构及工作原理

以UCDOS中文宋体字库为例,每一个字由16行16列的点阵组成显示。即国家标准汉字库中的每一个字均由256点阵来表示。我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。事实上这个汉字屏不仅可以显示汉字,也可以显示在256像素范围内的任何图形。这里我们以“高”字说明,如图4-4所示。

17

图4-4 16*16LED汉字显示

用8位的AT89C51单片机控制,由于单片机的总线为8位,一个字需要拆分为2个部分。一般把它拆分为上部和下部,上部由8×16点阵组成,下部也由8×16点阵组成。在本例中单片机首先显示的是左上角的第一列的上半部分,即第0列的p00—p07口。方向为p00到p07 ,显示汉字“高”时,p02点亮,由上往下排列,为p0.0 灭,p0.1 灭, p0.2 灭, p0.3 灭, p0.4 灭, p0.5 亮,p0.6灭,p0.7 灭。即二进制00000100,转换为16进制为 04h。上半部第一列完成后,继续扫描下半部的第一列,为了接线的方便,我们仍设计成由上往下扫描,即从p27向p20方向扫描,从上图可以看到,这一列全部为不亮,即为00000000,16进制则为00h。 然后单片机转向上半部第二列,仍为p01点亮,为00000100,即16进制04h.这一列完成后继续进行下半部分的扫描,p20点亮,为二进制00000010,即16进制02h.依照这个方法,继续进行下面的扫描,一共扫描32个8位,可以得出汉字“高”的扫描代码为:02h,00h,01h, 04h,0FFh,0FEh, 00h, 00h,1Fh,0F0h, 10h, 10h, 10h, 10h, 1Fh,0F0h,00h, 04h, 7Fh,0FEh, 40h, 04h, 4Fh,0E4h,48h, 24h, 48h, 24h, 4Fh,0E4h, 40h, 0Ch[8]。

由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出它的扫描代码从而显示在屏幕上。不过现在有很多现成的汉字字模生成软件,就不必自己去画表格算代码了[9]。

4.6.2 用8×8LED点阵构成16×16LED点阵

Proteus中只有5×7和8×8等LED点阵,并没有16×16LED点阵,而在实际应用中,要良好地显示一个汉字,则至少需要16×16点阵。下面我们就首先介绍使用8×8点阵构建16×16点阵的方法,并构建一块16×16LED点阵,用于本例的显示任务。

首先,从Proteus的元件库中找到“MATRIX-8X8-RED”元器件,并将四块该元器件放入Proteus文档区编辑窗口中。此时需要注意,如果该元器件保持初始的位置(没有转动方向),我们要首先将其左转90°,使其水平放置,那么此时它的左面8个引脚是其行线,右边8个引脚是其列线(当然,如果你是将右转,

18

则右边8个引脚是行线)。然后我们将四个元器件对应的行线和列线分别进行连接,使每一条行线引脚接一行16个LED,列线也相同。并注意要将行线和列线引出一定长度的引脚,以便下面我们使用。连接好的16×16点阵如图4-5所示。

成如上图的16×16点阵只是第一步,这样分开的数块并不能达到好的显示效果,下面我们要将其进一步组合。组合实际上很简单,首先选中如上图中右侧的两块8×8点阵,然后拖动并使其与左侧的两块相并拢[10],如图4-6所示。

图4-5 点阵模块组合

图4-6 左右点阵并拢

可以看到原来的连线已经自动隐藏了,至于线上的交点,我们不要去动。然后,我们再来最后一步,选中下侧的两块点阵,并拖动使其与上侧的两块并拢,最后的效果如图4-7所示。看到,原来杂乱的连线现在已经几乎全部隐藏了,一块16×16的LED点阵做成了。需要注意,做成的LED点阵的行线为左侧的16个引脚,下侧的16个引脚为其列线,而且其行线为高电平有效,列线为低电平有效。然后,我们将其保存,以便以后使用。

图4-7 16*16点阵图

19

4.7 LED显示驱动电路

LED显示驱动电路如图4-8所示[8]、[9]、[18]。

图4-8 显示驱动电路图

20

第5章 字模生成

5.1 字模简介

文字的字模是一组数字,但它的意义却与数字的意义有着根本的变化,它是用数字的各位信息来记载英文或汉字的形状。

在电脑硬件中,根本没有汉字这个概念,也没有英文的概念,其认识的概念只有——内码(将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码)。如果你用启动盘启动系统后用DIR命令可能得到一串串莫名其妙的字符,但那确确实实是汉字,如果你启动UCDOS或其他的汉字系统后,就会看到那是一个个熟悉的汉字。在硬件系统内,英文的字模信息一般固化在ROM里,即使在没有进入系统的CMOS里,也可以让你看到英文字符。而在DOS下,中文的字模信息一般记录在汉字库文件里(将制作好的字模放到一个个标准的库中,这就是点阵字库文件)。

5.1.1 LED显示屏领域字模实现技术

在通过软件实现的技术中,目前有许多字模生成软件,软件打开后输入汉字,点“检取”,十六进制数据的汉字代码即可自动生成,把我们所需要的竖排数据复制到我们的程序中即可。在通过硬件实现字模提取的技术中,有在单片机系统中增加硬汉字库的方法,主控器发送的汉字是其机内码,用两个字节来表示一个汉字。根据机内码,显示单元控制模块从汉字库中查取显示字模,实现汉字显示。由于带有硬汉字库,进行动态文字显示时,通用智能显示单元仅接受汉字的机内码即可,这样数据通讯量大大减少。因此,动态文字显示速度快。

5.1.2 软件控制系统字模提取的分析与设计

而在LED显示屏控制系统具体应用的Windows操作系统下如何提取字模信息是设计的核心。软件控制系统在实际编辑过程中,要求各种字体、字号的文字都能被编辑、保存。所以系统在设计时,把文本区理解为由众多的象素点构成,而把不同字体、字号的文字理解为一幅图像。因为所开启的文本区大小与LED显示屏的大小对应,所以采用16×16点阵为单位,把文本区内的每个像素点都看成一个二维数组,由于系统中各种颜色都有对应的值,赋予每个不同颜色的像素点不同的对应值,再把每个点赋予一个int型的值,这样保存下来的信息就是二进制数据。通过这样的设计,我们不仅可以把任何字型,任何大小的文字保存下来,还可以显示以256个像素点阵为单位的任何图形。在软件控制系统中实现字模的提取,也就避免了在单片机中加载硬汉字库模块,从而简化了硬件模块的设计[13]。

以下以单色屏为例,介绍系统采用字模保存的算法设计:

21

定义COLORREF zimo_ color为像素点的颜色,判断某个点的颜色值。如果值为Oxffffff,说明此点为白色,赋予此点值0。由于单色屏只有红色和不显色两种,所以可以简单赋值为除白色外其余点赋值为1

CClientDC dc(this); CFile myfile;

unsigned int zimo[192] [384]={0};

unsigned char zimo_data[192][48]={0}; COLORREF zimo_color; int row, col ;

this ->HideCaret();

for (row=0;row<192;row++){ for (col=0;col<384;col++){

zimo_color=do.GetPixel (col, row); if (zimo color = =Oxffffff) {zimo [row] [col]=0;}else {zimo [row] [col]=1;}}}

定义unsigned int zimo[192][384]={0};//文本区像素点

以8位为一字节(因为在随后的串行通讯中,传输的数据是8位的二进制数据)

定义 unsigned char zimo_data[192][48]={0}[7]。

5.2 字模存储技术

目前使用最广泛的技术是,通过上位机软件将待显示的字符串转换为对应的点阵字模数据,将这些字模数据按一定的顺序编址后存储在E2PROM中。在条屏显示的过程中按规定的方式取出E2PROM中的字模数据进行处理。对于一个16×16点阵的汉字字模数据,需要连续32字节的E2PROM空间来存储。照此计算,若有256个需要显示的字符,则至少需要32B×256=8192字节(8KB)的E2PROM存储空间。通常的单片机内部没有集成这么大容量的E2PROM。因此这种方案,需要在单片机外部扩展大容量的E2PROM,增加硬件成本。上位机程序设计由于涉及到汉字取模,取模算法的难度较大。在多字下载的时候传输时间也较长。诸多弊端使本设计放弃了传统方案。而本设计创新使用了专用的点阵字库芯片,成本仅为8元,内含各种点阵规格的GB2312、ASCII等标准字库。专用字库芯片采用微型SO-8封装,使用高速同步串行SPI接口进行读写操作,节省了控制器的I/O。在本设计中,单片机内部的小容量E2PROM,用于存储待显示汉字的GB2312标准机内码,每个全角字符的内码占2字节,则在同样需要显示256个汉字的情况下,这种方案仅占用512字节的E2PROM空间。

22

5.3 字库生成

字库生成规则如下所示:

○○○○○●○○●○○○○○○○ | -> 0x04,0x80 ○○○○●●●○●○●○○○○○ | -> 0x0E,0xA0 ○●●●●○○○●○○●○○○○ | -> 0x78,0x90 ○○○○●○○○●○○●○○○○ | -> 0x08,0x90 ○○○○●○○○●○○○○●○○ | -> 0x08,0x84 ●●●●●●●●●●●●●●●○ | -> 0xFF,0xFE ○○○○●○○○●○○○○○○○ | -> 0x08,0x80 ○○○○●○○○●○○●○○○○ |16bit -> 0x08,0x90 ○○○○●○●○●○○●○○○○ |2bytes -> 0x0A,0x90 ○○○○●●○○○●●○○○○○ | -> 0x0C,0x60 ○○○●●○○○○●○○○○○○ | -> 0x18,0x40 ○●●○●○○○●○●○○○○○ | -> 0x68,0xA0 ○○○○●○○●○○●○○○○○ | -> 0x09,0x20 ○○○○●○●○○○○●○●○○ | -> 0x0A,0x14 ○○●○●○○○○○○●○●○○ | -> 0x28,0x14 ○○○●○○○○○○○○●●○○ + -> 0x10,0x0C

所以,'我'在HZK16 16*16点阵字库的存放的序列为: (一行一行地保存,共16行,每行2个字节, 共32个字节)

0x04 0x80 0x0E 0xA0 0x78 0x90 0x08 0x90 0x08 0x84 0xFF 0xFE 0x08 0x80 0x08 0x90

0x0A 0x90 0x0C 0x60 0x18 0x40 0x68 0xA0 0x09 0x20 0x0A 0x14 0x28 0x14 0x10 0x0C

23

第6章 软件设计

6.1 程序设计总体思路和结构

用C语言设计,实现LED点阵显示内容,并使显示的内容在屏幕上的滚动显示。系统采用模块化结构,包括主程序、动态显示程序和键盘程序,其中动态显示方式由键盘控制。

用AT89C51、8个74HC595、1个74HC154、16个74HC04芯片和4个16×16LED点阵显示器构成一个完整的16位点阵LED显示系统[11]。

6.2 各模块程序设计

6.2.1主程序设计

主程序用模块化设计,流程图如图6-1所示。

从下面主程序看出,主程序的组成是通过分别调用各子程序组成总体系统功能,能很直观的看出主程序所要完成的功能,首先是初始化各模块,之后调用键盘程序选择显示的方式,调用动态显示子程序完成显示的初始化和字符的读写,调用字符子程序显示数据,调用定时器程序确定字符循环时间,最后又转到键盘程序来回循环。

开始初始化调用键盘程序Y调动态显示程序定时器是否继续N停止 图6-1 程序流程图

6.2.2 键盘子程序设计

键盘程序的设计是本设计的重点,当有键按下时,调用延时程序,再判断是否有键按下无则返回,若有先调用显示程序再判断是否松开,否则再转到显示程序,这样使得在按键松开之前能正常显示。本键盘深度为六级,各对应一种显示方式。流程图如图6-2所示。

24

开始有键按下?y延时N返回K1按下?NK2按下?NK3按下?NNK4按下?NK5按下?NK6按下?Y调用左移显示程序Y调用右移显示程序Y调用上移显示程序Y调用下移显示程序Y调用上显显示程序Y调用下显显示程序 图6-2 键盘程序流程图

6.2.3 动态显示程序设计

显示要求汉字可以从显示屏上下左右各方一个个的出现。设计时可采用如下方法:首先将LED显示屏对应的显示缓冲区全部清零,即 LED显示空白,然后每间隔一个“软定时器”设定的动态显示时间,显示缓冲区依次加入一个汉字点阵数据并进行扫描显示,这样就可达到动态显示的效果。流程图如图6-3所示。

25

开始清除显示缓冲区判断键盘按键调用字符读取程序结束

图6-3 动态显示流程图

26

第7章 系统功能仿真

7.1 仿真软件简介

Proteus软件是英国Labcenter Electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一设计平台,其处理器模型支持8051、HC11、AVR、ARM、8086、PIC10/12/16/18/24/30/DsPIC33和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译。

图7-1 Proteus仿真编译界面

1.软件的功能特点:

Proteus软件具有其它EDA工具软件(例:multisim)的功能。这些功能是:

27

(1)原理布图、PCB自动或人工布线、SPICE电路仿真

(2)Proteus提供的仿真元器件资源:仿真数字和模拟、交流和直流等数千种元器件,有30多个元件库。

(3)Proteus提供的仿真仪表资源 :示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。理论上同一种仪器可以在一个电路中随意的调用。

(4)Proteus提供的调试手段 Proteus提供了比较丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。

2. 用Proteus软件编写原理图: (1)智能原理图设计(ISIS)

丰富的器件库:超过27000种元器件,可方便地创建新元件;智能的器件搜索:通过模糊搜索可以快速定位所需要的器件;智能化的连线功能:自动连线功能使连接导线简单快捷,大大缩短绘图时间;支持总线结构:使用总线器件和总线布线使电路设计简明清晰;可输出高质量图纸:通过个性化设置,可以生成印刷质量的BMP图纸,可以方便地供WORD、POWERPOINT等多种文档使用。 (2)完善的电路仿真功能(Prospice)

① ProSPICE混合仿真:基于工业标准SPICE3F5,实现数字/模拟电路的混合仿真;超过27000个仿真器件:可以通过内部原型或使用厂家的SPICE文件自行设计仿真器件,Labcenter也在不断地发布新的仿真器件,还可导入第三方发布的仿真器件。

② 多样的激励源:包括直流、正弦、脉冲、分段线性脉冲、音频(使用wav文件)、指数信号、单频FM、数字时钟和码流,还支持文件形式的信号输入。

③ 丰富的虚拟仪器:13种虚拟仪器,面板操作逼真,如示波器、逻辑分析仪、信号发生器、直流电压/电流表、交流电压/电流表、数字图案发生器、频率计/计数器、逻辑探头、虚拟终端、SPI调试器、I2C调试器等。

④ 生动的仿真显示:用色点显示引脚的数字电平,导线以不同颜色表示其对地电压大小,结合动态器件(如电机、显示器件、按钮)的使用可以使仿真更加直观、生动。

(3)独特的单片机协同仿真功能(VSM)

① 支持主流的CPU类型:如ARM7、8051/52、AVR、PIC10/12、PIC16、PIC18、PIC24、dsPIC33、HC11、BasicStamp、8086、MSP430等,CPU类型随着版本升级还在继续增加,如即将支持CORTEX、DSP处理器。

② 支持通用外设模型:如字符LCD模块、图形LCD模块、LED点阵、LED七段显示模块、键盘/按键、直流/步进/伺服电机、RS232虚拟终端、电子温度计等等,其COMPIM(COM口物理接口模型)还可以使仿真电路通过PC机

28

串口和外部电路实现双向异步串行通信。

③ 实时仿真:支持UART/USART/EUSARTs仿真、中断仿真、SPI/I2C仿真、MSSP仿真、PSP仿真、RTC仿真、ADC仿真、CCP/ECCP仿真。

④ 编译及调试:支持单片机汇编语言的编辑/编译/源码级仿真,内带8051、AVR、PIC的汇编编译器,也可以与第三方集成编译环境(如IAR、Keil和Hitech)结合,进行高级语言的源码级仿真和调试。 (4)实用的PCB设计平台

① 原理图到PCB的快速通道: 原理图设计完成后,一键便可进入ARES的PCB设计环境,实现从概念到产品的完整设计。

② 先进的自动布局/布线功能:支持器件的自动/人工布局;支持无网格自动布线或人工布线;支持引脚交换/门交换功能使PCB设计更为合理。

③ 多种输出格式的支持:可以输出多种格式文件,包括Gerber文件的导入或导出,便利与其它PCB设计工具的互转(如Protel)和PCB板的设计和加工。

3. 软件仿真:

支持当前的主流单片机,如51系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列、68000系列等。

(1)提供软件调试功能。

(2)提供丰富的外围接口器件及其仿真。RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。

(3)提供丰富的虚拟仪器,利用虚拟仪器在仿真过程中可以测量外围电路的特性。

(4)具有强大的原理图绘制功。 4. 电路功能仿真:

在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。PROTEUS 是单片机课堂教学的先进助手。PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。课程设计、毕业设计是学生走向就业的重要实践环节。

由于PROTEUS提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台。随着科技的发展“计算机仿真技术”已成为许多设计部门重要的前期设计手段。它具有设计灵活,结果、过程的

29

致谢

首先非常感谢我的导师朱利莞老师,论文选题、课题研究及论文撰写工作都是在朱老师的悉心指导下完成的。在此期间,朱老师为我提供了良好的学习和研究条件,带我走入科学研究的领域,而且教授我很多研究和学习的方法,对我的严格要求和精心指导将使我受益终生。朱老师认真负责的态度为我将来的工作学习树立了榜样。值此之际,对朱老师给予的关怀与帮助致以最深切和诚挚地感谢!

衷心感谢我的老师和同学们为我营造了一个温馨和谐的学习环境,并且在论文的写作过程中给予我很多帮助,使我能够顺利完成毕业论文的撰写!

感谢论文的各位评审专家能在百忙之中抽出时间对我的论文进行评审,并提出宝贵的建议,在此表示衷心的感谢!

最后,谨以此文献给我的母校长春理工大学!

35

附录

程序源代码:

#include

#define uchar unsigned char #define uint unsigned int uchar speed=15; sbit ST=P3^5; sbit SH=P3^6; sbit DATA=P3^7; sbit EN=P2^4; sbit K1=P1^0; sbit K2=P1^1; sbit K3=P1^2; sbit K4=P1^3; sbit K5=P1^4; sbit K6=P1^5; bit LeftFlag; bit RightFlag; bit UpFlag; bit DownFlag; bit ZJ1Flag; bit ZJ2Flag=1; //开始显示模式6 void delay(uchar ms) {

uchar y;

for(;ms>0;ms--) for(y=120;y>0;y--); }

uchar code hanzi[][32]={ /*计 BCC6H*/

{0x00,0x40,0x20,0x40,0x10,0x40,0x10,0x40,0x00,0x40,0x00,0x44,0xF7,0xFE,0x10,0x40,

0x10,0x40,0x10,0x40,0x10,0x40,0x12,0x40,0x14,0x40,0x18,0x40,0x10,0x40,0x00,0x40,},

/*算 CBE3H*/

{0x20,0x80,0x3E,0xFC,0x49,0x20,0x9F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,

0x10,0x10,0x1F,0xF0,0x08,0x24,0xFF,0xFE,0x08,0x20,0x08,0x20,0x10,0x20,0x20,0x20,},

/*机 BBFAH*/

{0x10,0x00,0x10,0x10,0x11,0xF8,0x11,0x10,0xFD,0x10,0x11,

36

0x10,0x31,0x10,0x39,0x10,

0x55,0x10,0x51,0x10,0x91,0x10,0x11,0x10,0x11,0x12,0x12,0x12,0x14,0x0E,0x18,0x00,},

/*学 D1A7H*/

{0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,

0x00,0x40,0x01,0x84,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,},

/*院 D4BAH*/

{0x00,0x80,0x78,0x40,0x4F,0xFE,0x54,0x02,0x58,0x14,0x63,0xF8,0x50,0x00,0x48,0x08,

0x4F,0xFC,0x48,0xA0,0x68,0xA0,0x50,0xA0,0x41,0x22,0x41,0x22,0x42,0x1E,0x4C,0x00,},

/*欢 BBB6H*/

{0x00,0x80,0x00,0x80,0xFC,0x80,0x04,0xFC,0x45,0x04,0x46,0x48,0x28,0x40,0x28,0x40,

0x10,0x40,0x28,0x40,0x24,0xA0,0x44,0xA0,0x81,0x10,0x01,0x08,0x02,0x0E,0x0C,0x04,},

/*迎 D3ADH*/

{0x00,0x00,0x41,0x84,0x26,0x7E,0x14,0x44,0x04,0x44,0x04,0x44,0xF4,0x44,0x14,0xC4,

0x15,0x44,0x16,0x54,0x14,0x48,0x10,0x40,0x10,0x40,0x28,0x46,0x47,0xFC,0x00,0x00,},

/*您 C4FAH*/

{0x09,0x00,0x09,0x00,0x13,0xFC,0x12,0x04,0x34,0x48,0x59,0x40,0x91,0x50,0x12,0x4C,

0x14,0x44,0x11,0x40,0x10,0x80,0x02,0x00,0x51,0x84,0x50,0x92,0x90,0x12,0x0F,0xF0},//\!\

{0x00,0x00,0x01,0x80,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x01,0x80,

0x01,0x80,0x01,0x80,0x00,0x00,0x01,0x80,0x03,0xC0,0x01,0x80,0x00,0x00,0x00,0x00},

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}

37

};

void SendByte(uchar a) {

uchar byte,i; byte=~a;

for(i=0;i<8;i++) { SH=0; if(byte&0X80) DATA=1; else DATA=0; SH=1; byte<<=1; } }

void LeftDisplay(void) //左移,半个字一移 {

uchar i,j,scan,k;

for(i=0;i<6;i++) //hanzi中10个字,因一下显示四个字,所以j最大为j=10-4=6;

{ if(LeftFlag==1) //使之按了其他的键立即退出,转到其他模式 { for(k=0;k

38

} } else break; } for(k=0;k

SendByte(hanzi[i+3][j+1]); SendByte(hanzi[i+3][j]); SendByte(hanzi[i+2][j+1]); SendByte(hanzi[i+2][j]); SendByte(hanzi[i+1][j+1]); SendByte(hanzi[i+1][j]); SendByte(hanzi[i][j+1]); ST=1; EN=0; P2=scan; delay(5); EN=1; scan++; } } else break; } } else break; } }

void RightDisplay(void) //右移 {

uchar i,j,k,scan; for(i=0;i<6;i++) //字加一 { if(RightFlag==1) { for(k=0;k

39

本文来源:https://www.bwwdw.com/article/z26f.html

Top