数电LED点阵广告牌设计.docx

上传人:b****5 文档编号:29176483 上传时间:2023-07-21 格式:DOCX 页数:22 大小:734.34KB
下载 相关 举报
数电LED点阵广告牌设计.docx_第1页
第1页 / 共22页
数电LED点阵广告牌设计.docx_第2页
第2页 / 共22页
数电LED点阵广告牌设计.docx_第3页
第3页 / 共22页
数电LED点阵广告牌设计.docx_第4页
第4页 / 共22页
数电LED点阵广告牌设计.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

数电LED点阵广告牌设计.docx

《数电LED点阵广告牌设计.docx》由会员分享,可在线阅读,更多相关《数电LED点阵广告牌设计.docx(22页珍藏版)》请在冰豆网上搜索。

数电LED点阵广告牌设计.docx

数电LED点阵广告牌设计

《电子技术课程设计》

 

题目:

32x16点阵广告牌设计

院别:

机电学院

专业:

机械电子工程

班级:

姓名:

学号:

指导教师:

二〇一三年十二月二十一日

一、课程设计的内容

该电路系统是采用STC89C52RC单片机为控制器,控制32X16点阵LED显示器进行动态循环显示,显示的内容有:

“xxxxxx”,所以就要编写相关程序,来实现所有功能。

二、课程设计的要求与数据

32x16点阵LED显示器动态循环显示有关内容;

三、课程设计应完成的工作

(1)设计实现功能要求的电路原理图;

(2)用仿真软件绘制电路原理图,并对其进行仿真,检测是否符合要求;

(3)在仿真软件上对源程序进行调试,最终得到一个最精确的程序;

(4)购买设计中用到的STC89C52RC单片机,将所编写的程序下载进去;

(5)购买电路的其他元器件和电路板;

(6)按照电路原理图焊接元器件,制成一块32x16点阵广告牌的模型电路板。

 

四、课程设计进程安排

序号

设计各阶段内容

负责人

起止日期

1

设计原理及设计方案讨论

全员

12月1日

2

元器件采购

12月2日

3

焊接、调试电路

12月3日

4

电路设计及其制图

12月3日

5

设计心得总结

12月4日

6

设计作品介绍及其使用说明以及

全员

五、应收集的资料及主要参考文献

1、任勇、王永东、何伟编著.《单片机原理及其应用》.清华大学出版社.2006年

2、华成英编著.《模拟电子技术基本教程》.清华大学出版社.2006年

3、孙惠芹编著.《单片机项目设计教程》.电子工业出版社.2009年

4、陈晓梅、陈育斌编著.《单片机原理综合实验教程》.大连理工大学出版社.2004年

5、阎石编著.《数字电子技术基本教程》.清华大学出版社.2007年

 

【目录】

摘要………………………………………………………………………4

关键词……………………………………………………………………4

1、系统硬件设计…………………………………………………………4

  1.1STC89C52单片机的结构……………………………………4

1.1.152系列单片机的概述………………………………4

1.1.2单片机的组成…………………………………………4

  1.232×16LED点阵显示模块的硬件设计及工作原理……………6

1.2.1LED点阵………………………………………………6

1.2.2显示原理………………………………………………8

2、系统的软件设计………………………………………………………8

  2.1软件流程………………………………………………………8

  2.2数字字库的提取………………………………………………9

  2.2.1数字的表示及编码原理………………………………9

  2.2.2提取数字的数字库……………………………………9

  2.3程序代码的设计…………………………………………10

3、元器件清单及所用工具和软件………………………………………14

4、电路设计(仿真图及实物图)………………………………………15

5、心得体会………………………………………………………………17

6、参考文献………………………………………………………………18

 

单片机课程设计

--基于STC89C52RC的32X16点阵广告牌

【摘要】本设计使用STC89C52RC系列高速单片机作为主控制模块,利用电路来驱动16*16的点阵LED显示屏,利用STC89C52系列高速单片机本身强大的功能,可以很方便的实现单片机与PC机间数据传输及存储,并利用软件方便的进行显示内容的多样变化;另一方面店镇显示屏广泛的应用于医院、机场、银行等公共场所,所以本设计具有很强的现实应用性。

本LED显示屏能够以动态扫描的方式显示32*16点阵汉字,并能通过上位机软件修改显示内容和显示效果等等。

把字符内码存储在空闲的单片机程序存储器空间,使本LED显示系统能够掉电存储1024个字符。

