文档库 最新最全的文档下载
当前位置:文档库 › 嵌入式LED灯显示

嵌入式LED灯显示

嵌入式LED灯显示
嵌入式LED灯显示

v .. . ..

【设计题目】

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

【设计目的】

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

2.进一步熟悉ARM 处理器的基本结构、指令集、存储系统以及基本接口编程;3.熟悉嵌入式系统各部件的硬件初始化过程以及基本IO控制方法。

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

【设计内容】

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

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

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

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

硬件:Embest EduKit-IV 平台,ULINK2 仿真器套件,PC 机;

软件:μVision IDE for ARM 集成开发环境,Windows XP。

【相关知识综述】

背景知识、原理算法等

一、硬件部分

1.点阵屏的结构电路

图1点阵屏的结构电路

图上QL1-QL16为行驱动信号,每个信号控制一行,LR1~LR16 是点阵屏的列驱动信号,每一个信号控制一列。当行信号为高电平而列信号为低电平,对应的LED就会亮。

2,S3C2410与点阵屏的连接

LL1

LL7

LL8

LL9

LL15

LL16

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

3.点阵屏的保护电路

图3 点阵屏的保护电路图

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

加入行驱动电路的目的是实现LED灯的驱动。这样由RQ1-RQ16变为行驱动信号QL1-QL16。Q11-QL16为图1中的行驱动信号。

图4 行驱动电路

【设计思路】

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

主要的函数说明:

led_init(); :LED显示矩阵初始化static void refresh_l_display_array(u8 bits, u8 *str) :显示字符

void led_logo_disp(void) :显示logo struct fonts_struct {

unsigned char ascii_width;

unsigned char ascii_height;

unsigned char * ascii_code;

unsigned char ascii_beg;

unsigned char ascii_end;

};

【源程序清单】

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

* File:main.c

* Author: embest

* Desc: c main entry

* History:

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

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

/* include files

*/

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

#include "2410lib.h"

#include "sys_init.h"

#include "fonts.h"

#include "led16x16.h"

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

* name: main

* func: c code entry

* para: none

* ret: none

* modify:

* comment:

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

int main(void)

{

char c;

sys_init(); // Initial system

while(1)

{

uart_printf("\n Please Look At The 16X16 LEDS And Choose Key\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(); // Initial led diplay

if(c=='1')

{

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

left_out(0,"abcdef");

}

else if(c=='2')

{

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

left_out_flash(0,"abcdef");

}

else if(c=='3')

{

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

right_out(0,"abcdef");

}

else if(c=='4')

{

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

right_out_flash(0,"abcdef");

}

}

}

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

* File: Dotled.c

* Author: embest

* Desc: DotLed_Test

* History:

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

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

/* include files

*/

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

#include

#include "2410lib.h"

#include "fonts.h"

#include "led16x16.h"

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

/* function declare

*/

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

extern void led_char_disp(void);

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

/* global variables

*/

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

u8 l_display_array[2*16];

u8 assic_buffer[3*16];

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

l_display_array:

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

| | |

| D | E |

| | |

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

A buffer data and

B buffer data -->D buffer data

B buffer data and

C buffer data -->E buffer data

assic_buffer:

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

| | | |

| A | B | C |<---- update the C buffer and move the B buffer data to the A buffer

| | | | and move the C buffer data to the B buffer data

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

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

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

* name: led_update

* func: refresh the led display

* para: none

* ret: none

* modify:

* comment:

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

static void led_update(void)

{

int j = 20;

while(j--)

{

led_char_disp();

}

}

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

* name: l_display_scroll

* func: shift the display

* para: bits:the position str:point the buffer

* ret: none

* modify:

* comment:

相关文档