【设计题目】矩阵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 LL8LL7LL9图2 S3C2410ARM处理器与两片CD4094连接得到16位行选信号图以上电路可以通过S3C2410GPIO口把CPU的并行数据(16位两个字节的数据)打入到两个CD4094芯片中并锁存起来变成LL1-LL16的行选信号。
各信号的作用如下表1;3.点阵屏的保护电路图3 点阵屏的保护电路图为了保护LED 屏加了对应的电阻实现行限流作用,即LL1-LL16变为RQ1-RQ164.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) :显示logostruct 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 systemwhile(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 diplayif(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 <stdio.h>#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 andB buffer data -->D buffer dataB buffer data andC buffer data -->E buffer dataassic_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:********************************************************************************************* /static void refresh_l_display_array(u8 bits, u8 *str){u32 i;u32 remaining_bits = 8-bits;for(i=0;i<16;i++){l_display_array[2*i] = (*str<<bits) |(*(str+16)>>remaining_bits);l_display_array[2*(i+1)-1] = (*(str+16)<<bits) |(*(str+32)>>remaining_bits);str++;}}static void refresh_flash_display_array(u8 bits, u8 *str){u32 i;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: scroll the display* para: str:point the buffer* ret: none* modify:* comment:********************************************************************************************* /static void l_display_scroll ( u8 *str ){int i;for(i=0;i<8;i++){refresh_l_display_array(i, str);led_update();}}static void l_flash_display_scroll ( u8 *str ){int i;for(i=0;i<8;i++){refresh_l_display_array(i, str);led_update();refresh_flash_display_array(i, str);led_update();}}static void r_display_scroll ( u8 *str ){int i;for(i=8;i>0;i--){refresh_l_display_array(i, str);led_update();}}static void r_flash_display_scroll ( u8 *str ) {int i;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: copy data* para: dst:point the dest data src:points the source data* ret: none* modify:* comment:********************************************************************************************* /static void copy_data(u8 *dst, u8 *src, u32 size){while(size--)*(dst++) = *(src++);}/******************************************************************************************** ** name: refresh_assic_buffer* func: refresh buffer* para: str:points the new char* ret: none* modify:* comment:********************************************************************************************* /static void l_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);}static void l_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);}static void r_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);}static void r_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: display the chars* para: font:0 str:points of the chars* ret: none* modify:* comment:********************************************************************************************* /void l_char_out(u8 font, u8 *str){u8 *str_ptr;u8 glyph;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;}}void l_flash_char_out(u8 font, u8 *str){u8 *str_ptr;u8 glyph;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;}}void r_char_out(u8 font, u8 *str){u8 *str_ptr;u8 glyph;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;}}void r_flash_char_out(u8 font, u8 *str){u8 *str_ptr;u8 glyph;glyph = ( u8 )*str;while(glyph != '\0' ){str_ptr = fonts[font].ascii_code + ( glyph - fonts[font].ascii_beg) * fonts[font].ascii_height;r_flash_refresh_assic_buffer(str_ptr);str++;glyph = ( u8 )*str;}}void left_out(u8 font, u8 *str){u8 *str_ptr;u8 glyph;glyph = ( u8 )*str;while(glyph != '\0' ){str_ptr = leftcode[font].ascii_code + ( glyph - leftcode[font].ascii_beg) * leftcode[font].ascii_height;l_refresh_assic_buffer(str_ptr);str++;glyph = ( u8 )*str;}}void left_out_flash(u8 font, u8 *str){u8 *str_ptr;u8 glyph;glyph = ( u8 )*str;while(glyph != '\0' ){str_ptr = leftcode[font].ascii_code + ( glyph - leftcode[font].ascii_beg) * leftcode[font].ascii_height;l_flash_refresh_assic_buffer(str_ptr);str++;glyph = ( u8 )*str;}}void right_out(u8 font, u8 *str){u8 *str_ptr;u8 glyph;glyph = ( u8 )*str;while(glyph != '\0' ){str_ptr = rightcode[font].ascii_code + ( glyph - rightcode[font].ascii_beg) * rightcode[font].ascii_height;r_refresh_assic_buffer(str_ptr);str++;glyph = ( u8 )*str;}}void right_out_flash(u8 font, u8 *str){u8 *str_ptr;u8 glyph;glyph = ( u8 )*str;while(glyph != '\0' ){str_ptr = rightcode[font].ascii_code + ( glyph - rightcode[font].ascii_beg) * rightcode[font].ascii_height;r_flash_refresh_assic_buffer(str_ptr);str++;glyph = ( u8 )*str;}}/******************************************************************************************** ** name: led_init* func: initial the led display* para: none* ret: none* modify:* comment:********************************************************************************************* /void led_init(void){rGPBCON = rGPBCON & 0xfff0ff | 0x500; // GPB4,GPB5=01:Output rGPCCON = rGPCCON & 0xffff3ffc | 0x4001; // GPC0,GPC7=01:Output rGPDCON = rGPDCON & 0xffcfffff | 0x100000; // GPD10=01:OutputrGPGCON = rGPGCON & 0xfffcffff | 0x10000; // GPG8=01:Output}/******************************************************************************************** ** File: fonts.c* Author: embest* Desc: DotLed_Test* History:********************************************************************************************* //*------------------------------------------------------------------------------------------*/ /* include files*//*------------------------------------------------------------------------------------------*/ #include "fonts.h"// ------------------ ASCII字模的数据表------------------------ //unsigned char nAsciiDot[] = // ASCII{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18, // -!-0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x24,0x00,0x00,0x00, // -"-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x6C,0xFE,0x6C,0x6C, // -#-0x6C,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00,0x18,0x18,0x7C,0xC6,0xC2,0xC0,0x7C,0x06, // -$-0x86,0xC6,0x7C,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC2,0xC6,0x0C,0x18, // -%- 0x30,0x60,0xC6,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x6C,0x6C,0x38,0x76,0xDC, // -&- 0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00, // -'- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x30,0x30,0x30,0x30, // -(- 0x30,0x30,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x18,0x0C,0x0C,0x0C,0x0C, // -)- 0x0C,0x0C,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x3C,0xFF, // -*- 0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E, // -+- 0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -,- 0x00,0x18,0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE, // --- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -.- 0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x06,0x0C,0x18, // -/- 0x30,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xCE,0xD6,0xD6, // -0- 0xE6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x38,0x78,0x18,0x18,0x18, // -1- 0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0x06,0x0C,0x18,0x30, // -2- 0x60,0xC0,0xC6,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0x06,0x06,0x3C,0x06, // -3- 0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x1C,0x3C,0x6C,0xCC,0xFE, // -4- 0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xC0,0xC0,0xC0,0xFC,0x0E, // -5- 0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x60,0xC0,0xC0,0xFC,0xC6, // -6- 0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xC6,0x06,0x06,0x0C,0x18, // -7- 0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7C,0xC6, // -8- 0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7E,0x06, // -9- 0x06,0x06,0x0C,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00, // -:-0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00, // -;- 0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60, // -<- 0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00, // -=- 0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06, // ->- 0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0x0C,0x18,0x18, // -?- 0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xDE,0xDE, // -@- 0xDE,0xDC,0xC0,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x38,0x6C,0xC6,0xC6,0xFE, // -A- 0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x66, // -B- 0x66,0x66,0x66,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xC0, // -C- 0xC0,0xC2,0x66,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x6C,0x66,0x66,0x66,0x66, // -D- 0x66,0x66,0x6C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68, // -E- 0x60,0x62,0x66,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68, // -F- 0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xDE, // -G- 0xC6,0xC6,0x66,0x3A,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xFE,0xC6, // -H- 0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18, // -I- 0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x0C,0x0C,0x0C,0x0C,0x0C, // -J- 0xCC,0xCC,0xCC,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0xE6,0x66,0x6C,0x6C,0x78,0x78, // -K- 0x6C,0x66,0x66,0xE6,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x60,0x60,0x60,0x60,0x60, // -L- 0x60,0x62,0x66,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xEE,0xFE,0xFE,0xD6,0xC6, // -M- 0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xE6,0xF6,0xFE,0xDE,0xCE, // -N- 0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x6C,0xC6,0xC6,0xC6,0xC6, // -O- 0xC6,0xC6,0x6C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x60, // -P-0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6, // -Q- 0xC6,0xD6,0xDE,0x7C,0x0C,0x0E,0x00,0x00,0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x6C, // -R- 0x66,0x66,0x66,0xE6,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0x60,0x38,0x0C, // -S- 0x06,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x7E,0x5A,0x18,0x18,0x18, // -T- 0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6, // -U- 0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6, // -V- 0xC6,0x6C,0x38,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xD6, // -W- 0xD6,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0x6C,0x6C,0x38,0x38, // -X- 0x6C,0x6C,0xC6,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3C,0x18, // -Y- 0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xC6,0x86,0x0C,0x18,0x30, // -Z- 0x60,0xC2,0xC6,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30, // -[- 0x30,0x30,0x30,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38, // -\- 0x1C,0x0E,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C, // -]- 0x0C,0x0C,0x0C,0x3C,0x00,0x00,0x00,0x00,0x10,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00, // -^- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -_- 0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00, // -`- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x0C,0x7C, // -a- 0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x60,0x60,0x78,0x6C,0x66, // -b- 0x66,0x66,0x66,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC0, // -c- 0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x0C,0x0C,0x3C,0x6C,0xCC, // -d- 0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xFE, // -e- 0xC0,0xC0,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x6C,0x64,0x60,0xF0,0x60, // -f-0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC, // -g- 0xCC,0xCC,0xCC,0x7C,0x0C,0xCC,0x78,0x00,0x00,0x00,0xE0,0x60,0x60,0x6C,0x76,0x66, // -h- 0x66,0x66,0x66,0xE6,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x38,0x18,0x18, // -i- 0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x0E,0x06,0x06, // -j- 0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0xE0,0x60,0x60,0x66,0x6C,0x78, // -k- 0x78,0x6C,0x66,0xE6,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x18,0x18,0x18,0x18,0x18, // -l- 0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0xFE,0xD6, // -m- 0xD6,0xD6,0xD6,0xD6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66, // -n- 0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6, // -o- 0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66, // -p- 0x66,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC, // -q- 0xCC,0xCC,0xCC,0x7C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x76,0x62, // -r- 0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC6,0x60, // -s- 0x38,0x0C,0xC6,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x30,0x30,0xFC,0x30,0x30, // -t- 0x30,0x30,0x36,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0xCC,0xCC, // -u- 0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66, // -v- 0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6, // -w- 0xD6,0xD6,0xFE,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x6C,0x38, // -x- 0x38,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6, // -y- 0xC6,0xC6,0xC6,0x7E,0x06,0x0C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xCC,0x18, // -z- 0x30,0x60,0xC6,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x18,0x18,0x18,0x70,0x18, // -{- 0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x00,0x18, // -|-0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x18,0x18,0x18,0x0E,0x18, // -}-0x18,0x18,0x18,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0xDC,0x00,0x00,0x00,0x00, // -~- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};unsigned char left[] = // ASCII,左移{字模软件提取即可};unsigned char right[] ={字模软件提取即可};struct fonts_struct fonts[FONT_COUNT] = {{8,16,nAsciiDot,' ','~'},};struct fonts_struct leftcode[FONT_COUNT] = {{8,16,left,'a','~'},};struct fonts_struct rightcode[FONT_COUNT] = {{8,16,right,'a','~'},};/******************************************************************************************** ** File: Dotled.c* Author: embest* Desc: DotLed_Test* History:********************************************************************************************* //*------------------------------------------------------------------------------------------*/ /* include files*//*------------------------------------------------------------------------------------------*/ #include "2410lib.h"#include "ziku.h"#include "fonts.h"#include "led16x16.h"/*------------------------------------------------------------------------------------------*/ /* constant define*//*------------------------------------------------------------------------------------------*/ #define En_Dataout rGPBDAT |= 0x20#define DisEn_Dataout rGPBDAT &= 0xFFDF#define CLK_H rGPDDAT |= 0x400#define CLK_L rGPDDAT &= 0xFBFF#define Rdata_H rGPCDAT |= 0x1#define Rdata_L rGPCDAT &= 0xFFFE#define Ldata_H rGPCDAT |= 0x1#define Ldata_L rGPCDAT &= 0xFFFE#define Lstr_H rGPBDAT |= 0x10#define Lstr_L rGPBDAT &= 0xFFEF#define Rstr_H rGPGDAT |= 0x100#define Rstr_L rGPGDAT &= 0xFEFF/*------------------------------------------------------------------------------------------*/ /* global variables*//*------------------------------------------------------------------------------------------*/ INT8T cT emp;INT8T cEnChange0,cEnChange1;UINT8T dispram[32];/******************************************************************************************** ** name: write_L4094* func: write list data* para: none* ret: none* modify:* comment:********************************************************************************************* /void write_L4094(UINT16T data){UINT8T i;Lstr_H;for(i=0;i<16;i++){CLK_L;if(data & 0x01==1)Ldata_H;elseLdata_L;data = data >> 1;CLK_H;}Lstr_L;}/******************************************************************************************** ** name: write_R4094* func: write row data* para: none* ret: none* modify:* comment:********************************************************************************************* /void write_R4094(UINT8T data){UINT8T i;Rstr_H;for(i = 0; i < 8; i++){CLK_L;if(data & 0x01==1)Rdata_H;elseRdata_L;data = data >> 1;CLK_H;}Rstr_L;}/******************************************************************************************** ** name: led_char_disp* func: led char display* para: none* ret: none* modify:* comment:********************************************************************************************* /void led_char_disp(void){UINT8T i=0;UINT8T j=2,k=0;UINT16T x;for(i = 0; i < 32; i++)dispram[i] = ~l_display_array[i];i=0;while(i < 16){Rstr_L; // Enable RSTRLstr_L; // Enable LSTRDisEn_Dataout; // lock the datado { // Write the row data j--;write_R4094(dispram[i * 2 + j]);}while(j);x=~(0x8000 >> i); // Write one list datawrite_L4094(x);En_Dataout; // Output the datafor(k = 0;k < 250; k++);i++;j = 2;}}【设计总结】通过这次嵌入式课程设计,我对嵌入式有了更深一层的理解。