单片机课程设计LED点阵动态显示屏设计.docx

上传人:b****7 文档编号:15919960 上传时间:2023-07-09 格式:DOCX 页数:15 大小:1.17MB
下载 相关 举报
单片机课程设计LED点阵动态显示屏设计.docx_第1页
第1页 / 共15页
单片机课程设计LED点阵动态显示屏设计.docx_第2页
第2页 / 共15页
单片机课程设计LED点阵动态显示屏设计.docx_第3页
第3页 / 共15页
单片机课程设计LED点阵动态显示屏设计.docx_第4页
第4页 / 共15页
单片机课程设计LED点阵动态显示屏设计.docx_第5页
第5页 / 共15页
单片机课程设计LED点阵动态显示屏设计.docx_第6页
第6页 / 共15页
单片机课程设计LED点阵动态显示屏设计.docx_第7页
第7页 / 共15页
单片机课程设计LED点阵动态显示屏设计.docx_第8页
第8页 / 共15页
单片机课程设计LED点阵动态显示屏设计.docx_第9页
第9页 / 共15页
单片机课程设计LED点阵动态显示屏设计.docx_第10页
第10页 / 共15页
单片机课程设计LED点阵动态显示屏设计.docx_第11页
第11页 / 共15页
单片机课程设计LED点阵动态显示屏设计.docx_第12页
第12页 / 共15页
单片机课程设计LED点阵动态显示屏设计.docx_第13页
第13页 / 共15页
单片机课程设计LED点阵动态显示屏设计.docx_第14页
第14页 / 共15页
单片机课程设计LED点阵动态显示屏设计.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机课程设计LED点阵动态显示屏设计.docx

《单片机课程设计LED点阵动态显示屏设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计LED点阵动态显示屏设计.docx(15页珍藏版)》请在冰点文库上搜索。

单片机课程设计LED点阵动态显示屏设计.docx

单片机课程设计LED点阵动态显示屏设计

成绩

南京工程学院

通信工程学院

课程设计说明书(论文)

 

题目LED点阵动态显示屏设计

课程名称单片机原理及应用

专业通信工程

班级电力通信

学生姓名

一、前言.....................................3

九、拓展提升.................................11

 

前言

 在当今现代信息化社会的高速发展过程中,大屏幕显示已经从公共信息展示等商业应用向消费类多媒体应用渗透。

随着宽带网络的发展,数字化的多媒体内容将在信息世界中占据主流,新型的大屏幕显示设备将代替传统电视机成为人们享受信息和多媒体内容的中心。

LED点阵显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。

它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。

同时也可广泛应用到军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业。

目前大多数的LED点阵显示系统自带字库。

其显示和动态效果(主要是显示内容的滚动)的实现主要依靠硬件扫描驱动,该方法虽然比较方便,但显示只能按照预先的设计进行。

而实际上经常会遇到一些特殊要求的动态显示,比如电梯运行中指示箭头的上下移动、某些智能仪表幅值的条形显示、广告中厂家的商标显示等。

这时一般的显示系统就很难达到要求。

另外,由于受到存储器本身的局限,其特殊字符往往难以显示,同时显示内容也不能随意更改。

    因此就提出了一种利用PC机和单片机控制的LED显示系统通信方法。

该方法可以对显示内容进行实时控制,从而实现诸如动态显示效果。

同时用户也可以在PC机上进行显示效果的预览,显示内容亦可以即时修改。

同时它具有发光率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。

并广泛的用于公交汽车、商店、体育场馆、车站、学校、银行、高速公路等公共场所的信息发布和广告宣传。

在其历史的演变过程中,出现了多种信息传播媒体:

但就其性能看:

如阴级管(crt)或石英管(dv)大型电视,成本非常昂贵,在不需要超大画面且在室内使用时效果尚可;彩色液晶显示同样成本昂贵、电路复杂,面积有限,受视频角的影响非常大,可视角度很小;影象投影设备亮度小、清晰度差(画面受光不均匀);电视墙表面有分割线,视觉上有异物感,室外应用时亮度效果差。

而LED显示屏以其受空间限制较小,并可以根据用户要求设计屏的大小,具有全彩色效果,视角大,可以用于显示文字、图案、图象、动画、视频、录象信号等各种信息的特点得到了突飞猛进的发展。

 

LED点阵动态显示屏设计

二、课程设计的目的

1.掌握LED点阵的结构及工作原理;

2.掌握单片机LED点着驱动程序的编写方法。

三、课程设计的要求

1.单片机通过P1、P2端口驱动16×16LED点阵的列(J1);

2.单片机通过P0、P3端口驱动16×16LED点阵的行(J1);

3采用逐行显示+滚屏的驱动方法,在LED点阵上显示汉字“欢迎您”。

四、课程设计的设备

硬件:

PC机,nKDE-51单片机实验教学系统,P89V51RD2单片机(已激活SoftICE方式)

