嵌入式LED灯显示.docx
《嵌入式LED灯显示.docx》由会员分享,可在线阅读,更多相关《嵌入式LED灯显示.docx(30页珍藏版)》请在冰豆网上搜索。
嵌入式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:
******