嵌入式LED灯显示.docx

上传人:b****8 文档编号:10689782 上传时间:2023-02-22 格式:DOCX 页数:35 大小:465.75KB
下载 相关 举报
嵌入式LED灯显示.docx_第1页
第1页 / 共35页
嵌入式LED灯显示.docx_第2页
第2页 / 共35页
嵌入式LED灯显示.docx_第3页
第3页 / 共35页
嵌入式LED灯显示.docx_第4页
第4页 / 共35页
嵌入式LED灯显示.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

嵌入式LED灯显示.docx

《嵌入式LED灯显示.docx》由会员分享,可在线阅读,更多相关《嵌入式LED灯显示.docx(35页珍藏版)》请在冰豆网上搜索。

嵌入式LED灯显示.docx

嵌入式LED灯显示

【设计题目】

矩阵LED字符显示控制系统设计

【设计目的】

1.掌握无操作系统下的硬件软件设计原理和方法;

2.进一步熟悉ARM处理器的基本结构、指令集、存储系统以及基本接口编程;

3.熟悉嵌入式系统各部件的硬件初始化过程以及基本IO控制方法。

4.掌握矩阵LED的应用原理

【设计内容】

1.利用sys_init初始化程序,利用串口实现PC和开发板的数据通信;

2.编写S3C2410X处理器的点阵屏驱动程序;

3.编写S3C2410X处理器的点阵屏应用程序。

4.当程序运行等待要求从串口输入学生姓名的字符串在矩阵LED上显示出来。

【实验环境】

硬件:

EmbestEduKit-IV平台,ULINK2仿真器套件,PC机;

软件:

μVisionIDEforARM集成开发环境,WindowsXP。

【相关知识综述】

背景知识、原理算法等

一、硬件部分

1.点阵屏的结构电路

图1点阵屏的结构电路

图上QL1-QL16为行驱动信号,每个信号控制一行,LR1~LR16是点阵屏的列驱动信号,每一个信号控制一列。

当行信号为高电平而列信号为低电平,对应的LED就会亮。

2,S3C2410与点阵屏的连接

 

图2S3C2410ARM处理器与两片CD4094连接得到16位行选信号图

以上电路可以通过S3C2410GPIO口把CPU的并行数据(16位两个字节的数据)打入到两个CD4094芯片中并锁存起来变成LL1-LL16的行选信号。

各信号的作用如下表1;

2410引脚

CD4094信号

电平高低

各信号的作用

GPB4

STORBE

(RSTR)

行锁存允许,将串行数据大入到CD4094相应位

不锁存

GPB5

LOE

CD4094上锁存的并行数据全部输出(输出使能)

CD4094上锁存的并行数据不输出

GPD10

CLK

CD4094允许串行输入的数据发生变化

CD4094不允许串行输入的数据发生变化

GPC0

DATA

表明串行数据为1

表明串行数据为0

GPG8

STORBE

LSTR

列锁存允许,将串行数据大入到CD4094相应位

不锁存

3.点阵屏的保护电路

图3点阵屏的保护电路图

为了保护LED屏加了对应的电阻实现行限流作用,即LL1-LL16变为RQ1-RQ16

4.LED的驱动

加入行驱动电路的目的是实现LED灯的驱动。

这样由RQ1-RQ16变为行驱动信号QL1-QL16。

Q11-QL16为图1中的行驱动信号。

图4行驱动电路

【设计思路】

采用的数据结构、主要的函数说明、程序流程设计图等

主要的函数说明:

led_init();:

LED显示矩阵初始化

staticvoidrefresh_l_display_array(u8bits,u8*str):

显示字符

voidled_logo_disp(void):

显示logo

structfonts_struct{

unsignedcharascii_width;

unsignedcharascii_height;

unsignedchar*ascii_code;

unsignedcharascii_beg;

unsignedcharascii_end;

};

【源程序清单】

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

*File:

main.c

*Author:

embest

*Desc:

cmainentry

*History:

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

/*------------------------------------------------------------------------------------------*/

/*includefiles*/

/*------------------------------------------------------------------------------------------*/

#include"2410lib.h"

#include"sys_init.h"

#include"fonts.h"

#include"led16x16.h"

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

*name:

main

*func:

ccodeentry

*para:

none

*ret:

none

*modify:

*comment:

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

intmain(void)

{

charc;

sys_init();//Initialsystem

while

(1)

{

uart_printf("\nPleaseLookAtThe16X16LEDSAndChooseKey\n");

uart_printf("1、向左移动\n");

uart_printf("2、向左闪烁移动\n");

uart_printf("3、向右移动\n");

uart_printf("4、向右闪烁移动\n");

c=uart_getch();

uart_printf("%c",c);

led_init();//Initialleddiplay

if(c=='1')

{

l_char_out(0,"^_^学号");

left_out(0,"abcdef");

}

elseif(c=='2')

{

l_flash_char_out(0,"^_^学号");

left_out_flash(0,"abcdef");

}

elseif(c=='3')

{

r_char_out(0,"^_^学号");

right_out(0,"abcdef");

}

elseif(c=='4')

{

r_flash_char_out(0,"^_^学号");

right_out_flash(0,"abcdef");

}

}

}

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

*File:

Dotled.c

*Author:

embest

*Desc:

DotLed_Test

*History:

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

/*------------------------------------------------------------------------------------------*/

/*includefiles*/

/*------------------------------------------------------------------------------------------*/

#include

#include"2410lib.h"

#include"fonts.h"

#include"led16x16.h"

/*------------------------------------------------------------------------------------------*/

/*functiondeclare*/

/*------------------------------------------------------------------------------------------*/

externvoidled_char_disp(void);

