交通诱导屏软件设计

目 录

摘要 .........................................................0 0 引言 .......................................................1 1硬件方案设计................................................2

1.1总体设计系统硬件方案......................................2

1.1.1 电源设计...............................................2

1.1.2控制电路方案............................................3

1.1.3显示屏驱动显示电路......................................4

1.1.4串口通信电路............................................5

1.2芯片介绍..................................................5

1.2.1 STC单片机..............................................5

1.2.2 74HC595................................................7

1.2.3 74HC154.................................................8

1.2.4 MAX232..................................................8

1.3 硬件原理图...............................................9 2系统软件设计...............................................11

2.1系统软件方案.............................................11

2.2主程序设计...............................................12

2.3显示程序的设计...........................................15

2.3.1点阵数据表达方式.......................................15

2.3.2 LED显示屏的显示方式..................................18

2.3.3各种显示方式程序......................................20

2.4通信程序的设计..........................................27 3系统调试..................................................31 4总结......................................................5参考文献..................................................6附录......................................................

34 35 36

摘 要

本文介绍了一款以单片机STC89C51RC/RD+为控制器的LED交通诱导点阵显示屏系统的设计。该系统可实现中英文字符的显示和静态、动态显示,采用PC作为上位机的结构构建,实现点阵LED屏以多样化的方式显示各种信息的功能。该屏具有运行可靠、安全、节能、成本低、使用方便的特点。并且可以通过级连的方式来扩大显示屏幕的尺寸以达到增加显示内容的目的。

系统采用PC机作为上位机,上位机向单片机发送控制命令和上位机所存储的显示代码,STC89C51RC/RD+单片机接收并处理PC机的控制命令以及显示代码,由显示驱动模块驱动一个16×16分辨率的LED点阵显示屏的扫描显示。PC机与单片机之间的通信采用RS—232C通信标准来实现。所选用的STC89C51RC/RD+单片机具有价格低廉程序写入方便的特点使得整个系统方便维护和检修。除此之外,该系统只占用了单片机少量的I /O口和内存,为系统留下了功能扩展的空间。

关键词: 交通诱导屏,STC89C51RC/RD+,LED

交通诱导屏软件设计

孙宗坤 164209131

0引言 一般意义上我们说的交通诱导屏通常指由LED发光二级管制作而做成的,用来作交通诱导的显示屏[1],它一般被应用到高速公路, 十字路口等地方,时刻提醒人们,出行要注意安全,向市民宣传交通常识,及时提供市区交通信息, 同时它也常用来显示一些天气,温度等信息,给出行的司机朋友带来方便。有助于营造良好的交通秩序。

交通诱导屏指由LED发光二级管制作而做成的,用来起到交通诱导作用的显示屏,它一般被应用到高速公路,冠金交通诱导屏由屏体,驱动系统,控制系统,通讯设备,电源系统和门架,箱体等组成,交通诱导屏含图形诱导标志,是由普通道路标志和可变信息标志相结合组成的多功能信息显示屏[2]。

交通诱导屏以呈现道路整体路线轮廓的图形方式向驾驶员提供前方的道路走向,具有指路牌的作用;在静态图形的路段标识区域镶嵌LED可变光带,通过LED的不同颜色发光,形象标识这些路段处于畅通(绿色)、堵塞(红色)或拥挤(橙色)状态的实时路况,供驾驶员判断和选择适当的行驶路线,起到交通诱导的作用。

交通诱导屏具有显示形象直观、信息量大、视认时间相对较短、为不熟悉路况的驾驶员指路等显著优点,适用于城市道路和公路主要干线的路网密集地段。

1硬件方案设计

1.1体系统设计方案

总体系统设计主要由上位机,通信系统,单片机系统,译码电路,显示驱动电路和16×16的点阵屏六部分组成。如图1.1所示。

图1.1 总体系统设计

1.1.1电源设计

在系统中MAX232、74HC154、74HC595、STC89C51RC/RD+都需要5V的供电电压,在系统开发过程中可以使用电脑USB供电。在实际的大屏幕LED显示屏设计中,用电脑USB供电明显不切实际。此时需要对民用的220V进行降压整流为5V直流电压为显示系统供电。电路图如图1.2所示。

图1.2电源电路

1.1.2 控制电路方案

控制电路设计中采用的是单片机系统,该系统必须要是工作在一个最小系统(指单片机的可以的最小配置系统)。STC89C51RC/RD+的最小系统包括了外界时钟电路和复位电路,选定一定数量的IO口作为控制口控制外部的各种器件和数据的输出。根据功能选择一定的单片机端口添加外围的器件,具体电路如图1.3所示。

图1.3 控制电路

1.1.3 显示屏驱动显示电路

显示屏分成屏体和控制器两部分,屏体的主要部分是显示阵列以及有行列驱动电路。根据安装环境的空间以及考虑成本造价,决定使用多大尺寸的显示屏,从而决定了显示模块的数量,这里以8×8点阵为例,模块单位为256点阵,即需要16块点阵模块。汉字一般是256点阵,那么该屏可以一次显示4个汉字[3]。

采用扫描方式进行显示时,分成两步,对于每行有一个行驱动器,各行的同名列共用一个列驱动器,由单片机给出行选通信号,从第一行开始依次对各行进行扫描,对于列,根据各列所存数据,确定相应的列驱动器是否将该列与行接通,如果接通,那么该行该列的LED将亮,以同样方法进行显示全部各行都扫描一遍之后(一个扫描周期),再从第一行开始,进行下一个周期的扫描。只要一个扫描周期的时间比人眼1/25秒的滞留时间短,就不会感觉出闪烁现象。

显示驱动电路由74HC595组成。74HC595输入端是8位串行移位寄存器,输出端是8位并行缓存器具有锁存功能。由于CLK、LOAD端相连,而数据线分开,这样在同一脉冲下,行列的数据可以同时进行传入,行列数据准备好后,启动LOAD信号使所有数据同时输出并锁存,这样的设计较之传统方法提高了4倍的速度,占用I/O口少,由于CLK, LOAD引线较长,为避免线间干扰,在驱动6片74Ls595之后再加驱动芯片74L5244以驱动下一级驱动电路[4]。显示驱动电路如图1.4所示。

行列扫描驱动相当于对发光管脉冲供电,要获得与直流驱动方式相当的发光强度,脉冲驱动电流的平均电流I1与直流电流I2相同,它们与脉冲电流幅值If的关系为If=Ton/Th,×I1是扫描周期,Ton是导通时间,占空比是1/16,扫描频率应大于24HZ,I取8mA,那么I=8×16=128mA,发光管压降取2V,那么每个发光管应串接50的电阻。行驱动最大瞬间电流能达到128×80=10.240A。

图1.4 显示驱动电路

1.1.4 串口通信电路

串口通信电路在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯。RS-232-C接口(又称 EIA RS-232-C)是目前最常用的一种串行通讯接口。

1.2 芯片介绍

1.2.1 STC单片机

STC89C51RC/RD+系列单片机是宏晶科技推出的新一代超强抗干扰/ 高速/ 低功耗的单片机,指令代码完全兼容传统8051 单片机,12 时钟/ 机器周期和6 时钟/ 机器周期可任意选择[5]。实图如1.5所示。

图1.5 STC单片机

STC单片机的特点:

加密性强,很难解密或破解,解密费用很高、国内能解密的人少,一般的仿制者望而退步。

超强抗干扰:

1) 高抗静电(ESD保护)

