嵌入式LED灯显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【设计题目】
矩阵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 LL8
LL7
LL9
图2 S3C2410ARM处理器与两片CD4094连接得到16位行选信号图以上电路可以通过S3C2410GPIO口把CPU的并行数据(16位两个字节的数据)打入到两个CD4094芯片中并锁存起来变成LL1-LL16的行选信号。
各信号的作用如下表1;
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");