本文从LED的显示原理入手,详细阐述了LED动态显示的过程,以及硬件电路的设计、计算和软件的算法。

【关键词】单片机、32*16点阵、动态显示、LED显示

1、系统硬件设计

1.1STC89C52单片机的结构

1.1.152系列单片机的概述

单片机也被称作“单片机微型计算机”、“微控制器”、“嵌入式微控制器”,国际上采用“MCU”(MicroControllerUnit)称呼单片机。

随着单片机在各个领域全面深入地发展和应用,出现了高速、大寻址范围、强运算能力的8位、16位、32位通用型单片机,以及小型谦价的专用型单片机。

目前,单片机正朝着高性能和多品种方向发展,今后单片机的发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装等方面发展。

1.1.2单片机的组成

【图1】是单片机典型组成框图,由图可见它通过内部总线把计算机的各主要部件连为一体,其内部总线包括地址总线、数据总线和控制总线。

其中,地址总线的作用是为进行数据交换时提供地址,CPU通过将地址输出到存储器或I/O接口;数据总线用于在CPU与存储器或I/O接口之间或存储器与外设之间交换数据;控制总路线包括CPU发出的控制信号线和外部送入CPU的应答线等。

【图1】单片机典型组成框图

 

52系列有3种封装形式,一种是DIP(DualInlinePackage)封装形式,一种是LCC(QuadFlatPackage)封装形式。

这种形式是具有44个“J”形脚的方型芯片。

另一种是QFP(QuadFlatPackage)封装形式,这种形式是具有44个“J”形脚的方型芯片,但它的体积更小、更薄,是一种表面贴焊的封装形式。

下面介绍下89S52单片机的引脚的功能和其内部结构图。

AT89S52单片机实际有郊的引脚为40个,以下是89S52单片机的DIP封装形式的引脚的名称,如【图2】。

【图2】AT89S52单片机DIP封装

 

【图3】是89C52的内部结构图,由图可以看到在单片机内部除了有CPU、RAM、ROM和定时器、串行口等主要功能部件之外,还有驱动器、锁存器、指令寄存器、地址寄存器等辅助电路部分,以及各功能模块在单片机中的位置和相互关系。

【图3】89C52的内部结构

1.232×16LED点阵显示模块的硬件设计及工作原理

1.2.1LED点阵

随着LED应用领域的扩大,要求生产更为直接和方便的LED显示器件。

因而出现了数码管、字符管、电平管、LED点阵等多种LED显示器。

不管显示器的结构怎么变,它的核心部件仍然是发光半导体芯片。

●一个32X16点阵共需要512个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列(Y)置1电平,某一行(X)置0电平,则相应的二极管就亮.

【图5】是16*16点阵的外观及各引脚对应功能图:

【图5】16*16点阵的外观及各引脚对应功能

1.2.2显示原理

人眼的亮度感觉不会因光源的消失而立即消失,要有一个延迟时间,这就是视觉的惰性。

视觉惰性可以理解为光线对人眼视觉的作用、传输、处理等过程都需要时间,因而使视觉具有一定的低通性。

实验表明,当外界光源突然消失时,人眼的亮度感觉是按指数规律逐渐减小的。

这样当一个光源反复通断,在通断频率较低时,人眼可以发现亮度的变化;而通断频率增高时,视觉就逐渐不能发现相应的亮度变化了。

不致于引起闪烁感觉的最低反复通断频率称为临界闪烁频率。

通过实验证明临界闪烁频率大约为24Hz。

因此采用每秒24幅画面的电影,在人看起来就是连续活动的图象了。

同样的原理,日光灯每秒通断50次,而人看起来却是一直亮的。

由于视觉具有惰性,人们在观察高于临界闪烁频率的反复通断的光线时,所得到的主观亮度感受实际上是客观亮度的平均值。

视觉惰性可以说是LED显示屏得以广泛应用的生理基础。

首先,在LED显示屏中可以利用视觉惰性,改善驱动电路的设计,形成了目前广为采用的扫描驱动方式。

扫描驱动方式的优点在于LED显示屏不必对每个发光灯提供单独的驱动电路,而是若干个发光灯为一组共用一个驱动电路,通过扫描的方法,使各组发光灯依次点燃,只要扫描频率高于临界闪烁频率,人眼看起来各组灯都在发光。

由于LED显示屏所使用的发光灯数量很大,一般在几千只到几十万只的范围,所以节约驱动电路的效益是十分可观的。