2) 轻松过 2KV/4KV快速脉冲干扰

3) 宽电压,不怕电源抖动

4) 宽温度范围,-40℃~85℃

5) I/O 口经过特殊处理

6) 单片机内部的电源供电系统经过特殊处理

7) 单片机内部的时钟电路经过特殊处理

8) 单片机内部的复位电路经过特殊处理

9) 单片机内部的看门狗电路经过特殊处理

三大降低单片机时钟对外部电磁辐射的措施:

1) 禁止ALE输出

2) 如选 6 时钟/机器周期,外部时钟频率可降一半

3) 单片机时钟振荡器增益可设为 1/2Gain

超低功耗:

1) 掉电模式:典型功耗

2) 空闲模式:典型功耗2mA

3) 正常工作模式:典型功耗4mA-7mA

4) 掉电模式可由外部中断唤醒,适用于电池供电系统,如水表、气表、便携设备等

1.2.2 74HC595

74HC595是硅结构的CMOS器件,兼容低电压TTL电路,遵守JEDEC标准。74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。数据在SCHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器 的数据输出到总线[6]。74HC595的管脚排列如图1.6所示。

图1.6 74HC595的管脚排列

1.2.3 74HC154

图1.7 74HC154的管脚排列

74HC154的管脚排列如图1.7所示。4线—16线译码器,可以实现地址的扩展。H = 高电平(HIGH voltage level) L = 低电平(LOW voltage level) X = 任意电平(don’t care)

只要控制端G1、G2任意一个为高电平,A、B、C、D任意电平输入都无效。G1、G2必须都为低电平才能操作芯片。

1.2.4 MAX232

MAX232芯片是美信(MAXIM)公司专准串口设计为RS-232标的单电源电平转换芯片,使用+5v单电源供电。如图1.8所示。第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。 第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。 其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。 8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。

TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。

图1.8 MAX 管脚图

1.3 硬件原理图

1)驱动电路,如图1.9所示。

图1.9驱动电路

2)显示电路,如图1-10所示。

图1.10 显示电路

3)主电路,如图1.11所示。

图1.11 主电路

2 系统软件设计

2.1 系统软件方案

软件的设计除了满足设计功能外还必须要满足易读写,方便下载和编译。设计目标和硬件总体结构确定的情况下,软件可以分为主程序,显示子程序,各种特效显示子程序,通信程序三个主要部分组成[7]。具体结构如图2.1所示。

图2.1 软件功能结构框图

软件的编写需要借助软件编辑器和编译软件,编译完成后还需要下载到单片机中执行。编写软件之前得首先选择一种合适的语言以及配套的编辑器和编译软件。最后还要选择一款与所选单片机的下载器或下载软件来把编写的程序下载到单片机中执行。

2.2 主程序设计

系统软件采用C语言编写,按照模块化的设计思路设计。首先分析程序所要实现的功能,程序要实现串口通信,静态显示,动态显示三大功能

[8]。其功能结构如图2.1所示。通信程序接收上位机数据,交给主程序处理再通过控制程序选择不同的显示程序进行显示。

主程序的工作流程如图2.2所示:

图2.2 主程序流程图

程序开始时首先必须对单片机进行初始化,其中初始化的内容包括:中断优先级的设定,中断初始化,串行通信时通信方式的选择和波特率的设定,各IO口功能的设定等。初始化完成后程序进入待机状态等待中断的发生,该程序中主要用到了两个外部中断源和串行中断。外部中断源由按键的电平变化触发,外部中断主要功能是选择LED点阵显示屏的控制方式是由按键控制还是上位机控制和显示状态是静态显示还是动态显示。串行中断包括发送中断和接收中断都是由软件触发。中断产生后由预先初始化时设定跳转执行中断子程序。中断程序设定了LED点阵显示屏所要显示的内容和显示的方式,最后执行的是各种显示程序。按照设定的方式和内容显示出所需要的内容。

主程序: void main()

{

time_init();

while(1)

{

display();

}

}

void t0_int() interrupt 1

{

EA=0;

TL0=0x18;

TH0=0x1C;

int_t++;

if(int_t==3) //移动速度10ms

{

int_t=0;

k=k+2;

if(k==count*32)

k=0;

}

EA=1;

}

2.3 显示程序的设计

2.3.1 点阵数据表达方式

该显示系统的显示数据采取纵向取模方向正向的数据存储方式如图

2.3 所示。

图2.3 点阵数据原理图

