当前位置:文档之家› S8X8_LED点阵显示的设计

S8X8_LED点阵显示的设计

S8X8_LED点阵显示的设计
S8X8_LED点阵显示的设计

成都大学大一电子制作设计竞赛技术报告

项目名称:基于51单片机的8*8LED点阵显示

项目负责人:

学院:

专业:

班级:

联系电话:

技术指导:

电子邮件:

项目起止时间:

——电子信息工程学院“第二课”科创工作室

2013年5月30日

基于单片机的8*8点阵显示

摘要:LED显示屏(LED display,LED Screen):又叫电子显示屏或者飘字屏幕。是由LED点阵

和led pc 面板组成,通过LED灯的亮灭来显示文字、图片、动画、视频,内容。可以根据不同场合的需要做出不同的调节,比如一般的广告牌那些流动的字画,就是通过flash制作一个动画,储蓄在显示屏的一张内存卡里,再通过技术手法显示出来的,可以根据不同的需要随时更换,各部分组件都是模块化结构的显示器件。传统LED显示屏通常由显示模块、控制系统及电源系统组成。

静态扫描技术采用静态锁存扫描方式,大功率驱动,充分保证发光亮度. 自动亮度调节具有自动亮

度调节功能,可在不同亮度环境下获得最佳播放效果..LED显示屏在保有亮度的同时,也存在着弊端,

就是在下雨天,LED显示屏经过雨水淋湿,人的眼睛长时间近距离对着显示屏就会很容易诱发眼疾,

出现流眼泪的情况,这种光源污染,LED显示屏作为环保技术应是需要更充份考虑到光线对人的精神

方面的影响,不要过份追求亮度

关键词:STC89C52,LED

1.整体结构设计

利用8*8LED点阵显示数字0~9和26个英文字符的字样(这里只示范了A~F)。采

用stc89c52单片机作为整个控制电路的核心,并编制软件程序,实现动态轮流显示。通

过此设计来巩固单片机硬件系统的设计及软件系统的编程,通过设计将平时所学知识付诸

实践,提高动手能力。

2.系统硬件设计

本系统从经济性,电路结构,系统性能等多方面考虑,选用如下主要元器件:单片机

stc89c52、排阻10K和100欧、按钮开关、共阳8*8LED点阵(用64个LED手工搭建)、

杜邦线。

2.1原理图

2.1.1电源电路

图1

2.1.2复位、晶振电路

在单片机系统中,复位电路(图2)和时钟电路(图3)是不可缺少的部分。

在本系统中,时钟电路才用了内部时钟方式,才用12MHZ的石英晶体和两个30PF 的电容串在一起,为单片机内部时钟震荡电路提供12MHZ的震荡频率。

而复位电路才上电自动复位方式和按键复位方式。当系统上电时,电容充电;当电容充电完成后放电,给单片机复位引脚一个复位信号,让单片机复位;即完成单片机上电自动复位。当单片机在工作过程中时,我们希望单片机复位回到初始状态,可以按下复位按键,给单片机一个稳定的复位信号,单片机复位。

图2 图3

2.1.28X8

1.点阵LED工作原理说明

图4为8×8点阵LED外观及引脚图,其等效电路如图(2)所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。应用时限流电阻可以放在X轴或Y轴。

2. 点阵LED扫描法介绍

点阵LED一般采用扫描式显示,实际运用分为三种方式:

(1)点扫描;

(2)行扫描;

(3)列扫描。

若使用第一种方式,其扫描频率必须大于16×64=1024Hz,周期小于1ms即

可。若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms即可符合视觉暂留要求。

2.2pcb图

3.系统软件设计

3.1程序流程图

Y

3.2简单的C语言编程

/* 名称:8X8LED点阵显示数字

说明:8X8LED 点阵屏循环显

示数字0~9,字母A~F,图形变换,刷新过程由定时器中断完成。

*/

#include

#include

#define uchar unsigned char

#define uint unsigned int

void delayms(uint a);