2、系统的软件设计

2.1软件流程方框图

【图5】软件流程方框图

2.2数字字库的提取

 2.2.1汉字、字母的表示及编码原理

如显示13个汉字、字母,先将13个这汉字、字母的点阵从字库中读出,放到显示缓存,如果要实现左移或者其它的显示效果则将显示缓存中的每个位进行移位或者其它处理,然后再调用扫描显示函数就可以实现所规定的效果。

扫描显示函数是显示缓存的内容,如果要实现不同的内容,比如说图片、汉字、英文等内容,只需要将这些内容按扫描显示函数对显示缓存的协议要求就可以显示出来。

 

 

2.2.2提取汉字、字母的数字库

使用字库提取软件,汉字以32*16为规格在输入软件调出字库点阵,数字.字符.字母以8*16规格输出

2.3源程序代码的设计

#include

#definen15536

#definehuanping8*10

unsignedintnum;

sbitping21=P0^2;

sbitping22=P0^3;

sbitping11=P0^0;

sbitping12=P0^1;

sbitp11=P0^7;

sbitp12=P0^6;

sbitp21=P0^5;

sbitp22=P0^4;

charcodezifu[]=

 

{0xFB,0xFF,0xDB,0xEF,0xDB,0xED,0xDB,0xDE,0x80,0x01,0x3B,0xBF,0xBB,0x7D,0xFB,0xFD,

0xFB,0xFB,0x00,0x37,0xFB,0xCF,0xBB,0xD7,0xCB,0xBB,0xFA,0x7D,0xFB,0xE0,0xFF,0xFF};/*"我",0*/

//{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"",4*/

//0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"",4*/

//0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,/*"1",2*/

//0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,/*"1",3*/

//0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"",4*/

//0x08,0x20,0x08,0xC0,0x0B,0x00,0xFF,0xFF,0x09,0x00,0x08,0xC1,0x00,0x06,0x7F,0xF8,

//0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0xFC,0x00,0x02,0x00,0x02,0x00,0x1E,0x00,0x00,/*"机",5*/

//0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"",6*/

//0x08,0x20,0x08,0xC0,0x0B,0x00,0xFF,0xFF,0x09,0x00,0x00,0x82,0x08,0x8C,0x0B,0xF0,

//0x08,0x80,0x0B,0xFD,0x08,0x82,0xFF,0xE4,0x08,0x1C,0x49,0xE2,0x28,0x0F,0x00,0x00};/*"械",7*/

////////////////////////////////////////////////

//0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"",8*/

//0x00,0x00,0x00,0x00,0x1F,0xF8,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0xFF,0xFE,

//0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1F,0xF9,0x00,0x01,0x00,0x0F,0x00,0x00,/*"电",9*/

//0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"",10*/

//0x01,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x02,0x41,0x01,0x47,0xFE,

//0x45,0x00,0x49,0x00,0x51,0x00,0x61,0x00,0x41,0x00,0x01,0x00,0x01,0x00,0x00,0x00,/*"子",11*/

//0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"",12*/

//0x00,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x3F,0xFC,

//0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x00,0x04,0x00,0x00,/*"工",13*/

//0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"",14*/

//0x24,0x10,0x24,0x60,0x25,0x80,0x7F,0xFF,0xC4,0x80,0x44,0x60,0x00,0x02,0x7C,0x92,

//0x44,0x92,0x44,0x92,0x44,0xFE,0x44,0x92,0x44,0x92,0x7C,0x92,0x00,0x82,0x00,0x00};/*"程",15*/

 