/*------------------------------------------------------------------------------------------*/

/*globalvariables*/

/*------------------------------------------------------------------------------------------*/

u8l_display_array[2*16];

u8assic_buffer[3*16];

/*============================================================================================

l_display_array:

+-----+-----+

|||

|D|E|

|||

+-----+-----+

AbufferdataandBbufferdata-->Dbufferdata

BbufferdataandCbufferdata-->Ebufferdata

assic_buffer:

+-----+-----+-----+

||||

|A|B|C|<----updatetheCbufferandmovetheBbufferdatatotheAbuffer

||||andmovetheCbufferdatatotheBbufferdata

+-----+-----+-----+

============================================================================================*/

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

*name:

led_update

*func:

refreshtheleddisplay

*para:

none

*ret:

none

*modify:

*comment:

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

staticvoidled_update(void)

{

intj=20;

while(j--)

{

led_char_disp();

}

}

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

*name:

l_display_scroll

*func:

shiftthedisplay

*para:

bits:

thepositionstr:

pointthebuffer

*ret:

none

*modify:

*comment:

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

staticvoidrefresh_l_display_array(u8bits,u8*str)

{

u32i;

u32remaining_bits=8-bits;

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

{

l_display_array[2*i]=(*str<>remaining_bits);

l_display_array[2*(i+1)-1]=(*(str+16)<>remaining_bits);

str++;

}

}

staticvoidrefresh_flash_display_array(u8bits,u8*str)

{

u32i;

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

{

l_display_array[2*i]=0;

l_display_array[2*(i+1)-1]=0;

str++;

}

}

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

*name:

l_display_scroll

*func:

scrollthedisplay

*para:

str:

pointthebuffer

*ret:

none

*modify:

*comment:

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

staticvoidl_display_scroll(u8*str)

{

inti;

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

{

refresh_l_display_array(i,str);

led_update();

}

}

staticvoidl_flash_display_scroll(u8*str)

{

inti;

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

{

refresh_l_display_array(i,str);

led_update();

refresh_flash_display_array(i,str);

led_update();

}

}

staticvoidr_display_scroll(u8*str)

{

inti;

for(i=8;i>0;i--)

{

refresh_l_display_array(i,str);

led_update();

}

}

staticvoidr_flash_display_scroll(u8*str)

{

inti;

for(i=8;i>0;i--)

{

refresh_l_display_array(i,str);

led_update();

refresh_flash_display_array(i,str);

led_update();

}

}

 

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

*name:

copy_data

*func:

copydata

*para:

dst:

pointthedestdatasrc:

pointsthesourcedata

*ret:

none

*modify:

*comment:

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

staticvoidcopy_data(u8*dst,u8*src,u32size)

{

while(size--)

*(dst++)=*(src++);

}

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

*name:

refresh_assic_buffer

*func:

refreshbuffer

*para:

str:

pointsthenewchar

*ret:

none

*modify:

*comment:

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

staticvoidl_refresh_assic_buffer(u8*str)

{

copy_data(&assic_buffer[0],&assic_buffer[16],16);

copy_data(&assic_buffer[16],&assic_buffer[32],16);

copy_data(&assic_buffer[32],str,16);

l_display_scroll(assic_buffer);

}

 

staticvoidl_flash_refresh_assic_buffer(u8*str)

{

copy_data(&assic_buffer[0],&assic_buffer[16],16);

copy_data(&assic_buffer[16],&assic_buffer[32],16);

copy_data(&assic_buffer[32],str,16);

l_flash_display_scroll(assic_buffer);

}

 

staticvoidr_refresh_assic_buffer(u8*str)

{

copy_data(&assic_buffer[32],&assic_buffer[16],16);

copy_data(&assic_buffer[16],&assic_buffer[0],16);

copy_data(&assic_buffer[0],str,16);

r_display_scroll(assic_buffer);

}

staticvoidr_flash_refresh_assic_buffer(u8*str)

{

copy_data(&assic_buffer[32],&assic_buffer[16],16);

copy_data(&assic_buffer[16],&assic_buffer[0],16);

copy_data(&assic_buffer[0],str,16);

r_flash_display_scroll(assic_buffer);

}

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

*name:

char_out

*func:

displaythechars

*para:

font:

0str:

pointsofthechars

*ret:

none

*modify:

*comment:

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

voidl_char_out(u8font,u8*str)

{

u8*str_ptr;

u8glyph;

glyph=(u8)*str;

while(glyph!

='\0')

{

str_ptr=fonts[font].ascii_code+(glyph-fonts[font].ascii_beg)*fonts[font].ascii_height;

l_refresh_assic_buffer(str_ptr);

str++;

glyph=(u8)*str;

}

}

voidl_flash_char_out(u8font,u8*str)

{

u8*str_ptr;

u8glyph;

glyph=(u8)*str;

while(glyph!

='\0')

{

str_ptr=fonts[font].ascii_code+(glyph-fonts[font].ascii_beg)*fonts[font].ascii_height;

l_flash_refresh_assic_buffer(str_ptr);

str++;

glyph=(u8)*str;

}

}

voidr_char_out(u8font,u8*str)

{

u8*str_ptr;

u8glyph;

glyph=(u8)*str;

while(glyph!

='\0')

{

str_ptr=fonts[font].ascii_code+(glyph-fonts[font].ascii_beg)*fonts[font].ascii_height;

r_refresh_assic_buffer(str_ptr);

str++;

glyph=(u8)*str;

}

}

voidr_flash_char_out(u8font,u8*str)

{

u8*str_ptr;

u8glyph;

glyph

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

当前位置:首页 > 解决方案 > 学习计划

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

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