成绩
南京工程学院
通信工程学院
课程设计说明书(论文)
题目LED点阵动态显示屏设计
课程名称单片机原理及应用B
专业通信工程
班级电力通信122
学生姓名
学号 21
设计地点信息楼C210
指导教师岳俊生
设计起止时间:2014年12月8日至2014年12月12日
目录
一、前言 (3)
二、课程设计的目的 (4)
三、课程设计的要求 (4)
四、课程设计的设备 (4)
五、课程设计的基本原理 (4)
六、课程设计的基本思路 (6)
七、课程设计的内容 (10)
九、拓展提升 (11)
十、课程设计小结 (14)
十一、主要参考文献 (14)
前言
在当今现代信息化社会的高速发展过程中,大屏幕显示已经从公共信息展示等商业应用向消费类多媒体应用渗透。随着宽带网络的发展,数字化的多媒体内容将在信息世界中占据主流,新型的大屏幕显示设备将代替传统电视机成为人们享受信息和多媒体内容的中心。
LED点阵显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。同时也可广泛应用到军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业。
目前大多数的LED点阵显示系统自带字库。其显示和动态效果(主要是显示内容的滚动)的实现主要依靠硬件扫描驱动,该方法虽然比较方便,但显示只能按照预先的设计进行。而实际上经常会遇到一些特殊要求的动态显示,比如电梯运行中指示箭头的上下移动、某些智能仪表幅值的条形显示、广告中厂家的商标显示等。这时一般的显示系统就很难达到要求。
另外,由于受到存储器本身的局限,其特殊字符往往难以显示,同时显示内容也不能随意更改。因此就提出了一种利用PC机和单片机控制的LED显示系统通信方法。该方法可以对显示内容进行实时控制,从而实现诸如动态显示效果。同时用户也可以在PC机上进行显示效果的预览,显示内容亦可以即时修改。同时它具有发光率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。并广泛的用于公交汽车、商店、体育场馆、车站、学校、银行、高速公路等公共场所的信息发布和广告宣传。
在其历史的演变过程中,出现了多种信息传播媒体:但就其性能看:如阴级管(crt)或石英管(dv)大型电视,成本非常昂贵,在不需要超大画面且在室内使用时效果尚可;彩色液晶显示同样成本昂贵、电路复杂,面积有限,受视频角的影响非常大,可视角度很小;影象投影设备亮度小、清晰度差(画面受光不均匀);电视墙表面有分割线,视觉上有异物感,室外应用时亮度效果差。而LED显示屏以其受空间限制较小,并可以根据用户要求设计屏的大小,具有全彩色效果,视角大,可以用于显示文字、图案、图象、动画、视频、录象信号等各种信息的特点得到了突飞猛进的发展。
LED点阵动态显示屏设计
二、课程设计的目的
1.掌握LED点阵的结构及工作原理;
2.掌握单片机LED点着驱动程序的编写方法。
三、课程设计的要求
1.单片机通过P1、P2端口驱动16×16 LED点阵的列(J1);
2.单片机通过P0、P3端口驱动16×16 LED点阵的行(J1);
3采用逐行显示+滚屏的驱动方法,在LED点阵上显示汉字“欢迎您”。
四、课程设计的设备
硬件:PC机,nKDE-51单片机实验教学系统,P89V51RD2单片机(已激活SoftICE方式)
软件:Keil C51集成开发环境、串口调试工具软件
五、课程设计的基本原理
1、16×16点阵
图1是由4块8×8 LED点阵模块级联而成的16×16LED点阵,共16行、16列,每个行列的交叉点有一个发光二极管,共256个独立的LED。对该点阵模块的驱动采用行列驱动及动态扫描的方式。模块的列驱动由两块ULN2803完成,元件标号U1、U2,列驱动信号由J1引入。当列驱动数据送到J1后,如果某位为高,则对该列LED的驱动有效。模块的行驱动由J2引入,通过16各PNP星三极管完成。当列驱动数据送到J2后,如
果某位为低,则对该行LED的驱动有效。当行列驱动同时有效时,对应交叉点上的LED点亮。
下面特给出8×8 点阵LED的工作原理。图2为8×8点阵LED外观及引脚图,其等效电路如图3所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则C0L1=1,ROW1=0即可。
图1 四块8x8点阵LED级联成16x16点
图2 8×8点阵LED外观及引脚图
图3 8×8点阵LED等效电路
2、LED驱动显示采用动态扫描方法
动态扫描方式是逐行轮流点亮,这样扫描驱动电路就可以实现多行的同名列共用一套列驱动器。以16×16点阵为例,把所有同一行的发光管的阴极连在一起,把所有同一列的发光管的阳极连在一起(共阴的接法),先送出对应第1列发光管亮灭的数据并锁存,然后选通第1列使其燃亮一定的时间,然后熄灭;再送出第2列的数据并锁存,然后选通第2列使其燃亮相同的时间,然后熄灭;….第16列之后,又重新燃亮第1列,反复轮回。当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形。显示数据可通过单片机的P0,,P2口接驱动电路传输到点阵行引脚。
点阵的移动列扫描方式左移动:列向组字显示字符水平方向的移动。将原来字符点阵数组的16个数据重复一遍延长,点阵数组的数据个数为32个。每扫描一帧取8个数据显示,下一帧取数要在数组中后移一个数取数。循环一遍扫16帧。可以假想有两块16×16的点阵模块(共32帧)水平平行排列,用一个恰好能罩住16列点阵的中空方框去罩这个点阵,第1(第1帧)罩住最左边数起第一列开始的16列,就扫描显示这16列;第2次(第2帧)使方框右移一列,罩住做左边数起第2列开始的16列,就扫描显示这16列;这样每扫描完一帧使方框右移一列,最后第16次(第16帧)时,罩住左边数起的第16列开始的16列,就扫描显示这16列。如此完成16帧画面的扫描显示,也就完成了整个一次移动循环扫描、之后反复循环,即可呈现显示字符沿水平向左移动的图像
以上完成一个图形移动的方法,也可以看成是移动16个不同的字形,首先扫描第一个字型,同样是16行,16次扫描,16次显示;完成一个字型的扫描以后,再扫描第二个字型;完成第二个字型的扫描之后,再扫描第三个字型··依此类推,即可产生该文字的左移的感觉。
六、课程设计的基本思路
1、功能设计
1、可在16*16LED 屏上向左滚动显示“电力通信”
2、可在16*16LED 屏上向上滚动显示“一二二”
3、可通过按键实现向左滚动和向上滚动功能的切换
4、可通过开关控制LED 屏显示数据的开关,若关闭LED 屏,则一直显示“我是陆静”,打开LED 屏后向左滚动显示“电力通信”
2、软件设计流程图
七、课程设计的内容
1、电路连接
1) CPU 板上的P1和拓展总线IO 板上的LED 点阵行驱动COL1--COL8相连,P1.0和COL1对齐;
2) CPU 板上的P2和拓展总线IO 板上的LED 点阵行驱动COL9--COL16相连,P2.0和COL1对齐;
3) CPU 板上的P0和拓展总线IO 板上的LED 点阵行驱动ROW1--ROW8相连,
no
Yes
no
Yes
开始
开关控制端开启?
调用显示程序向左滚动显示“电力通信”
切换控制端是否有切换?
循环显示“我是陆静”
调用显示程序向上滚动显示“一二二”
结束
P0.0和ROW1对齐;
4)CPU板上的P3和拓展总线IO板上的LED点阵行驱动ROW9—ROW16相连,
P3.0和ROW1对齐。
5)CPU板上的P0^0与基本IO板上的JP1相连,代替实验上已坏的按键,
实现左右和上下显示的切换功能
6)CPU板上的P0^7与基本IO板上的JP8相连,作为显示屏的开关
2.字模设计
3、程序设计
#include
#define uchar unsigned char
bit n;
sbit sw2=P2^7; //定义按键key
sbit sw1=P0^0; //定义按键sw1
uchar code code1[]= //字模
{
0x00,0x80,0xFC,0x61,0x24,0x19,0x26,0x07,0xFD,0x7D,0x24,0x99,0x24,0x95,0xFC,0x91,
0x40,0x9C,0x48,0x82,0x48,0x81,0xFF,0xBF,0x48,0x81,0x48,0x82,0x40,0xC4,0x00,0x00,/*"魅",0*/
0x00,0x00,0x10,0x80,0x10,0x40,0x10,0x20,0x10,0x18,0x10,0x06,0xFF,0x01,0x10,0x00,
0x10,0x20,0x10,0x40,0x10,0x80,0x10,0x40,0xF0,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,/*"力",1*/
0x04,0x00,0xE4,0xFF,0x24,0x00,0x24,0x08,0x64,0x09,0xA4,0x09,0x24,0x09,0x3F,0x7F,
0x24,0x09,0xA4,0x09,0x64,0x09,0x24,0x48,0x24,0x80,0xE4,0x7F,0x04,0x00,0x00,0x00,/*"
南",2*/
{0x00,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0xFC,0x3F, {0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x00,0x20,0x00,0x00,/*"工",3*/
};
uchar code code2[]=
{
0x14,0x20,0x24,0x10,0x44,0x4C,0x84,0x43,0x64,0x43,0x1C,0x2C,0x20,0x20,0x18,0x10,0x0F ,0x0C,0xE8,0x03,0x08,0x06,0x08,0x18,0x28,0x30,0x18,0x60,0x08,0x20,0x00,0x00,/*"欢",0*/
0x40,0x40,0x41,0x20,0xCE,0x1F,0x04,0x20,0x00,0x40,0xFC,0x47,0x04,0x42,0x02,0x41,0x02, 0x40,0xFC,0x5F,0x04,0x40,0x04,0x42,0x04,0x44,0xFC,0x43,0x00,0x40,0x00,0x00,/*"迎",1*/ 0x80,0x00,0x40,0x20,0x30,0x38,0xFC,0x03,0x03,0x38,0x90,0x40,0x68,0x40,0x06,0x49,0x04 ,0x52,0xF4,0x41,0x04,0x40,0x24,0x70,0x44,0x00,0x8C,0x09,0x04,0x30,0x00,0x00/*"您",2*/
};
void delay(int m)
{ int i;
while(m--)
for(i=0;i<40;i++);
}
void XIANSHI(uchar *Buffer,uchar N,uchar Time) //流动显示N个汉字,三个参数:字符串字模首地址、字数、显示流动速度
{
uchar Num,i,j,row,pos; //循环变量:字数计数、16次流动、16列扫描
for(Num=0;Num{
for(i=0;i<16;i++) //字到字流动16次左移才能完成
{
for(j=0;j