软件:

KeilC51集成开发环境、串口调试工具软件

五、课程设计的基本原理

1、16×16点阵

图1是由4块8×8LED点阵模块级联而成的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点

 

图28×8点阵LED外观及引脚图

图38×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相连,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

#defineucharunsignedchar

bitn;

sbitsw2=P2^7;//定义按键key

sbitsw1=P0^0;//定义按键sw1

ucharcodecode1[]=//字模

{

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*/

};

ucharcodecode2[]=

{

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*/

};

voiddelay(intm)

{inti;

while(m--)

for(i=0;i<40;i++);

}

voidXIANSHI(uchar*Buffer,ucharN,ucharTime)//流动显示N个汉字,三个参数:

字符串字模首地址、字数、显示流动速度

{

ucharNum,i,j,row,pos;//循环变量:

字数计数、16次流动、16列扫描

for(Num=0;Num

{

for(i=0;i<16;i++)//字到字流动16次左移才能完成

{

for(j=0;j

{

for(row=0;row<16;row++)//显示16*16屏幕一次

{if(pos==0)

pos=0x01;

P0=~*(Buffer+Num*32+(i+row)*2);//获取显示数据循环显示关键算法

P3=~*(Buffer+Num*32+(i+row)*2+1);//以移动偏移为基础获取新数据

if(row<8)

{P1=pos;//上半屏显示,即显示一个字的上半部

P2=0x00;}

else

{P1=0x00;//下半屏显示,即显示一个字的下半部

P2=pos;}

pos<<=1;

delay(3);

}

}

}

}

}

voidmain()

{

n=1;

while

(1)

{

if(sw1==1)

{

if(sw2==0)//第一次按下KEY键

{

while(sw2==0){};

n=~n;

}

while(n==0)

{

XIANSHI(code2,3,5);//流动显示N个汉字

delay(100);

if(sw2==0)//再次按下KEY键

{

while(sw2==0){};

n=~n;

}

}

XIANSHI(code1,4,5);//流动显示N个汉字

delay(100);

}

if(sw1==0){}

}

}

八、课程设计结果分析

1、设计结果

图4硬件电路显示图

 

结果显示“魅力南工”字样,长按sw3键则改变为“欢迎您”字样

2、结果分析

对硬件电路显示(图4)进行观察。

开关控制端JP8和切换控制端JP1均为1时向左滚动显示“魅力南工”;当JP8为1时,切换JP1一次,到JP1为1,此时向上滚动显示“欢迎您”;再切换一次JP1,到JP1为1,此时又向左滚动显示“魅力南工”;当JP8为0时,滚动显示“欢迎您”,此时JP1已不起任何作用。

九、拓展提高

当输入如下程序是,可实现滚动文字纵向流动

#include

#defineucharunsignedchar

ucharcodeCode1[]=

{

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*/

};

voiddelay(intms)

{

inti;

while(ms--)

for(i=0;i<40;i++);//调整for循环控制变量大小可改变延时时长

}

voidmain(void)

{

inti,j,k;

unsignedcharpos;

j=0;

pos=0x01;

while

(1)

{

pos=0x01;//初始状态,显示第一行

for(k=0;k<96;k=k+2)

{

j=k;

for(i=0;i<16;i++)//共有16行,依次显示

{

if(pos==0)pos=0x01;

if(j>95)j=j-96;

P1=Code1[j++];//读取一行汉字点阵数据(2字节,16位)

P2=Code1[j++];

if(i<8)//显示上半部分

{

P0=~pos;

delay

(1);

P3=0xff;

}

else//显示下半部分

{

P0=0xff;

P3=~pos;

delay

(1);

}

pos<<=1;

delay

(2);

}

//LEDDelay(20);

//LEDDelay(1000);

}

}

}

 

运行如上程序,可实现“欢迎您”字样的纵向流动

 

十、课程设计小结

通过这次课程设计,重新复习并进一步学习了MCS-51;熟练掌握了WORD软件的使用。

进一步提高了自己在实际设计过程中研究问题、发现问题、解决问题的能力。

但是从中也存在不足之处:

对知识的积累还不够,有些问题自己不能够独立解决,对实验操作还要进一步熟练,只有这样才能让自己在不断的学习中提高自己。

课题三本事一个比较简单的课题,能够加分的选项比较多,但是由于各基本工地还是不够,导致未能如愿加分,这将是今后还需要个人努力的方向。

试验中,有两行文字始终不能显示字样,经过反反复复的检查更正始终不能得出结果,不得不不说这是一个失败的结果,但是我相信后面经过自己的研究复习,一定能够得出满意的结果,今后仍需努力。

十、主要参考文献

①.《单片机原理及应用实验与课程设计指导书》南京工程学院

②.《单片机原理与应用及C51程序设计》(第2版)清华大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2