即数据是纵向的,一个像素对应一个位。8个像素对应一个字节,字节的位顺序是上高下低,比如从上到下8个点的状态是“*-----*-”(*为黑点,-为白点),则转换的字模数据是0x82(B1000_0010)。如图(2.3所示,一幅16×16的点阵画面点阵数据按照B1B2B3„„B31B32存储。所以一幅画面的数据量为32字节。画面显示时选通的第i列对应的数组元素为第i和i+16个元素[9]。

点阵整数据程序:unsigned char code hzdot[32*6] = {

/*文字: 上:此字体下对应的点阵为:宽x高=16x16 */

0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x03,0xF8,0x02,0x00,

0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0xFF,0xFE,0x00,0x00

/*文字: 海 ;此字体下对应的点阵为:宽x高=16x16 */

0x01,0x00,0x21,0x00,0x11,0xFC,0x12,0x00,0x85,0xF8,0x41,0x08,0x49,0x48,0x09,0x28,

0x17,0xFE,0x11,0x08,0xE2,0x48,0x22,0x28,0x23,0xFC,0x20,0x08,0x20,0x50,0x00,0x20

/*文字: 工 ;此字体下对应的点阵为:宽x高=16x16 */

0x00,0x00,0x00,0x00,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,

0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00

/*--文字:程 ;此字体下对应的点阵为:宽x高=16x16 */

0x08,0x00,0x1D,0xFC,0xF1,0x04,0x11,0x04,0x11,0x04,0xFD,0xFC,0x10,0x00,0x30,0x00,

0x39,0xFE,0x54,0x20,0x54,0x20,0x91,0xFC,0x10,0x20,0x10,0x20,0x13,0xFE,0x10,0x00

/*文字:技 ;此字体下对应的点阵为:宽x高=16x16 */

0x10,0x20,0x10,0x20,0x10,0x20,0x13,0xFE,0xFC,0x20,0x10,0x20,0x10,0x20,0x15,0xFC,

0x18,0x84,0x30,0x88,0xD0,0x48,0x10,0x50,0x10,0x20,0x10,0x50,0x51,0x88,0x26,0x06

/文字:术;此字体下对应的点阵为:宽x高=16x16 /

0x01,0x00,0x01,0x20,0x01,0x10,0x01,0x10,0x7F,0xFC,0x03,0x80,0x05,0x40,0x05,0x40,

0x09,0x20,0x11,0x10,0x21,0x08,0x41,0x04,0x81,0x02,0x01,0x00,0x01,0x00,0x01,0x00

/文字:大;此字体下对应的点阵为;宽x高=16x16 /

0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,

0x02,0x80,0x02,0x80,0x04,0x40,0x04,0x40,0x08,0x20,0x10,0x10,0x20,0x08,0xC0,0x06

/*文字:学;此字体对应的点阵为:宽x高=16x16 */

0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40

,0x02,0x80,0x04,0x1F,0xE0,

0x00,0x40,0x01,0x80,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00 };

2.3.2 LED显示屏的显示方式

LED点阵屏显示方式主要由静态显示和动态扫描显示两种。

对静态显示来说,每一个发光二极管都需要一套驱动电路,一帧画面输入以后便可一劳永逸地显示,除非我们改变了显示内容,需要重新输出新的点阵数据[10]。这种方式系统原理相对简单一些,但所需的译码驱动装量很多,引线多而繁杂,不便于大屏幕的制造,成本高,其可靠性也较低。

另一种动态扫描显示是把整个LED屏幕分成若干部分,每一幅画面的显示是显示完一部分后,又显示第二部分„„直到显示完最后一部分又重新开始显示第一部分,重复循环进行。在重复扫描速度足够快的情况下,我们看到的就是一幅稳定的画面。也就是说采用动态扫描显示需要不断进行画面的刷新。在这种方式下其显示驱动电路可重复利用,引线也大大减少,从而使硬件成本降低,且屏幕上的发光二极管轮流发光,使用时的耗电量大大降低。大屏幕的制造、维护要容易许多,可靠性也增加了。

两种显示方式的比较再结合51单片机IO口数量有限的原因决定采用动态扫描的方式进行显示。

动态扫描分为行扫描和列扫描两种方式区别在于选通端和数据输入端分别是行还是列[11]。在该显示系统中扫描显示的工作原理如图2.4所示,先选通列然后再从行送入对应列的数据,这样从第1列到第16列循环往复,只要切换的速度足够的快利用人眼的延时特性就可以看见一幅稳

定的画面。

图2.4 扫描显示程序原理图

扫描方式程序:

for(Hadd=0;Hadd

{

H_add=0x0f-Hadd;

Res=1;

G1=1;

for(Ladd=0;Ladd

i=0x7f-(Hadd*8+Ladd);

SBUF=word[i];

while(TI==0);

TI=0;

}

Lock(); //每列锁存一次 G1=0;

delay(); //延时

}

2.3.3 各种显示方式程序

显示程序分为静态显示程序、左移显示、右移显示、上移显示、下移显示五种种显示方式[12]。其中上下左右移动程序都调用了静态显示程序为子程序。静态显示程序流程图如图2.5所示:

图2.5 静态显示程序流程图

显示采用的是列扫描的显示方式,选通一列后按照列与数据元素的对

应关系第i列对应的行数据为数组中的第i和第i+16个元素。将对应元素的由低至高位依次从端口输出具体做法为将元素向右逻辑移位后再与0X01相与,所得结果通过单片机端口输出到串并转换器的A端,锁存在锁存器里完成一列数据移位后再将其输出。如此依次循环选通各列来显示所需画面。

图2.6 左右移/上下移程序流程图

动态显示程序流程如图2.6所示,根据显示数据的存储原理通过改变实际LED列与数据逻辑列的方法来实现程序的左右移动。显示数据与列的对应关系为:第i列对应的数据为数组中i和第2×i个数据。所以当ULN2803选通时,而送入后一列的数据则相当于画面左移移位,同理送入前一列数据相当于右移一位。如此循环则产生一幅稳定运动的画面。

显示数组中,第1至16个元素的第8至第1位LED显示屏中的第1至第8行。同理第17至32个元素的第8至第1位LED显示屏中的第9至第16行。所以将元素数据进行逻辑位移便能产生上下移动的效果。 1)静态显示程序:

while(1) {

for(Hadd=0;Hadd

H_add=0x0f-Hadd;

Res=1; G1=1;

for(Ladd=0;Ladd

i=0x7f-(Hadd*8+Ladd);

SBUF=word[i]; while(TI==0); TI=0;

}

Lock(); //每列锁存一次 G1=0;

delay(); //延时

}

}

2)左移显示程序: void sdisplay_left() { if(m==0) { z++; m=30;

} if(z==15) {

l=0; z=0;

} display(); m--; }

3) 右移显示程序 void sdisplay_right( ) { if(m==1) {

z--; m=30; }

if(z==-15) {

l=0; z=0;

} display(); m--; } 4)上移显示 void sdisplay_up() { z=0; l=1; m=0;

for(k=0;k

for(n=0;n

temp=ziku[n];

temp

temp=temp|ziku[n+16]; temp>=8; ziku[n]=temp;

} do {

display(); m++; if(m==50) {

l=0; m=0;

} else l=1;

} while(l); } }

5)下移显示