uchar code tp0[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

uchar code tp1[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void pwm(int x)

{

while(x--);

}

uchar code Table_of_Digits[]=

{

0x04,0x62,0x92,0x1C,0x38,0x49,0x46,0x20,/*"风车1",0*/

0x20,0x10,0x09,0x3A,0x5C,0x90,0x08,0x04,/*"风车2",0*/

0x04,0x62,0x92,0x1C,0x38,0x49,0x46,0x20,/*"风车1",0*/

0x20,0x10,0x09,0x3A,0x5C,0x90,0x08,0x04,/*"风车2",0*/

0x04,0x62,0x92,0x1C,0x38,0x49,0x46,0x20,/*"风车1",0*/

0x20,0x10,0x09,0x3A,0x5C,0x90,0x08,0x04,/*"风车2",0*/

0x00,0x30,0x78,0x7C,0x3E,0x7C,0x78,0x30,/*"心形图",0*/

0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, //0

0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00, //1

0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, //2

0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00, //3

0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00, //4

0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, //5

0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, //6

0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00, //7

0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, //8

0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00, //9

0x00,0x30,0x78,0x7C,0x3E,0x7C,0x78,0x30,/*"心形图",0*/

//*******************************************//

0x00,0x00,0x3E,0x48,0x48,0x3E,0x00,0x00,/*"A",0*/

0x00,0x41,0x7F,0x51,0x51,0x6E,0x00,0x00,/*"B",0*/

0x00,0x3E,0x41,0x41,0x41,0x62,0x00,0x00,/*"C",0*/

0x00,0x7E,0x42,0x42,0x42,0x3C,0x00,0x00,/*"D",0*/

0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x00,0x00,/*"E",0*/

0x00,0x00,0xFE,0x90,0x90,0x90,0x80,0x00,/*"F",0*/

0x00,0x30,0x78,0x7C,0x3E,0x7C,0x78,0x30,/*"心形图",0*/ };

void bianhuan();

uchar i=0,t=0,xianshi;

//主程序

void main()

{

bianhuan();

P0=0x80;

xianshi=0; //从0 开始显示

TMOD=0x00; //T0 方式0

TH0=(8192-2000)/32; //2ms 定时

TL0=(8192-2000)%32;

IE=0x82;

TR0=1; //启动T0

while(1);

}

//T0 中断函数

void LED_Screen_Display() interrupt 1

{

TH0=(8192-2000)/32; //恢复初值

TL0=(8192-2000)%32;

P1=0xff;

P1=~Table_of_Digits[xianshi*8+i];

P0=_crol_(P0,1);

if(++i==8) i=0; //每屏一个字由8 个字节构成

if(++t==250) //每个字刷新显示一段时间

{

t=0;

if(++xianshi==23) xianshi=0; //显示下一个

}

}

void bianhuan()

{

int a,b,t,i,j=0;

char f=0;//亮暗标志,0为亮

for(a=0;a<50;a++)

for(b=0;b<35;b++)

{

P0=0xff;

P1=0xfe;//亮

pwm(t);//亮的时间

P0=0xff;

P1=0xff ;//暗

pwm(1000-t);//暗的时间

if(!f) t+=5+1;//亮速率较快,模拟呼吸

else t-=5; //暗速率较慢

if(t>1000){f=1;t=1000;}//超过最大值,返回最大值,标志为暗

if(t<0){f=0;t=0;}//超过最小值,返回最小值,标志为亮}

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

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

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

{

{

P0=tp0[i];

delayms(250);

P1=tp1[j];//从右至左,单个八排

}

}

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

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

{

{

P0=tp0[7-i];

delayms(150);

P1=0x00; //一排排向上}

}

P0=0xff;

P1=0xff;

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

{

P0=0xff;

delayms(250);

P1=tp1[7-j]; //一排排亮}

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

{

P0=0xff;

delayms(250);

P1=tp1[j]; //一排排亮}

}

void delayms(uint a)

{

uint x,y;

y=91;

for(y;y>0;y--)

for(x=a;x>0;x--);

}

效果图

相关主题
文本预览
相关文档 最新文档