voiddelay(charx){

charj;

inti;

for(i=0;i

for(j=0;j<250;j++);

}

voidtime0()interrupt1{

TH0=(65536-n)/256;

TL0=(65536-n)%256;

num++;

}

voidmain(){

inti,k=0,kk=0;

ping21=0;

ping22=0;

ping11=0;

ping12=0;

p11=0;

p12=0;

p21=0;

p21=0;

P1=0x00;

P2=0x00;

TMOD=0X00;

TH0=(65536-n)/256;

TL0=(65536-n)%256;

TR0=1;

ET0=1;

EA=1;

while

(1){

p11=1;

p12=1;

P3=2;

P2=0xff;

ping21=1;

P2=0xf1;

ping21=0;

P2=0xff;

ping22=1;

P2=0xfe;

ping22=0;//*/

/*if(k<16){///////16为固定数,用于显示刚开始的一屏

do{

p11=1;

p12=1;

for(i=0;i<16;i++){

P3=i;

P2=0xff;

ping21=1;

P2=zifu[2*i+2*k];

ping21=0;

P2=0xff;

ping22=1;

P2=zifu[2*i+1+2*k];

ping22=0;

delay(50);

p11=0;

p12=0;

}

}while(num<20);

num=0;

k++;

}

///////////////////////////////////////////////////////////////////

/*elseif(k>=15&&k

do{

p11=1;

p12=1;

for(i=0;i<16;i++){

P3=i;

P2=0x00;

ping21=1;

P2=~zifu[2*i+2*k];

ping21=0;

P2=0x00;

ping22=1;

P2=~zifu[2*i+1+2*k];

ping22=0;

delay(10);

}

p11=0;

p12=0;

p21=1;

p22=1;

for(i=0;i<16;i++){

P3=i;

P1=0x00;

ping11=1;

P1=~zifu[2*i+2*k-30];

ping11=0;

P1=0x00;

ping12=1;

P1=~zifu[2*i+2*k-29];

ping12=0;

delay(15);

}

p21=0;

p22=0;

}while(num<50);

num=0;

k++;

}

///////////////////////////////////////////////////////////////

elseif(k>=huanping-1&&k

do{

p11=1;

p12=1;

for(i=0;i<16-kk%16;i++){

P3=i;

P2=0x00;

ping21=1;

P2=~zifu[2*i+2*k];

ping21=0;

P2=0x00;

ping22=1;

P2=~zifu[2*i+1+2*k];

ping22=0;

delay(15);

}

for(i=16-kk%16;i<16;i++){

P3=i;

P2=0x00;

ping21=1;

P2=~zifu[2*i+2*kk];

ping21=0;

P2=0x00;

ping22=1;

P2=~zifu[2*i+1+2*kk];

ping22=0;

delay(15);

}

p11=0;

p12=0;

p21=1;

p22=1;

for(i=0;i<16;i++){

P3=i;

P1=0x00;

ping11=1;

P1=~zifu[2*i+2*k-32];

ping11=0;

P1=0x00;

ping12=1;

P1=~zifu[2*i+1+2*k-32];

ping12=0;

delay(15);

}

p21=0;

p22=0;

}while(num<65);

num=0;

kk++;

k++;

}

////////////////////////////////////////////////////////////

///////////////////////////////////////////////

elseif(k>=huanping-1){k=16;kk=0;}*/

elseif(k>=16){k=0;kk=0;}

///////////////////////////////////////////////////////////////////

}

}

3、元器件清单及所用工具和软件 

 所用工具和软件:

仪器设备:

电脑,万用表,电烙铁及烙铁架,锡线,剪线钳,镊子,跳线

软件:

Poteus7Professional

Keiluvision3

单片机下载软件(STC_ISP_V480)

元器件清单:

电子元件

数量

单价

16x16点阵

2

25

74HC154(译码器)

1

5

插槽

1

7

74LS373(锁存器)

8

1.5

30F电容

1

1

20uF电容

1

0.5

按键开关

1

0.1

10k排阻

1

0.5

排孔

1

0.5

按键自锁开关

1

0.5

LED灯

5

1

电阻

11

2.2

STC89C52RC

1

6

12M晶振

1

2

 

4、电路设计:

(Proteus仿真通过)

32*16点阵广告牌设计仿真电路总原理图,如【图7】所示:

【图7】32*16点阵广告牌设计仿真电路总原理图

实物图正面

实物图背面

 

5、心得体会:

这次课程设计,由于理论知识的不足,再加上平时没有什么设计经验,一开始的时候有些手忙脚乱,不知从何入手。

通过小组成员间的相互讨论,慢慢的确立了方案,通过这次课程设计之后,一定把以前所学过的知识重新温故。

对我来说,收获最大的是方法和能力——那些分析和解决问题的方法与能力。

在整个设计过程中,我们这些学生最最缺少的是经验,没有感性的认识,空有理论知识,有些东西很可能与实际脱节。

此次设计需要我们将学过的相关知识都系统地联系起来,从中暴露出自身的不足,以待改进。

很感谢学校和老师给我们安排了这次课程设计,让我真正感受到的是合作的重要,许多时候都是组员的讨论,此外,电路比较复杂,看懂电路图,焊电路,电路连线非常考验我们的耐心与细心,受益匪浅.通过这

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1