void sdisplay_down() { z=0; l=1; m=0;

for(k=0;k

for(n=0;n

temp=ziku[n]; temp

temp=temp|ziku[n+16]; temp>>=1; ziku[n+16]=temp; temp>>=8; ziku[n]=temp;

} do {

display(); m++; if(m==50)

{

l=0; m=0;

} else l=1;

} while(l); 2.4 通信程序的设计

程序设计时还要考虑到中断优先级的问题。因为不同的中断同时产生而CPU响应的顺序取决于内部查询顺序[13]。

设置串口工作方式1,波特率9600,计算可得计数器初值的十六进制表示为0XFD。通信协议如表2.1所示:

表2.1 串口通信数据结构

数据结构 内容 作用

第1个字节 起始标志位‘S’ 判断是否开始接收数据

第2至第33个字节

显示数据 LED的显示内容

第34个字节 控制指令 控制LED显示方式

具体串口中断程序流程图如图2.7所示,在主程序中先进行了串行中断的初始化,初始化内容包括了串行工作方式选择,波特率的设定,计数初值的设定。程序开始进入中断等待,当PC机向单片机发送数据时产生中断接收允许位RI置1,将SBUF(缓冲寄存器)中的值输入到暂存器中进行数据处理。首先判断数据是否设定的起始标志位‘S’如果是则开始

接收起始位后的33个字节,不是则中断返回继续等待。接收到第34个字节后便将收到的数据发送回PC机进行验证比较。

图2.7 通信程序流程图

通讯程序:

void delay(uint ms) {

uint i,j;

for(i=0;i

//定时器初始化 void time_init() {

SCON=0x00; TMOD=0x01;

IE|=0x82; //开中断

TL0=0x18; //定时大概一毫秒 TH0=0xFC;

TR0=1; //启动定时器 ET0=1; EA=1; }

//串行发数据

void serial_send(uchar dat) {

SCON=0x00; SBUF=~dat; while(1) {

if(TI)

{

TI=0;break;

}

}

}

所有软件编写完成后都必须经过编译才能被单片机识别使用。为了减小软件的修改和优化难度,先把各子程序写为一个可单独执行的完整程序。各子程序编译没有错误后再输入单片机进行验证,这两项都通过后再将所有的程序整合到一起形成一个完整的程序再进行编译和验证[14]。

3 系统调试

软件调试主要是软件编译和将各功能块程序分别写入以验证其功能的可实现性。在进行功能调试前必须用KEIL C对所有程序进行编译,编译成功生产可执行的.hex后方可进行功能测试。

其中测试串口程序的功能是否完善不但要连接单片机系统还要借助串口调试工具。串口调试工具选用的是串口调试助手,其功能是按照设定的串口、波特率向单片机发送数据和接收单片机向PC机发送的数据。并且能把发送和接收的数据内容显示在状态栏内。因此只要设定PC机向单片机发送的内容和单片机向PC机发送的内容就可以通过串口调试助手验证串口通信是否准确,是否满足功能要求[15]。

(1) 打开该软件,新建工程target 1,如图3.1所示。

图3.1 KEIL C软件

(2)字模提取软件,如图3.2所示。

图3.2字模提取软件

(3)用C语言编写程序,如图3.3所示。编译,并产生HEX文件。

图3.3 C语言编写的程序

(4)打开烧写软件并通过计算机端口USB TO RS232把产生的HEX文件烧写到单片机里面,如图3.4所示。

图3.4 烧写软件

(5)显示画面,如图3.5所示。

图3.5 效果显示

4 总结

本文所介绍的交通诱导屏的设计采用了宏晶科技的STC89C516RD+单片机作为系统的中央控制单元,并结合软件编程,实现不同方向LED屏的静态显示、动态显示,简化了系统操作,丰富了系统功能,符合未来交通智能化、网络化的发展方向。

本系统经过改进后还可以应用到广告宣传的领域,通过远程通信实现对点阵屏幕的远程控制。在通信网络日益完善、通信工具日趋普及的今天,是一种很值得推广的技术。该系统具有较高的性能价格比,由此开发出的智能信息显示产品符合未来智能交通的发展方向,很具市场发展潜力。

参考文献

[1] 李广弟,朱月秀,冷祖祁.单片机基础[M].北京航空航天出版社,2001.7.

[2] 楼然苗,李光飞.51系列单片机设计实例[M].北京航空航天出版社,2003.3.

[3] 唐俊翟.单片机原理与应用[M].冶金工业出版社,2003.9.

[4] 刘瑞新,赵全利,肖兴达.单片机原理及应用教程[M].机械工业出版社,2003.7.

[5] 吴国经.单片机应用技术[M].中国电力出版社,2004.1.

[6] 靳桅,邬芝权,李骐,刘全.基于51系列单片机的LED显示屏开发技术[M].北京航

空航天大学出版社,2009.2.

[7] 胡哲源.掌握Visual C++ --MFC程序设计与剖析[M].清华大学出版社,2001.4.

[8] 木林森,高峰霞,罗丽琼.Visual C++6.0使用与开发[M].清华大学出版社,

1999.7.

[9] 陈必红.用C++语言编写数学常用算法[M].人民邮电出版社,1999.8.

[10]侯丽玲.基于AT89S52单片机的LEDD点阵显示屏控制系统的设计[J].漳州职业技

术学院学报,2008.3.

[11] 吴金戍,沈庆阳,郭庭吉.8051单片机实践与应用[M].清华大学出版社,2003.7.

[12] 诸昌钤.LED显示屏系统原理及工程技术[M].电子科技大学出版社,2001.3.

[13] 关积珍.LED显示屏发展状况及趋势[M].世界电子元器件出版社,2000.2.

[14] 关积珍,陆家和.我国LED显示屏技术和产业发展及展望[M].电子科技大学出版

社,2004.2.

[15] 缪思恩.LED大屏幕显示电路设计[M].电子技术应用出版社,1996.8.

附 录

(1) 静态程序:

#include

sbit Ddat=P3^0; //点阵数据

sbit Dclk=P3^1; //数据时钟

sbit Dlat=P1^6; //数据锁存

sbit Res=P1^5; //总清除

sbit G1=P1^7; //154 G1

unsigned char yd;

#define H_add P1 //154 IN

unsigned char code word[]={ “文字” };

//**********************************延时

delay()

{ unsigned char p;

for(p=0;p

}

//**锁存数据*************************

Lock()

{Dlat=1; //锁存

Dlat=0; }

//**主程序************************

main()

{ unsigned char Ladd,Hadd,i;

SCON=0x00;//串行口控制寄存器

while(1)

{ for(Hadd=0;Hadd

Res=1;

G1=1;

for(Ladd=0;Ladd

SBUF=word[i];//数据接收缓冲区

while(TI==0);

TI=0;//发送中断标志位,需要软件复位

}

Lock(); //每列锁存一次

G1=0;

delay(); //延时}}}

(2) 动态程序;

#include

#define uint unsigned int

#define uchar unsigned char

sbit Ddat=P3^0; //点阵数据

sbit Dclk=P3^1; //数据时钟

sbit Dlat=P1^6; //数据锁存

sbit Res=P1^5; //总清除

sbit G1=P1^7; //154 G1

uchar int_t,move;

uchar i,j;

uchar count=6; //2个字字数小于65535个

uint k=0;

uchar move_flag=0;

unsigned char code hzdot[32*6] = { “文字” }; //********************延时程序***************** void delay(uint ms)

{ uint i,j;

for(i=0;i

for(j=0;j

//定时器初始化

void time_init()

{ SCON=0x00;//串行口控制寄存器

TMOD=0x01;//定时/计数器方式控制寄存器,方式1,16位计数器 IE|=0x82; //开中断,定时器0允许控制

TL0=0x18; //定时大概一毫秒63536*2

TH0=0xFC;

TR0=1; //启动T0定时器

ET0=1;//定时器0允许中断

EA=1; //允许中断总控制

}

//串行发数据

void serial_send(uchar dat)

{ SCON=0x00; //串行口控制寄存器

SBUF=~dat; //数据接收缓冲区

while(1)

{ if(TI) //发送中断标志位,执行完置1

{

TI=0;break;

} }}

//**锁存数据****************************** Lock()

{Dlat=1; //锁存

Dlat=0; }

//显示

void display()

{ uchar m;

j=k;

for(i=0;i

{ P1=i;

move_flag=0;

G1=1;

Res=1;//清零

serial_send(hzdot[j+1]);

serial_send(hzdot[j]);

j=j+2; //跳到下个字模 if(j==32*count) j=0;

Lock(); //每列锁存一次

G1=0; }}

//***************************main**************** void main()

{time_init();//定时器T0

while(1)

{display();}}

void t0_int() interrupt 1

{ EA=0;//不允许中断

TL0=0x18;

TH0=0x1C; //T0定时器

int_t++;

if(int_t==3) //移动速度10ms

{ int_t=0;

k=k+2;

if(k==count*32)

k=0; }

EA=1;}//允许中断

目 录

摘要 .........................................................0 0 引言 .......................................................1 1硬件方案设计................................................2

1.1总体设计系统硬件方案......................................2

1.1.1 电源设计...............................................2

1.1.2控制电路方案............................................3

1.1.3显示屏驱动显示电路......................................4

1.1.4串口通信电路............................................5

1.2芯片介绍..................................................5

1.2.1 STC单片机..............................................5

1.2.2 74HC595................................................7

1.2.3 74HC154.................................................8

1.2.4 MAX232..................................................8

1.3 硬件原理图...............................................9 2系统软件设计...............................................11

2.1系统软件方案.............................................11

2.2主程序设计...............................................12

2.3显示程序的设计...........................................15

2.3.1点阵数据表达方式.......................................15

2.3.2 LED显示屏的显示方式..................................18

2.3.3各种显示方式程序......................................20

2.4通信程序的设计..........................................27 3系统调试..................................................31 4总结......................................................5参考文献..................................................6附录......................................................

34 35 36

摘 要

本文介绍了一款以单片机STC89C51RC/RD+为控制器的LED交通诱导点阵显示屏系统的设计。该系统可实现中英文字符的显示和静态、动态显示,采用PC作为上位机的结构构建,实现点阵LED屏以多样化的方式显示各种信息的功能。该屏具有运行可靠、安全、节能、成本低、使用方便的特点。并且可以通过级连的方式来扩大显示屏幕的尺寸以达到增加显示内容的目的。

系统采用PC机作为上位机,上位机向单片机发送控制命令和上位机所存储的显示代码,STC89C51RC/RD+单片机接收并处理PC机的控制命令以及显示代码,由显示驱动模块驱动一个16×16分辨率的LED点阵显示屏的扫描显示。PC机与单片机之间的通信采用RS—232C通信标准来实现。所选用的STC89C51RC/RD+单片机具有价格低廉程序写入方便的特点使得整个系统方便维护和检修。除此之外,该系统只占用了单片机少量的I /O口和内存,为系统留下了功能扩展的空间。

关键词: 交通诱导屏,STC89C51RC/RD+,LED

交通诱导屏软件设计

孙宗坤 164209131

0引言 一般意义上我们说的交通诱导屏通常指由LED发光二级管制作而做成的,用来作交通诱导的显示屏[1],它一般被应用到高速公路, 十字路口等地方,时刻提醒人们,出行要注意安全,向市民宣传交通常识,及时提供市区交通信息, 同时它也常用来显示一些天气,温度等信息,给出行的司机朋友带来方便。有助于营造良好的交通秩序。

交通诱导屏指由LED发光二级管制作而做成的,用来起到交通诱导作用的显示屏,它一般被应用到高速公路,冠金交通诱导屏由屏体,驱动系统,控制系统,通讯设备,电源系统和门架,箱体等组成,交通诱导屏含图形诱导标志,是由普通道路标志和可变信息标志相结合组成的多功能信息显示屏[2]。

交通诱导屏以呈现道路整体路线轮廓的图形方式向驾驶员提供前方的道路走向,具有指路牌的作用;在静态图形的路段标识区域镶嵌LED可变光带,通过LED的不同颜色发光,形象标识这些路段处于畅通(绿色)、堵塞(红色)或拥挤(橙色)状态的实时路况,供驾驶员判断和选择适当的行驶路线,起到交通诱导的作用。

交通诱导屏具有显示形象直观、信息量大、视认时间相对较短、为不熟悉路况的驾驶员指路等显著优点,适用于城市道路和公路主要干线的路网密集地段。

1硬件方案设计

1.1体系统设计方案

总体系统设计主要由上位机,通信系统,单片机系统,译码电路,显示驱动电路和16×16的点阵屏六部分组成。如图1.1所示。

图1.1 总体系统设计

1.1.1电源设计

在系统中MAX232、74HC154、74HC595、STC89C51RC/RD+都需要5V的供电电压,在系统开发过程中可以使用电脑USB供电。在实际的大屏幕LED显示屏设计中,用电脑USB供电明显不切实际。此时需要对民用的220V进行降压整流为5V直流电压为显示系统供电。电路图如图1.2所示。

图1.2电源电路

1.1.2 控制电路方案

控制电路设计中采用的是单片机系统,该系统必须要是工作在一个最小系统(指单片机的可以的最小配置系统)。STC89C51RC/RD+的最小系统包括了外界时钟电路和复位电路,选定一定数量的IO口作为控制口控制外部的各种器件和数据的输出。根据功能选择一定的单片机端口添加外围的器件,具体电路如图1.3所示。

图1.3 控制电路

1.1.3 显示屏驱动显示电路

显示屏分成屏体和控制器两部分,屏体的主要部分是显示阵列以及有行列驱动电路。根据安装环境的空间以及考虑成本造价,决定使用多大尺寸的显示屏,从而决定了显示模块的数量,这里以8×8点阵为例,模块单位为256点阵,即需要16块点阵模块。汉字一般是256点阵,那么该屏可以一次显示4个汉字[3]。

采用扫描方式进行显示时,分成两步,对于每行有一个行驱动器,各行的同名列共用一个列驱动器,由单片机给出行选通信号,从第一行开始依次对各行进行扫描,对于列,根据各列所存数据,确定相应的列驱动器是否将该列与行接通,如果接通,那么该行该列的LED将亮,以同样方法进行显示全部各行都扫描一遍之后(一个扫描周期),再从第一行开始,进行下一个周期的扫描。只要一个扫描周期的时间比人眼1/25秒的滞留时间短,就不会感觉出闪烁现象。

显示驱动电路由74HC595组成。74HC595输入端是8位串行移位寄存器,输出端是8位并行缓存器具有锁存功能。由于CLK、LOAD端相连,而数据线分开,这样在同一脉冲下,行列的数据可以同时进行传入,行列数据准备好后,启动LOAD信号使所有数据同时输出并锁存,这样的设计较之传统方法提高了4倍的速度,占用I/O口少,由于CLK, LOAD引线较长,为避免线间干扰,在驱动6片74Ls595之后再加驱动芯片74L5244以驱动下一级驱动电路[4]。显示驱动电路如图1.4所示。

行列扫描驱动相当于对发光管脉冲供电,要获得与直流驱动方式相当的发光强度,脉冲驱动电流的平均电流I1与直流电流I2相同,它们与脉冲电流幅值If的关系为If=Ton/Th,×I1是扫描周期,Ton是导通时间,占空比是1/16,扫描频率应大于24HZ,I取8mA,那么I=8×16=128mA,发光管压降取2V,那么每个发光管应串接50的电阻。行驱动最大瞬间电流能达到128×80=10.240A。

图1.4 显示驱动电路

1.1.4 串口通信电路

串口通信电路在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯。RS-232-C接口(又称 EIA RS-232-C)是目前最常用的一种串行通讯接口。

1.2 芯片介绍

1.2.1 STC单片机

STC89C51RC/RD+系列单片机是宏晶科技推出的新一代超强抗干扰/ 高速/ 低功耗的单片机,指令代码完全兼容传统8051 单片机,12 时钟/ 机器周期和6 时钟/ 机器周期可任意选择[5]。实图如1.5所示。

图1.5 STC单片机

STC单片机的特点:

加密性强,很难解密或破解,解密费用很高、国内能解密的人少,一般的仿制者望而退步。

超强抗干扰:

1) 高抗静电(ESD保护)

2) 轻松过 2KV/4KV快速脉冲干扰

3) 宽电压,不怕电源抖动

4) 宽温度范围,-40℃~85℃

5) I/O 口经过特殊处理

6) 单片机内部的电源供电系统经过特殊处理

7) 单片机内部的时钟电路经过特殊处理

8) 单片机内部的复位电路经过特殊处理

9) 单片机内部的看门狗电路经过特殊处理

三大降低单片机时钟对外部电磁辐射的措施:

1) 禁止ALE输出

2) 如选 6 时钟/机器周期,外部时钟频率可降一半

3) 单片机时钟振荡器增益可设为 1/2Gain

超低功耗:

1) 掉电模式:典型功耗

2) 空闲模式:典型功耗2mA

3) 正常工作模式:典型功耗4mA-7mA

4) 掉电模式可由外部中断唤醒,适用于电池供电系统,如水表、气表、便携设备等

1.2.2 74HC595

74HC595是硅结构的CMOS器件,兼容低电压TTL电路,遵守JEDEC标准。74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。数据在SCHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器 的数据输出到总线[6]。74HC595的管脚排列如图1.6所示。

图1.6 74HC595的管脚排列

1.2.3 74HC154

图1.7 74HC154的管脚排列

74HC154的管脚排列如图1.7所示。4线—16线译码器,可以实现地址的扩展。H = 高电平(HIGH voltage level) L = 低电平(LOW voltage level) X = 任意电平(don’t care)

只要控制端G1、G2任意一个为高电平,A、B、C、D任意电平输入都无效。G1、G2必须都为低电平才能操作芯片。

1.2.4 MAX232

MAX232芯片是美信(MAXIM)公司专准串口设计为RS-232标的单电源电平转换芯片,使用+5v单电源供电。如图1.8所示。第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。 第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。 其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。 8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。

TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。

图1.8 MAX 管脚图

1.3 硬件原理图

1)驱动电路,如图1.9所示。

图1.9驱动电路

2)显示电路,如图1-10所示。

图1.10 显示电路

3)主电路,如图1.11所示。

图1.11 主电路

2 系统软件设计

2.1 系统软件方案

软件的设计除了满足设计功能外还必须要满足易读写,方便下载和编译。设计目标和硬件总体结构确定的情况下,软件可以分为主程序,显示子程序,各种特效显示子程序,通信程序三个主要部分组成[7]。具体结构如图2.1所示。

图2.1 软件功能结构框图

软件的编写需要借助软件编辑器和编译软件,编译完成后还需要下载到单片机中执行。编写软件之前得首先选择一种合适的语言以及配套的编辑器和编译软件。最后还要选择一款与所选单片机的下载器或下载软件来把编写的程序下载到单片机中执行。

2.2 主程序设计

系统软件采用C语言编写,按照模块化的设计思路设计。首先分析程序所要实现的功能,程序要实现串口通信,静态显示,动态显示三大功能

[8]。其功能结构如图2.1所示。通信程序接收上位机数据,交给主程序处理再通过控制程序选择不同的显示程序进行显示。

主程序的工作流程如图2.2所示:

图2.2 主程序流程图

程序开始时首先必须对单片机进行初始化,其中初始化的内容包括:中断优先级的设定,中断初始化,串行通信时通信方式的选择和波特率的设定,各IO口功能的设定等。初始化完成后程序进入待机状态等待中断的发生,该程序中主要用到了两个外部中断源和串行中断。外部中断源由按键的电平变化触发,外部中断主要功能是选择LED点阵显示屏的控制方式是由按键控制还是上位机控制和显示状态是静态显示还是动态显示。串行中断包括发送中断和接收中断都是由软件触发。中断产生后由预先初始化时设定跳转执行中断子程序。中断程序设定了LED点阵显示屏所要显示的内容和显示的方式,最后执行的是各种显示程序。按照设定的方式和内容显示出所需要的内容。

主程序: void main()

{

time_init();

while(1)

{

display();

}

}

void t0_int() interrupt 1

{

EA=0;

TL0=0x18;

TH0=0x1C;

int_t++;

if(int_t==3) //移动速度10ms

{

int_t=0;

k=k+2;

if(k==count*32)

k=0;

}

EA=1;

}

2.3 显示程序的设计

2.3.1 点阵数据表达方式

该显示系统的显示数据采取纵向取模方向正向的数据存储方式如图

2.3 所示。

图2.3 点阵数据原理图

即数据是纵向的,一个像素对应一个位。8个像素对应一个字节,字节的位顺序是上高下低,比如从上到下8个点的状态是“*-----*-”(*为黑点,-为白点),则转换的字模数据是0x82(B1000_0010)。如图(2.3所示,一幅16×16的点阵画面点阵数据按照B1B2B3„„B31B32存储。所以一幅画面的数据量为32字节。画面显示时选通的第i列对应的数组元素为第i和i+16个元素[9]。

点阵整数据程序:unsigned char code hzdot[32*6] = {

/*文字: 上:此字体下对应的点阵为:宽x高=16x16 */

0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x03,0xF8,0x02,0x00,

0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0xFF,0xFE,0x00,0x00

/*文字: 海 ;此字体下对应的点阵为:宽x高=16x16 */

0x01,0x00,0x21,0x00,0x11,0xFC,0x12,0x00,0x85,0xF8,0x41,0x08,0x49,0x48,0x09,0x28,

0x17,0xFE,0x11,0x08,0xE2,0x48,0x22,0x28,0x23,0xFC,0x20,0x08,0x20,0x50,0x00,0x20

/*文字: 工 ;此字体下对应的点阵为:宽x高=16x16 */

0x00,0x00,0x00,0x00,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,

0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00

/*--文字:程 ;此字体下对应的点阵为:宽x高=16x16 */

0x08,0x00,0x1D,0xFC,0xF1,0x04,0x11,0x04,0x11,0x04,0xFD,0xFC,0x10,0x00,0x30,0x00,

0x39,0xFE,0x54,0x20,0x54,0x20,0x91,0xFC,0x10,0x20,0x10,0x20,0x13,0xFE,0x10,0x00

/*文字:技 ;此字体下对应的点阵为:宽x高=16x16 */

0x10,0x20,0x10,0x20,0x10,0x20,0x13,0xFE,0xFC,0x20,0x10,0x20,0x10,0x20,0x15,0xFC,

0x18,0x84,0x30,0x88,0xD0,0x48,0x10,0x50,0x10,0x20,0x10,0x50,0x51,0x88,0x26,0x06

/文字:术;此字体下对应的点阵为:宽x高=16x16 /

0x01,0x00,0x01,0x20,0x01,0x10,0x01,0x10,0x7F,0xFC,0x03,0x80,0x05,0x40,0x05,0x40,

0x09,0x20,0x11,0x10,0x21,0x08,0x41,0x04,0x81,0x02,0x01,0x00,0x01,0x00,0x01,0x00

/文字:大;此字体下对应的点阵为;宽x高=16x16 /

0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,

0x02,0x80,0x02,0x80,0x04,0x40,0x04,0x40,0x08,0x20,0x10,0x10,0x20,0x08,0xC0,0x06

/*文字:学;此字体对应的点阵为:宽x高=16x16 */

0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,0x7F,0xFE,0x40

,0x02,0x80,0x04,0x1F,0xE0,

0x00,0x40,0x01,0x80,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00 };

2.3.2 LED显示屏的显示方式

LED点阵屏显示方式主要由静态显示和动态扫描显示两种。

对静态显示来说,每一个发光二极管都需要一套驱动电路,一帧画面输入以后便可一劳永逸地显示,除非我们改变了显示内容,需要重新输出新的点阵数据[10]。这种方式系统原理相对简单一些,但所需的译码驱动装量很多,引线多而繁杂,不便于大屏幕的制造,成本高,其可靠性也较低。

另一种动态扫描显示是把整个LED屏幕分成若干部分,每一幅画面的显示是显示完一部分后,又显示第二部分„„直到显示完最后一部分又重新开始显示第一部分,重复循环进行。在重复扫描速度足够快的情况下,我们看到的就是一幅稳定的画面。也就是说采用动态扫描显示需要不断进行画面的刷新。在这种方式下其显示驱动电路可重复利用,引线也大大减少,从而使硬件成本降低,且屏幕上的发光二极管轮流发光,使用时的耗电量大大降低。大屏幕的制造、维护要容易许多,可靠性也增加了。

两种显示方式的比较再结合51单片机IO口数量有限的原因决定采用动态扫描的方式进行显示。

动态扫描分为行扫描和列扫描两种方式区别在于选通端和数据输入端分别是行还是列[11]。在该显示系统中扫描显示的工作原理如图2.4所示,先选通列然后再从行送入对应列的数据,这样从第1列到第16列循环往复,只要切换的速度足够的快利用人眼的延时特性就可以看见一幅稳

定的画面。

图2.4 扫描显示程序原理图

扫描方式程序:

for(Hadd=0;Hadd

{

H_add=0x0f-Hadd;

Res=1;

G1=1;

for(Ladd=0;Ladd

i=0x7f-(Hadd*8+Ladd);

SBUF=word[i];

while(TI==0);

TI=0;

}

Lock(); //每列锁存一次 G1=0;

delay(); //延时

}

2.3.3 各种显示方式程序

显示程序分为静态显示程序、左移显示、右移显示、上移显示、下移显示五种种显示方式[12]。其中上下左右移动程序都调用了静态显示程序为子程序。静态显示程序流程图如图2.5所示:

图2.5 静态显示程序流程图

显示采用的是列扫描的显示方式,选通一列后按照列与数据元素的对

应关系第i列对应的行数据为数组中的第i和第i+16个元素。将对应元素的由低至高位依次从端口输出具体做法为将元素向右逻辑移位后再与0X01相与,所得结果通过单片机端口输出到串并转换器的A端,锁存在锁存器里完成一列数据移位后再将其输出。如此依次循环选通各列来显示所需画面。

图2.6 左右移/上下移程序流程图

动态显示程序流程如图2.6所示,根据显示数据的存储原理通过改变实际LED列与数据逻辑列的方法来实现程序的左右移动。显示数据与列的对应关系为:第i列对应的数据为数组中i和第2×i个数据。所以当ULN2803选通时,而送入后一列的数据则相当于画面左移移位,同理送入前一列数据相当于右移一位。如此循环则产生一幅稳定运动的画面。

显示数组中,第1至16个元素的第8至第1位LED显示屏中的第1至第8行。同理第17至32个元素的第8至第1位LED显示屏中的第9至第16行。所以将元素数据进行逻辑位移便能产生上下移动的效果。 1)静态显示程序:

while(1) {

for(Hadd=0;Hadd

H_add=0x0f-Hadd;

Res=1; G1=1;

for(Ladd=0;Ladd

i=0x7f-(Hadd*8+Ladd);

SBUF=word[i]; while(TI==0); TI=0;

}

Lock(); //每列锁存一次 G1=0;

delay(); //延时

}

}

2)左移显示程序: void sdisplay_left() { if(m==0) { z++; m=30;

} if(z==15) {

l=0; z=0;

} display(); m--; }

3) 右移显示程序 void sdisplay_right( ) { if(m==1) {

z--; m=30; }

if(z==-15) {

l=0; z=0;

} display(); m--; } 4)上移显示 void sdisplay_up() { z=0; l=1; m=0;

for(k=0;k

for(n=0;n

temp=ziku[n];

temp

temp=temp|ziku[n+16]; temp>=8; ziku[n]=temp;

} do {

display(); m++; if(m==50) {

l=0; m=0;

} else l=1;

} while(l); } }

5)下移显示

void sdisplay_down() { z=0; l=1; m=0;

for(k=0;k

for(n=0;n

temp=ziku[n]; temp

temp=temp|ziku[n+16]; temp>>=1; ziku[n+16]=temp; temp>>=8; ziku[n]=temp;

} do {

display(); m++; if(m==50)

{

l=0; m=0;

} else l=1;

} while(l); 2.4 通信程序的设计

程序设计时还要考虑到中断优先级的问题。因为不同的中断同时产生而CPU响应的顺序取决于内部查询顺序[13]。

设置串口工作方式1,波特率9600,计算可得计数器初值的十六进制表示为0XFD。通信协议如表2.1所示:

表2.1 串口通信数据结构

数据结构 内容 作用

第1个字节 起始标志位‘S’ 判断是否开始接收数据

第2至第33个字节

显示数据 LED的显示内容

第34个字节 控制指令 控制LED显示方式

具体串口中断程序流程图如图2.7所示,在主程序中先进行了串行中断的初始化,初始化内容包括了串行工作方式选择,波特率的设定,计数初值的设定。程序开始进入中断等待,当PC机向单片机发送数据时产生中断接收允许位RI置1,将SBUF(缓冲寄存器)中的值输入到暂存器中进行数据处理。首先判断数据是否设定的起始标志位‘S’如果是则开始

接收起始位后的33个字节,不是则中断返回继续等待。接收到第34个字节后便将收到的数据发送回PC机进行验证比较。

图2.7 通信程序流程图

通讯程序:

void delay(uint ms) {

uint i,j;

for(i=0;i

//定时器初始化 void time_init() {

SCON=0x00; TMOD=0x01;

IE|=0x82; //开中断

TL0=0x18; //定时大概一毫秒 TH0=0xFC;

TR0=1; //启动定时器 ET0=1; EA=1; }

//串行发数据

void serial_send(uchar dat) {

SCON=0x00; SBUF=~dat; while(1) {

if(TI)

{

TI=0;break;

}

}

}

所有软件编写完成后都必须经过编译才能被单片机识别使用。为了减小软件的修改和优化难度,先把各子程序写为一个可单独执行的完整程序。各子程序编译没有错误后再输入单片机进行验证,这两项都通过后再将所有的程序整合到一起形成一个完整的程序再进行编译和验证[14]。

3 系统调试

软件调试主要是软件编译和将各功能块程序分别写入以验证其功能的可实现性。在进行功能调试前必须用KEIL C对所有程序进行编译,编译成功生产可执行的.hex后方可进行功能测试。

其中测试串口程序的功能是否完善不但要连接单片机系统还要借助串口调试工具。串口调试工具选用的是串口调试助手,其功能是按照设定的串口、波特率向单片机发送数据和接收单片机向PC机发送的数据。并且能把发送和接收的数据内容显示在状态栏内。因此只要设定PC机向单片机发送的内容和单片机向PC机发送的内容就可以通过串口调试助手验证串口通信是否准确,是否满足功能要求[15]。

(1) 打开该软件,新建工程target 1,如图3.1所示。

图3.1 KEIL C软件

(2)字模提取软件,如图3.2所示。

图3.2字模提取软件

(3)用C语言编写程序,如图3.3所示。编译,并产生HEX文件。

图3.3 C语言编写的程序

(4)打开烧写软件并通过计算机端口USB TO RS232把产生的HEX文件烧写到单片机里面,如图3.4所示。

图3.4 烧写软件

(5)显示画面,如图3.5所示。

图3.5 效果显示

4 总结

本文所介绍的交通诱导屏的设计采用了宏晶科技的STC89C516RD+单片机作为系统的中央控制单元,并结合软件编程,实现不同方向LED屏的静态显示、动态显示,简化了系统操作,丰富了系统功能,符合未来交通智能化、网络化的发展方向。

本系统经过改进后还可以应用到广告宣传的领域,通过远程通信实现对点阵屏幕的远程控制。在通信网络日益完善、通信工具日趋普及的今天,是一种很值得推广的技术。该系统具有较高的性能价格比,由此开发出的智能信息显示产品符合未来智能交通的发展方向,很具市场发展潜力。

参考文献

[1] 李广弟,朱月秀,冷祖祁.单片机基础[M].北京航空航天出版社,2001.7.

[2] 楼然苗,李光飞.51系列单片机设计实例[M].北京航空航天出版社,2003.3.

[3] 唐俊翟.单片机原理与应用[M].冶金工业出版社,2003.9.

[4] 刘瑞新,赵全利,肖兴达.单片机原理及应用教程[M].机械工业出版社,2003.7.

[5] 吴国经.单片机应用技术[M].中国电力出版社,2004.1.

[6] 靳桅,邬芝权,李骐,刘全.基于51系列单片机的LED显示屏开发技术[M].北京航

空航天大学出版社,2009.2.

[7] 胡哲源.掌握Visual C++ --MFC程序设计与剖析[M].清华大学出版社,2001.4.

[8] 木林森,高峰霞,罗丽琼.Visual C++6.0使用与开发[M].清华大学出版社,

1999.7.

[9] 陈必红.用C++语言编写数学常用算法[M].人民邮电出版社,1999.8.

[10]侯丽玲.基于AT89S52单片机的LEDD点阵显示屏控制系统的设计[J].漳州职业技

术学院学报,2008.3.

[11] 吴金戍,沈庆阳,郭庭吉.8051单片机实践与应用[M].清华大学出版社,2003.7.

[12] 诸昌钤.LED显示屏系统原理及工程技术[M].电子科技大学出版社,2001.3.

[13] 关积珍.LED显示屏发展状况及趋势[M].世界电子元器件出版社,2000.2.

[14] 关积珍,陆家和.我国LED显示屏技术和产业发展及展望[M].电子科技大学出版

社,2004.2.

[15] 缪思恩.LED大屏幕显示电路设计[M].电子技术应用出版社,1996.8.

附 录

(1) 静态程序:

#include

sbit Ddat=P3^0; //点阵数据

sbit Dclk=P3^1; //数据时钟

sbit Dlat=P1^6; //数据锁存

sbit Res=P1^5; //总清除

sbit G1=P1^7; //154 G1

unsigned char yd;

#define H_add P1 //154 IN

unsigned char code word[]={ “文字” };

//**********************************延时

delay()

{ unsigned char p;

for(p=0;p

}

//**锁存数据*************************

Lock()

{Dlat=1; //锁存

Dlat=0; }

//**主程序************************

main()

{ unsigned char Ladd,Hadd,i;

SCON=0x00;//串行口控制寄存器

while(1)

{ for(Hadd=0;Hadd

Res=1;

G1=1;

for(Ladd=0;Ladd

SBUF=word[i];//数据接收缓冲区

while(TI==0);

TI=0;//发送中断标志位,需要软件复位

}

Lock(); //每列锁存一次

G1=0;

delay(); //延时}}}

(2) 动态程序;

#include

#define uint unsigned int

#define uchar unsigned char

sbit Ddat=P3^0; //点阵数据

sbit Dclk=P3^1; //数据时钟

sbit Dlat=P1^6; //数据锁存

sbit Res=P1^5; //总清除

sbit G1=P1^7; //154 G1

uchar int_t,move;

uchar i,j;

uchar count=6; //2个字字数小于65535个

uint k=0;

uchar move_flag=0;

unsigned char code hzdot[32*6] = { “文字” }; //********************延时程序***************** void delay(uint ms)

{ uint i,j;

for(i=0;i

for(j=0;j

//定时器初始化

void time_init()

{ SCON=0x00;//串行口控制寄存器

TMOD=0x01;//定时/计数器方式控制寄存器,方式1,16位计数器 IE|=0x82; //开中断,定时器0允许控制

TL0=0x18; //定时大概一毫秒63536*2

TH0=0xFC;

TR0=1; //启动T0定时器

ET0=1;//定时器0允许中断

EA=1; //允许中断总控制

}

//串行发数据

void serial_send(uchar dat)

{ SCON=0x00; //串行口控制寄存器

SBUF=~dat; //数据接收缓冲区

while(1)

{ if(TI) //发送中断标志位,执行完置1

{

TI=0;break;

} }}

//**锁存数据****************************** Lock()

{Dlat=1; //锁存

Dlat=0; }

//显示

void display()

{ uchar m;

j=k;

for(i=0;i

{ P1=i;

move_flag=0;

G1=1;

Res=1;//清零

serial_send(hzdot[j+1]);

serial_send(hzdot[j]);

j=j+2; //跳到下个字模 if(j==32*count) j=0;

Lock(); //每列锁存一次

G1=0; }}

//***************************main**************** void main()

{time_init();//定时器T0

while(1)

{display();}}

void t0_int() interrupt 1

{ EA=0;//不允许中断

TL0=0x18;

TH0=0x1C; //T0定时器

int_t++;

if(int_t==3) //移动速度10ms

{ int_t=0;

k=k+2;

if(k==count*32)

k=0; }

EA=1;}//允许中断


相关文章

  • 智能交通疏缓拥堵专题资料集锦(二)
  • 智能交通 疏缓拥堵专题 资料集锦(二) 更新时间:2015-2-5 以下是小编整理的一些智能交通 疏缓拥堵专题资料,其中包括了有关 智能交通的学术研究文献及其文献简介.有关文档的下载,可以到研发 埠网站的专题模块,输入相应的专题名,搜索到相 ...查看


  • 智能交通: 完整应用解决方案(PPT)
  • - 第1章概述 1.1 方案背景 1.1.1 物联网产业分析 物联网(无线传感网)是集计算机.通信.网络.智能机算.传感器.嵌入式系统.微电子等多个领域综合交叉的新兴学科,它将大量多种类传感器组成自治的网络,实现对物理世界的动态协同感知,它 ...查看


  • 智能交通解决方案
  • 智能交通解决方案 第1章概述 1.1 方案背景 1.1.1 物联网产业分析 物联网(无线传感网)是集计算机.通信.网络.智能机算.传感器.嵌入式系统.微电子等多个领域综合交叉的新兴学科,它将大量多种类传感器组成自治的网络,实现对物理世界的动 ...查看


  • GPRS_城市停车诱导系统应用方案
  • 一. 需求分析 随着经济的持续发展和产业调整,大批人口将向城市转移,城市人口将不断增加.同时,经济活动日趋频繁,商业活动将更加活跃,车的数量和使用频率也将大大增加,对中心城市的交通带来沉重的压力:交通"停车难"日益成为制 ...查看


  • 高速公路全程监控解决方案
  • 高速公路全程监控解决方案 高速公路监控系统在高速公路的发展初期,就在整个机电合同中占有很重要的地位,基本上完全借鉴国外高速公路监控系统的设计思路,在高速公路沿线安装摄像机.车辆检测器.可变情报板.气象检测器等设备,以获取道路的实时视频图像, ...查看


  • 地铁隧道内壁龛尺寸对射流风机效果的影响
  • 暖通空调HV&AC2015年第45卷第7期 地铁工程暖通空调技术 地铁隧道内壁龛尺寸对射流 风机效果的影响* 中铁二院集团有限责任公司曾臻☆匡亚迪刘伊江 重庆大学肖益民 广东省建筑设计研究院屈永强 摘要现阶段地铁隧道通风设计中射流风 ...查看


  • 2016年智能交通行业现状及发展趋势分析
  • 中国智能交通行业现状调研及发展前景分 析报告(2016-2022年) 报告编号:1620022 行业市场研究属于企业战略研究范畴,作为当前应用最为广泛的咨询服务,其研究成果以报告形式呈现,通常包含以下内容: 一份专业的行业研究报告,注重指导 ...查看


  • XX市道路交通流量分析与预测系统
  • 目录 第1章 总体描述 ........................................................ 1 1.1 建设背景 ........................................ ...查看


  • 土地信息系统
  • 土地信息系统的原理及应用--以交通为例 摘要:地理信息技术的日臻成熟为GIS 在交通领域内的广泛应用创造了一定条件.本文主要介绍了智能交通地理信息系统的功能及开发环境,应用大系统控制论的思想论述了其开发技术用与实现策略,并预见了GIS 在交 ...查看


热门内容