Mini2440测试通过:
转自:http://www.enjoylinux.cn/bbs/read.php?tid=708
触屏校准&测试程序
程序功能:
1)触屏校准:
按下预设的4个坐标点,利用ADC转换功能采集对应物理坐标,得出物理坐标与屏幕像素坐标之间的关系。
物理坐标和象素坐标的转换表达式如下:
hor_pix = (int)(mul_x * X + add_x)
ver_pix = (int)(mul_y * Y + add_y)
其中:(X, Y)表示物理坐标,(hor_pix, ver_pix)表示象素坐标。
2)触屏坐标测试:
随机按下触屏,根据以上公式,程序自动给出相应象素坐标值。
3)信息显示:
整个过程中的提示信息,均以ASCII字符形式显示在屏幕上。
功能模块说明:
本程序以2440触屏测试程序源码为基础,增加了以下功能模块:
1)ascii码字符串输出函数:以象素点阵画出ascii码字符并在屏幕上显示。
2)字符串滚动显示函数:参考操作系统终端的显示方式,设定一个固定显示8行字符的区域,新的一行字符显示出来的时候会使其上所有字符上移一行。
3)同一行追加显示函数:要显示的字符串不另起一行,而是在最后一行的尾部以追加的方式显示。
4)全屏刷新函数:在屏幕滚动显示的时候,显示效果与显存内容不同步,在滚动结束时,需调用此函数进行处理。
5)画十字函数:在指定位置画出十字,以显示校准点。
6)带轨迹移动十字函数:按指定偏移量水平或垂直移动十字, 并显示移动轨迹。
7)校准数据采集有效性判断函数:根据设定的阀值判断采集到的物理坐标是否有效,以保证准确按下校准点。
8)浮点数/整型数转字符串函数:为了将数值显示于屏幕上,需预先转换为字符串类型。
9)触屏按下处理函数:判断当前按下的点是校准点还是测试点,并做出相应处理,若为校准点将会在屏幕上显示下一步操作提示信息,为测试点的话会显示相应位置的象素坐标。
10)触屏弹起处理函数:判断触屏校准工作是否完成,完成的话将会显示象素坐标的计算公式,否则会给出下一步操作信息。
11)行清理函数:以背景色填充指定行。
程序执行效果如图所示:
以下为代码文件说明:
1)触屏校准函数库文件,包含以上所有功能模块。
adj_sc.c
2)触屏校准头文件。
adj_sc.h
3)Main.c文件,为2440示例代码,全盘引用,仅在Test_Touchpanel函数中加入第1个校准点提示信息,并在AdcTsAuto函数的stylus down部份调用check_touch_down函数,stylus up部份调用check_touch_up函数。
Main.c
4)Main.h文件。
Main.h
5)ASCII字模数组文件。
ascii.c
1)触屏校准函数库文件,包含以上所有功能模块。
adj_sc.c
/*****************************************
NAME: adj_sc.c
DESC: Adjusting Touch screen & test
HISTORY:
2011.09.01:Joshua Chan: draft ver 1.0
*****************************************/
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "mmu.h"
#include "profile.h"
#include "memtest.h"
#include "main.h"
#include "adj_sc.h"
/* 定义320行,240列的数组,用于存放显示数据 */
volatile unsigned short LCD_BUFFER[SCR_YSIZE][SCR_XSIZE];
/* 用(current_x, current_y)来记录下次显示字符的起始坐标 */
int current_x = 0;
int current_y = 0;
/*
* (x1, y1), (x2, y2), (x3, y3), (x4, y4)用来采集4个校准点物理坐标
* 4个屏幕校准点象素坐标分别为: (40, 30), (280, 30), (280, 210), (40, 210)
*/
int x1=0, x2=0, x3=0, x4=0;
int y1=0, y2=0, y3=0, y4=0;
int collect_count = 0;
/* current_row记录下次打印起始行, 第一次打印从57行开始 */
int current_row = 57;
/*
* 物理坐标和象素坐标的转换表达式如下:
* hor_pix = (int)(mul_x * X + add_x)
* ver_pix = (int)(mul_y * Y + add_y)
* 其中: (X, Y)表示物理坐标, (hor_pix, ver_pix)表示象素坐标
*/
float mul_x = 0.0;
float mul_y = 0.0;
float add_x = 0.0;
float add_y = 0.0;
/*
* 用象素点阵画出ascii码字符
* 每个文字点阵8x16, 长度16字节, 即 1 bit 表示 1 象素
* 排列方式:横向顺序,横排
* @*ch: 字模数组地址
* @swi: 起始坐标选择开关, 值为0时, 表示起始坐标为(x0, y0),
* 值为1时, 表示起始坐标为(current_x, current_y),
* 即最后画的那一个字符后面的位置.
*/
void draw_char(int x0, int y0, U16 front_color, U16 back_color, char *ch, int swi)
{
int x=0, y=0;
unsigned char tmp = 0;
U32 c=0;
char *p = ch;
if (swi == 1) {
x0 = current_x;
y0 = current_y;
}
while (*p) {
for (y=y0; y<y0+16; y++) {
for (x=x0; x<x0+8; x++) {
/* 用tmp取出数组中对应的元素, 长度为1字节,
* 取出tmp中相应的1位, 并转换为2字节的颜色信息,
* 并存入显存相应位置 */
tmp = ASCII[(*p)*16+y-y0];
c = (tmp & (1<<(8-(x-x0))))?(front_color):(back_color);
LCD_BUFFER[y][x] = c;
}
}
x0 = x0 + 8;
p++;
}
current_x = x;
current_y = y0;
}
/*
* 在高度为128的象素区滚动显示字符点阵
* 因为每个文字点阵8x16, 所以此区域共可显示8行文字
* 起始垂直象素坐标57, 结束坐标为184
* 第一行文字从坐标57开始, 末行文字从坐标169开始
* @*ch: 要显示的字符串地址
*/
void scroll_display(char *ch)
{
int x0 = 10;
int i, j, k;
if (current_row > 169) {
current_row = 169;
for (i=0; i<16; i++) {
for (j=57; j<184-i; j++) {
clear_line(j);
for (k=1; k<320; k++) {
LCD_BUFFER[j][k] = LCD_BUFFER[j+1][k];
}
}
clear_line(184 - i);
}
}
draw_char(x0, current_row, F_COLOR, B_COLOR, ch, 0);
current_row += 16;
refresh_screen();
}
/*
* 挨着上次的字符显示指定字符串
*/
void add_display(char *ch)
{
draw_char(0, 0, F_COLOR, B_COLOR, ch, 1);
refresh_screen();
}
/*
* 用背景色填充指定行
*/
void clear_line(int line)
{
int i;
for (i=1; i<320; i++)
LCD_BUFFER[line][ i ] = B_COLOR;
}
/*
* 全屏刷新
* 在屏幕滚动显示的时候, 显示效果与显存内容不同步,
* 在滚动结束时, 需调用此函数处理
*/
void refresh_screen(void)
{
int i, j;
for( i = 0 ; i < SCR_YSIZE ; i++ )
for( j = 0 ; j < SCR_XSIZE ; j++ )
LCD_BUFFER[ i ][j] = LCD_BUFFER[ i ][j] ;
}
/*
* 以(x0, y0)为中心画十字
*/
void draw_cross(int x0, int y0, int size, U16 d_color)
{
int x=0, y=0;
int tmp = size/2;
for (x=(x0-tmp); x<(x0+tmp+1); x++)
LCD_BUFFER[y0][x] = d_color;
for (y=(y0-tmp); y<(y0+tmp+1); y++)
LCD_BUFFER[y][x0] = d_color;
}
/*
* 水平或垂直移动十字, 并显示移动轨迹
* 在移动的过程中, 用背景色画十字来清除轨迹
* (x0, y0) 为起始坐标
* @x_of: X 方向偏移量
* @y_of: Y 方向偏移量
* "x_of" 与 "y_of" 二者必须要有一个值为0
*/
void move_cross(int x0, int y0, int siz, int x_of, int y_of)
{
int i = 0;
if (x_of!=0 && y_of!=0)
return;
if (x_of > 0)
for (i=0; i<x_of; i++) {
draw_cross(x0+i-1, y0, siz, B_COLOR);
draw_cross(x0+i+1, y0, siz, B_COLOR);
draw_cross(x0, y0-1, siz, B_COLOR);
draw_cross(x0, y0+1, siz, B_COLOR);
draw_cross(x0+i, y0, siz, F_COLOR);
delay(600);
}
else if (x_of < 0)
for (i=0; i>x_of; i--) {
draw_cross(x0+i-1, y0, siz, B_COLOR);
draw_cross(x0+i+1, y0, siz, B_COLOR);
draw_cross(x0, y0-1, siz, B_COLOR);
draw_cross(x0, y0+1, siz, B_COLOR);
draw_cross(x0+i, y0, siz, F_COLOR);
delay(600);
}
else if (y_of > 0)
for (i=0; i<y_of; i++) {
draw_cross(x0-1, y0, siz, B_COLOR);
draw_cross(x0+1, y0, siz, B_COLOR);
draw_cross(x0, y0+i-1, siz, B_COLOR);
draw_cross(x0, y0+i+1, siz, B_COLOR);
draw_cross(x0, y0+i, siz, F_COLOR);
delay(600);
}
else if (y_of < 0)
for (i=0; i>y_of; i--) {
draw_cross(x0-1, y0, siz, B_COLOR);
draw_cross(x0+1, y0, siz, B_COLOR);
draw_cross(x0, y0+i-1, siz, B_COLOR);
draw_cross(x0, y0+i+1, siz, B_COLOR);
draw_cross(x0, y0+i, siz, F_COLOR);
delay(600);
}
}
/*
* 取字符串长度
*/
int str_len(char *ch)
{
char *p = ch;
int ret = 0;
while (*p) {
ret++;
p++;
}
return ret;
}
/*
* 取绝对值
*/
float abs_val(float f)
{
float ret = f;
if (ret < 0)
ret = (-1) * ret;
return ret;
}
/*
* 对采集到的坐标进行有效性判断
* 允许偏差值可以通过 @allow_val 设置
*/
int check_data(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
{
int allow_val = 20;
int ret = 0;
if (abs_val(y2-y1) > allow_val)
ret = 1;
if (abs_val(x3-x2) > allow_val)
ret = 1;
if (abs_val(y4-y3) > allow_val)
ret = 1;
if (abs_val(x4-x1) > allow_val)
ret = 1;
return ret;
}
/*
* 转换浮点数为字符串, 保留2位小数
*/
void float_str(float f, char *ch)
{
char s[10] = {0};
int sign = (f < 0) ? 1 : 0;
int n = (sign == 1) ? ((int)(f * (-100))) : ((int)(f * 100));
int i = 0;
int j = 0;
s[0] = (n % 10) + '0';
n = n / 10;
s[1] = (n % 10) + '0';
s[2] = '.';
n = n / 10;
i = 3;
while (n) {
s[ i ] = (n % 10) + '0';
n = n / 10;
i++;
}
if (i == 3) {
s[ i ] = '0';
i++;
}
if (sign == 1) {
s[ i ] = '-';
i++;
}
for (--i; i>-1; i--) {
ch[j] = s[ i ];
j++;
}
ch[j] = '\0';
}
/*
* 转换整型数为字符串
*/
void int_str(int n, char *ch)
{
char s[10] = {0};
int i = 0;
int j = 0;
if (n == 0)
{
s[ i ] = '0';
i++;
}
while (n)
{
s[ i ] = (n % 10) + '0';
n = n / 10;
i++;
}
for (--i; i>-1; i--)
{
ch[j] = s[ i ];
j++;
}
ch[j] = '\0';
}
/*
* 在触屏按下时, 根据当前状态作出相应处理
* collect_count为0表示正按下第1个校准点
* collect_count为1表示正按下第2个校准点
* collect_count为2表示正按下第3个校准点
* collect_count为3表示正按下第4个校准点
* collect_count为-2表示正按下测试点
*/
void check_touch_down(void)
{
char hor_pixa[10] = {0};
char ver_pixa[10] = {0};
int hor_pix = 0;
int ver_pix = 0;
if (collect_count == 0) {
x1 = xdata;
y1 = ydata;
move_cross(40, 30, 15, 240, 0);
scroll_display("Please touch the 2nd point.");
collect_count++;
}
else if (collect_count == 1) {
x2 = xdata;
y2 = ydata;
move_cross(280, 30, 15, 0, 180);
scroll_display("Please touch the 3rd point.");
collect_count++;
}
else if (collect_count == 2) {
x3 = xdata;
y3 = ydata;
move_cross(280, 210, 15, -240, 0);
scroll_display("Please touch the 4th point.");
collect_count++;
}
else if (collect_count == 3) {
x4 = xdata;
y4 = ydata;
collect_count++;
}
else if (collect_count == -2) {
hor_pix = (int)(mul_x * xdata + add_x);
ver_pix = (int)(mul_y * ydata + add_y);
if (hor_pix < 0)
hor_pix = 0;
else if (hor_pix > 319)
hor_pix = 319;
if (ver_pix < 0)
ver_pix = 0;
else if (ver_pix > 239)
ver_pix = 239;
int_str(hor_pix, hor_pixa);
int_str(ver_pix, ver_pixa);
scroll_display("");
scroll_display("coordinate(hor, ver) = (");
add_display(hor_pixa);
add_display(", ");
add_display(ver_pixa);
add_display(")");
}
}
/*
* 在触屏弹起时, 根据当前状态作出相应处理
* collect_count为4表示第4个校准点已采集完毕
* collect_count为-1表示校准工作已完成
*/
void check_touch_up(void)
{
char mul_xa[10] = {0};
char mul_ya[10] = {0};
char add_xa[10] = {0};
char add_ya[10] = {0};
if (collect_count == 4) {
if (!(check_data(x1, y1, x2, y2, x3, y3, x4, y4))) {
mul_x = (280-40) / (((float)x2+(float)x3-(float)x1-(float)x4)/2);
add_x = 40 - (mul_x * (((float)x1+(float)x4)/2));
mul_y = (210-30) / (((float)y3+(float)y4-(float)y1-(float)y2)/2);
add_y = 30 - (mul_y * (((float)y1+(float)y2)/2));
float_str(mul_x, mul_xa);
float_str(add_x, add_xa);
float_str(mul_y, mul_ya);
float_str(add_y, add_ya);
scroll_display("");
scroll_display("Adjusting finished!");
scroll_display("");
scroll_display("hor_pix = (int)((");
add_display(mul_xa);
add_display(")*X+(");
add_display(add_xa);
add_display("))");
scroll_display("ver_pix = (int)((");
add_display(mul_ya);
add_display(")*Y+(");
add_display(add_ya);
add_display("))");
scroll_display("");
delay(30000);
scroll_display("Touch the screen to continue.");
collect_count = -1;
draw_cross(41, 210, 15, B_COLOR);
refresh_screen();
}
else {
scroll_display("");
scroll_display("Adjusting failed, try again.");
collect_count = 0;
scroll_display("");
delay(30000);
scroll_display("Please touch the 1st point.");
draw_cross(41, 210, 15, B_COLOR);
refresh_screen();
draw_cross(40, 30, 15, F_COLOR);
}
}
else if (collect_count == -1) {
scroll_display("");
scroll_display("As the touch screen is adjusted,");
delay(10000);
scroll_display("let's have some test.");
delay(10000);
scroll_display("You can touch the screen,");
delay(10000);
scroll_display("and the coordinate will be shown.");
collect_count = -2;
}
}
void delay(int times)
{
int i,j;
for(i=0;i<times;i++)
for(j=0;j<400;j++);
}
2)触屏校准头文件。
adj_sc.h
#ifndef _ADJ_SC_H_
/*****************************************
NAME: adj_sc.c
DESC: Adjusting Touch screen & test
HISTORY:
2011.09.01:Joshua Chan: draft ver 1.0
*****************************************/
#define _ADJ_SC_H_
#define F_COLOR 0xFFFF
#define B_COLOR 0x0
extern int collect_count;
extern int xdata;
extern int ydata;
/* 声明ascii码字模数组,数组在ascii.c文件中定义 */
extern unsigned char ASCII[];
extern volatile unsigned short LCD_BUFFER[SCR_YSIZE][SCR_XSIZE];
extern void draw_char(int x0, int y0, U16 front_color, U16 back_color, char *ch, int swi);
extern void scroll_display(char *ch);
extern void add_display(char *ch);
extern void clear_line(int line);
extern void refresh_screen(void);
extern void draw_cross(int x0, int y0, int siz, unsigned short d_color);
extern void move_cross(int x0, int y0, int siz, int x_of, int y_of);
extern int str_len(char *ch);
extern float abs_val(float f);
extern int check_data(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
extern void float_str(float f, char *ch);
extern void int_str(int n, char *ch);
extern void check_touch_down(void);
extern void check_touch_up(void);
extern void delay(int times);
#endif
3)Main.c文件,为2440示例代码,全盘引用,仅在Test_Touchpanel函数中加入第1个校准点提示信息,并在AdcTsAuto函数的stylus down部份调用check_touch_down函数,stylus up部份调用check_touch_up函数。
Main.c #define GLOBAL_CLK 1 #include <stdlib.h> #include <string.h> #include "def.h" #include "option.h" #include "2440addr.h" #include "2440lib.h" #include "2440slib.h" #include "mmu.h" #include "profile.h" #include "memtest.h" #include "main.h" #include "adj_sc.h" volatile U32 preScaler; int xdata=0, ydata=0; static void __irq AdcTsAuto(void); void Test_Touchpanel(void); static void Lcd_EnvidOnOff(int onoff); static void Lcd_Port_Init( void ); static void LCD_Init(void); void Set_Clk(void); static void cal_cpu_bus_clk(void); int Main(void) { MMU_Init(); Set_Clk(); LCD_Init(); Test_Touchpanel(); while(1); return 0; } void Test_Touchpanel(void) { rADCDLY=50000; //Normal conversion mode delay about (1/3.6864M)*50000=13.56ms /*设置AD转频率*/ preScaler = ADC_FREQ; preScaler = 50000000/ADC_FREQ - 1; //PCLK=50M rADCCON = (1<<14)|(preScaler<<6); //ADCPRS En,PRSCVL // rADCCON=(1<<14)+(preScaler<<6); //ADCPRS En, ADCPRS Value /* 开始显示触屏校准提示信息, 并提示第1个触点位置 */ draw_char(72, 6, F_COLOR, B_COLOR, "Adjusting Touch Screen", 0); scroll_display("Please touch the 1st point."); draw_cross(40, 30, 15, F_COLOR); /*设置触摸屏为等待中断模式,等待触摸笔被按下*/ rADCTSC=0xd3; //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En /*clear irq*/ //ClearPending(BIT_ADC); rSRCPND = 0x80000000; rINTPND = 0x80000000; ClearSubPending(BIT_SUB_TC); pISR_ADC = (U32)AdcTsAuto; /*enable INT_TC irq*/ //EnableIrq(BIT_ADC); rINTMSK = 0x7fffffff; EnableSubIrq(BIT_SUB_TC); } static void __irq AdcTsAuto(void) { U32 saveAdcdly; // int s_len = 0; // int x_p = 0; /****************stylus down************************/ /*pull-up disable,自动连续X,Y坐标转换*/ rADCTSC = (1<<3)|(1<<2); saveAdcdly=rADCDLY; rADCDLY=40000; //Normal conversion mode delay about (1/50M)*40000=0.8ms /*开始AD转换*/ rADCCON|=0x1; //start ADC while(rADCCON & 0x1); //check if Enable_start is low while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high, This line is necessary~!! while(!(rSRCPND & 0x80000000)); //check if ADC is finished with interrupt bit /*获取X,Y坐标*/ xdata=(rADCDAT0&0x3ff); ydata=(rADCDAT1&0x3ff); /* 调用触屏按下处理函数, 根据当前状态作出相应处理 */ check_touch_down(); ClearSubPending(BIT_SUB_TC); //ClearPending(BIT_ADC); rSRCPND = 0x80000000; rINTPND = 0x80000000; EnableSubIrq(BIT_SUB_TC); //EnableIrq(BIT_ADC); rINTMSK = 0x7fffffff; /****************stylus down************************/ /****************stylus up**************************/ /*设置触摸屏为等待中断模式,等待触摸笔抬起*/ rADCTSC =0xd3; //Waiting for interrupt rADCTSC=rADCTSC|(1<<8); // Detect stylus up interrupt signal. while(1) //to check Pen-up state { if(rSUBSRCPND & (BIT_SUB_TC)) //check if ADC is finished with interrupt bit { break; //if Stylus is up(1) state } } /****************stylus up**************************/ /* 调用触屏弹起处理函数, 根据当前状态作出相应处理 */ check_touch_up(); rADCDLY=saveAdcdly; /*设置触摸屏为等待中断模式,等待下次触摸笔按下*/ rADCTSC =0xd3; //Waiting for interrupt ClearSubPending(BIT_SUB_TC); //ClearPending(BIT_ADC); rSRCPND = 0x80000000; rINTPND = 0x80000000; EnableSubIrq(BIT_SUB_TC); //EnableIrq(BIT_ADC); rINTMSK = 0x7fffffff; } /*LCD开关*/ static void Lcd_EnvidOnOff(int onoff) { if(onoff==1) rLCDCON1|=1; // ENVID=ON else rLCDCON1 =rLCDCON1 & 0x3fffe; // ENVID Off } static void Lcd_Port_Init( void ) { rGPCUP=0xffffffff; // Disable Pull-up register rGPCCON=0xaaaa02a8; //Initialize VD[7:0],VM,VFRAME,VLINE,VCLK rGPDUP=0xffffffff; // Disable Pull-up register rGPDCON=0xaaaaaaaa; //Initialize VD[15:8] } /*LCD初始化*/ static void LCD_Init(void) { Lcd_Port_Init(); /*显示模式初始化*/ /*bit[17:8](4:CLKVAL);bit[6:5](11:TFT LCD panel);bit[4:1](1100:16 bpp for TFT)*/ rLCDCON1 = (LCD_PIXCLOCK << 8) | (3 << 5) | (12 << 1); /*bit[31:24](1:VBPD);bit[23:14](320-1:行数);bit[13:6](5:VFPD);bit[5:0](1:VSPW)*/ rLCDCON2 = (LCD_UPPER_MARGIN << 24) | ((LCD_HEIGHT - 1) << 14) | (LCD_LOWER_MARGIN << 6) | (LCD_VSYNC_LEN << 0); /*bit[25:19](36:HBPD);bit[18:8](240-1:列数);bit[7:0](19:HFPD)*/ rLCDCON3 = (LCD_RIGHT_MARGIN << 19) | ((LCD_WIDTH - 1) << 8) | (LCD_LEFT_MARGIN << 0); /*bit[15:8](13:MVAL,只有当LCDCON1 bit[7]MMODE=1才有效);bit[7:0](5:HSPW)*/ rLCDCON4 = (13 << 8) | (LCD_HSYNC_LEN << 0); /*bit[11](5:6:5 Format);bit[9](VLINE/HSYNC polarity inverted);bit[8](VFRAME/VSYNC inverted) bit[3](Enalbe PWERN signal),bit[1](half-word swap control bit)*/ rLCDCON5 = (1<<11) | (1 << 9) | (1 << 8) | (1 << 3) | (1 << 0); /* * 帧缓冲地址初始化 * LCDBANK: 视频帧缓冲区内存地址30-22位 * LCDBASEU: 视频帧缓冲区的开始地址21-1位 * LCDBASEL: 视频帧缓冲区的结束地址21-1位 * * bit[29:21]:LCDBANK,bit[20:0]:LCDBASEU */ rLCDSADDR1 = ((LCD_ADDR >> 22) << 21) | ((M5D(LCD_ADDR >> 1)) << 0); /*bit[20:0]:LCDBASEL*/ rLCDSADDR2 = M5D((LCD_ADDR + LCD_WIDTH * LCD_HEIGHT * 2) >> 1); /* * PAGEWIDTH:虚拟屏幕一行的字节数,如果不使用虚拟屏幕,设置为实际屏幕的行字节数 * OFFSIZE:虚拟屏幕左侧偏移的字节数,如果不使用虚拟屏幕,设置为0 * bit[21:11]:OFFSIZE; bit[10:0]:PAGEWIDTH */ rLCDSADDR3 = LCD_WIDTH; /*屏蔽中断*/ rLCDINTMSK |= 3; rTCONSEL &= (~7); /*disable调色板*/ rTPAL = 0x0; /*禁止LPC3600/LCC3600模式*/ rTCONSEL &= ~((1<<4) | 1); /*打开LCD*/ Lcd_EnvidOnOff(1); } /************************************************* Function name: Set_Clk() Parameter : void Description : 设置CPU的时钟频率 Return : void Argument : void Autor & date : Daniel **************************************************/ void Set_Clk(void) { int i; U8 key; U32 mpll_val = 0 ; i = 2 ; //don't use 100M! //boot_params.cpu_clk.val = 3; switch ( i ) { case 0: //200 key = 12; mpll_val = (92<<12)|(4<<4)|(1); break; case 1: //300 key = 13; mpll_val = (67<<12)|(1<<4)|(1); break; case 2: //400 key = 14; mpll_val = (92<<12)|(1<<4)|(1); break; case 3: //440!!! key = 14; mpll_val = (102<<12)|(1<<4)|(1); break; default: key = 14; mpll_val = (92<<12)|(1<<4)|(1); break; } //init FCLK=400M, so change MPLL first ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3); //set the register--rMPLLCON ChangeClockDivider(key, 12); //the result of rCLKDIVN [0:1:0:1] 3-0 bit cal_cpu_bus_clk(); //HCLK=100M PCLK=50M } /************************************************* Function name: cal_cpu_bus_clk Parameter : void Description : 设置PCLK\HCLK\FCLK的频率 Return : void Argument : void Autor & date : Daniel **************************************************/ static void cal_cpu_bus_clk(void) { static U32 cpu_freq; static U32 UPLL; U32 val; U8 m, p, s; val = rMPLLCON; m = (val>>12)&0xff; p = (val>>4)&0x3f; s = val&3; //(m+8)*FIN*2 不要超出32位数! FCLK = ((m+8)*(FIN/100)*2)/((p+2)*(1<<s))*100; //FCLK=400M FIN=12000000 val = rCLKDIVN; m = (val>>1)&3; p = val&1; val = rCAMDIVN; s = val>>8; switch (m) { case 0: HCLK = FCLK; break; case 1: HCLK = FCLK>>1; break; case 2: if(s&2) HCLK = FCLK>>3; else HCLK = FCLK>>2; break; case 3: if(s&1) HCLK = FCLK/6; else HCLK = FCLK/3; break; } if(p) PCLK = HCLK>>1; else PCLK = HCLK; if(s&0x10) cpu_freq = HCLK; else cpu_freq = FCLK; val = rUPLLCON; m = (val>>12)&0xff; p = (val>>4)&0x3f; s = val&3; UPLL = ((m+8)*FIN)/((p+2)*(1<<s)); UCLK = (rCLKDIVN&8)?(UPLL>>1):UPLL; }
4)Main.h文件。
Main.h /**************************************************************** NAME: MAIN.h DESC: HISTORY: Mar.29.2002:purnnamu: created first ****************************************************************/ #ifndef __MAIN_H__ #define __MAIN_H__ #define LCD_W35 #if defined(LCD_W35) #define LCD_PIXCLOCK 4 #define LCD_WIDTH 320 #define LCD_HEIGHT 240 #define LCD_RIGHT_MARGIN 0x44 #define LCD_LEFT_MARGIN 0x04 #define LCD_HSYNC_LEN 0x01 #define LCD_UPPER_MARGIN 10 #define LCD_LOWER_MARGIN 4 #define LCD_VSYNC_LEN 1 #define LCD_CON5 ((1<<11) | (1<<8) | (1<<9) | (1<<0) ) #endif #define LCD_XSIZE LCD_WIDTH #define LCD_YSIZE LCD_HEIGHT #define SCR_XSIZE LCD_WIDTH #define SCR_YSIZE LCD_HEIGHT #define M5D(n) ((n)&0x1fffff) #define LCD_ADDR ((U32)LCD_BUFFER) #define ADC_FREQ 2500000 #endif /*__MAIN_H__*/
5)ASCII字模数组文件。
ascii.c /* * ASCII字符的点阵字模数组 * 每个ASCII字符用8x16点阵表示, 占16字节 * 包括值为(0x00 ~ 0xFF)的共256个ASCII字符 */ const unsigned char ASCII[] = { /* line 0 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* line 1 */ 0x00,0x00,0x00,0x00,0x7E,0xC3,0x81,0xA5,0x81,0xBD,0x99,0xC3,0x7E,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x7E,0xFF,0xFF,0xDB,0xFF,0xC3,0xE7,0xFF,0x7E,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x44,0xEE,0xFE,0xFE,0xFE,0x7C,0x38,0x10,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x10,0x38,0x7C,0xFE,0xFE,0x7C,0x38,0x10,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0xFF,0xE7,0xE7,0x18,0x18,0x7E,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x18,0x3C,0x7E,0xFF,0xFF,0x7E,0x18,0x18,0x7E,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x7E,0x7E,0x3C,0x00,0x00,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0x81,0x81,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF, 0x00,0x00,0x00,0x3C,0x7E,0x66,0x66,0x42,0x42,0x66,0x66,0x7E,0x3C,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0xC3,0x81,0x99,0x99,0xBD,0xBD,0x99,0x99,0x81,0xC3,0xFF,0xFF,0xFF, 0x00,0x00,0x00,0x00,0x3E,0x0E,0x3A,0x72,0xF8,0xCC,0xCC,0xCC,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x18,0x7E,0x18,0x18,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x1F,0x19,0x19,0x1F,0x18,0x18,0x78,0xF8,0x70,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x7F,0x63,0x7F,0x63,0x63,0x63,0x67,0xE7,0xE6,0xC0,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x18,0xDB,0x7E,0xE7,0xE7,0x7E,0xDB,0x18,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF8,0xFE,0xF8,0xE0,0xC0,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x06,0x0E,0x3E,0xFE,0x3E,0x0E,0x06,0x02,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x7E,0x3C,0x18,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x66,0x66,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x7F,0xDB,0xDB,0xDB,0x7B,0x1B,0x1B,0x1B,0x1B,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x7E,0x63,0x30,0x3C,0x66,0x66,0x3C,0x0C,0xC6,0x7E,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x7E,0x3C,0x18,0x7E,0x00,0x00, 0x00,0x00,0x00,0x00,0x18,0x3C,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x3C,0x18,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x0C,0xFE,0x0C,0x18,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x60,0xFE,0x60,0x30,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xFE,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x66,0xFF,0x66,0x24,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x38,0x38,0x7C,0x7C,0xFE,0xFE,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0x7C,0x7C,0x38,0x38,0x10,0x10,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x30,0x78,0x78,0x78,0x30,0x30,0x00,0x30,0x30,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x24,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,0x00,0x00,0x30,0x30,0x7C,0xC0,0xC0,0x78,0x0C,0x0C,0xF8,0x30,0x30,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xC4,0xCC,0x18,0x30,0x60,0xCC,0x8C,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x70,0xD8,0xD8,0x70,0xFA,0xDE,0xCC,0xDC,0x76,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x0C,0x18,0x30,0x60,0x60,0x60,0x30,0x18,0x0C,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x60,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,0x00,0x38,0x38,0x60,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,0x38,0x38,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x7C,0xC6,0xCE,0xDE,0xD6,0xF6,0xE6,0xC6,0x7C,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x10,0x30,0xF0,0x30,0x30,0x30,0x30,0x30,0xFC,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x78,0xCC,0xCC,0x0C,0x18,0x30,0x60,0xCC,0xFC,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x78,0xCC,0x0C,0x0C,0x38,0x0C,0x0C,0xCC,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x0C,0x1C,0x3C,0x6C,0xCC,0xFE,0x0C,0x0C,0x1E,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xFC,0xC0,0xC0,0xC0,0xF8,0x0C,0x0C,0xCC,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x38,0x60,0xC0,0xC0,0xF8,0xCC,0xCC,0xCC,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xFE,0xC6,0xC6,0x06,0x0C,0x18,0x30,0x30,0x30,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x78,0xCC,0xCC,0xEC,0x78,0xDC,0xCC,0xCC,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x78,0xCC,0xCC,0xCC,0x7C,0x18,0x18,0x30,0x70,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x38,0x38,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x38,0x38,0x18,0x30,0x00,0x00, 0x00,0x00,0x00,0x00,0x0C,0x18,0x30,0x60,0xC0,0x60,0x30,0x18,0x0C,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x78,0xCC,0x0C,0x18,0x30,0x30,0x00,0x30,0x30,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x7C,0xC6,0xC6,0xDE,0xDE,0xDE,0xC0,0xC0,0x7C,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x30,0x78,0xCC,0xCC,0xCC,0xFC,0xCC,0xCC,0xCC,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x66,0x66,0x66,0xFC,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x3C,0x66,0xC6,0xC0,0xC0,0xC0,0xC6,0x66,0x3C,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xF8,0x6C,0x66,0x66,0x66,0x66,0x66,0x6C,0xF8,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xFE,0x62,0x60,0x64,0x7C,0x64,0x60,0x62,0xFE,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xFE,0x66,0x62,0x64,0x7C,0x64,0x60,0x60,0xF0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x3C,0x66,0xC6,0xC0,0xC0,0xCE,0xC6,0x66,0x3E,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xCC,0xCC,0xCC,0xCC,0xFC,0xCC,0xCC,0xCC,0xCC,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x1E,0x0C,0x0C,0x0C,0x0C,0xCC,0xCC,0xCC,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xE6,0x66,0x6C,0x6C,0x78,0x6C,0x6C,0x66,0xE6,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xF0,0x60,0x60,0x60,0x60,0x62,0x66,0x66,0xFE,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xC6,0xC6,0xE6,0xF6,0xFE,0xDE,0xCE,0xC6,0xC6,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x38,0x6C,0xC6,0xC6,0xC6,0xC6,0xC6,0x6C,0x38,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0xF0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x38,0x6C,0xC6,0xC6,0xC6,0xCE,0xDE,0x7C,0x0C,0x1E,0x00,0x00, 0x00,0x00,0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x6C,0x66,0x66,0xE6,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x78,0xCC,0xCC,0xC0,0x70,0x18,0xCC,0xCC,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xFC,0xB4,0x30,0x30,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x78,0x30,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xC6,0xC6,0xC6,0xC6,0xD6,0xD6,0x6C,0x6C,0x6C,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xCC,0xCC,0xCC,0x78,0x30,0x78,0xCC,0xCC,0xCC,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xCC,0xCC,0xCC,0xCC,0x78,0x30,0x30,0x30,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xFE,0xCE,0x98,0x18,0x30,0x60,0x62,0xC6,0xFE,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00,0x00,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,0xFF,0x00,0x00, 0x00,0x00,0x00,0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x0C,0x7C,0xCC,0xCC,0x76,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xE0,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0xDC,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xCC,0xC0,0xC0,0xCC,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x1C,0x0C,0x0C,0x7C,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xCC,0xFC,0xC0,0xCC,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x38,0x6C,0x60,0x60,0xF8,0x60,0x60,0x60,0xF0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC,0xCC,0x7C,0x0C,0xCC,0x78,0x00, 0x00,0x00,0x00,0x00,0xE0,0x60,0x60,0x6C,0x76,0x66,0x66,0x66,0xE6,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x78,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0xCC,0xCC,0x78,0x00, 0x00,0x00,0x00,0x00,0xE0,0x60,0x60,0x66,0x6C,0x78,0x6C,0x66,0xE6,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xD6,0xD6,0xD6,0xD6,0xC6,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xCC,0xCC,0xCC,0xCC,0xCC,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xCC,0xCC,0xCC,0xCC,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDC,0x66,0x66,0x66,0x66,0x7C,0x60,0xF0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0xCC,0xCC,0xCC,0xCC,0x7C,0x0C,0x1E,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0x6E,0x76,0x60,0x60,0xF0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xCC,0x60,0x18,0xCC,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x20,0x60,0xFC,0x60,0x60,0x60,0x6C,0x38,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0xCC,0xCC,0xCC,0xCC,0x76,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0xCC,0xCC,0xCC,0x78,0x30,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xD6,0xD6,0x6C,0x6C,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x6C,0x38,0x38,0x6C,0xC6,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3C,0x0C,0x18,0xF0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x8C,0x18,0x60,0xC4,0xFC,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x1C,0x30,0x30,0x60,0xC0,0x60,0x30,0x30,0x1C,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xE0,0x30,0x30,0x18,0x0C,0x18,0x30,0x30,0xE0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x73,0xDA,0xCE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x38,0x6C,0xC6,0xC6,0xFE,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x78,0xCC,0xCC,0xC0,0xC0,0xC0,0xCC,0xCC,0x78,0x30,0xF0,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,0x00,0x00,0x00,0x60,0x60,0x20,0x20,0x00, 0x00,0x00,0x07,0x04,0x04,0x08,0x0C,0x08,0x08,0x18,0x10,0x10,0x10,0x20,0x20,0xC0, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x6E,0x22,0x44,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x18,0x18,0x10,0x7E,0x10,0x18,0x18,0x10,0x10,0x10,0x10,0x10,0x10,0x00, 0x00,0x00,0x18,0x18,0x76,0x7E,0x18,0x10,0x10,0x10,0x10,0x18,0x76,0x5A,0x18,0x18, 0x00,0x00,0x30,0x50,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x30,0x48,0x48,0x48,0x49,0x32,0x04,0x08,0x11,0x22,0x42,0x82,0x02,0x01,0x00, 0x00,0x3C,0x00,0x3C,0x42,0x40,0x40,0x30,0x0C,0x06,0x02,0x02,0x42,0x7C,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x20,0x60,0x60,0x20,0x10,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x3E,0x4A,0x48,0x48,0x4A,0x4E,0x48,0x48,0x48,0x49,0x3F,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,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, 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,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x60,0x60,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0x01,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x10,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x60,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xE9,0x4B,0x4B,0x5D,0x55,0x5F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x88,0x70,0x20,0x30,0x48,0x40,0x60,0x38,0x0C,0x4C,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x30,0x10,0x20,0x20,0x40,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x7D,0x49,0x4F,0x48,0x48,0x4D,0x36,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x24,0x24,0x00,0x42,0x44,0x24,0x28,0x18,0x18,0x10,0x10,0x10,0x10,0x3C,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x00,0x00,0x04,0x04,0x04,0x18,0x2E,0x4E,0x50,0x50,0x50,0x22,0x3C,0x40,0x40,0x40, 0x00,0x00,0x00,0x1E,0x22,0x20,0x20,0x20,0x38,0x20,0x20,0x21,0xFA,0x4C,0x00,0x00, 0x00,0x40,0x27,0x18,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0x18,0x27,0x40,0x00, 0x00,0x00,0x00,0x62,0x24,0x24,0x14,0x18,0xFF,0x08,0xFF,0x08,0x08,0x3C,0x00,0x00, 0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40, 0x07,0x08,0x08,0x04,0x02,0x03,0x04,0x08,0x08,0x05,0x02,0x01,0x04,0x08,0x08,0x07, 0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x7E,0xA6,0xC1,0xC1,0xC1,0xA6,0x5A,0x24,0x00,0x00,0x00,0x00, 0x00,0x00,0xE0,0x90,0xF0,0x90,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x11,0x22,0x24,0x44,0x4C,0x24,0x22,0x12,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x7E,0xAA,0xA5,0xB9,0xA9,0xA6,0x42,0x3C,0x00,0x00,0x00,0x00, 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x30,0x48,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x01,0x01,0x01,0x00,0x0F,0x00,0x00,0x00,0x00, 0x00,0x00,0x70,0x90,0x10,0x20,0x50,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x70,0x10,0x20,0x10,0x10,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x2F,0x50,0x40,0x40,0x00,0x00, 0x00,0x00,0x3E,0xF4,0xF4,0xF4,0xF4,0x74,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x00, 0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x60, 0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x70,0x98,0x88,0x50,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x88,0x48,0x24,0x22,0x32,0x24,0x44,0x88,0x00,0x00,0x00, 0x00,0x00,0x42,0x44,0x44,0x48,0x48,0x50,0x12,0x26,0x26,0x27,0x40,0x00,0x00,0x00, 0x00,0x00,0x44,0x44,0x44,0x48,0x48,0x50,0x17,0x21,0x22,0x44,0x47,0x00,0x00,0x00, 0x00,0x00,0x62,0x24,0x44,0x28,0x28,0x50,0x12,0x16,0x26,0x27,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x10,0x20,0x20,0x44,0x44,0x3C,0x00,0x00, 0x10,0x10,0x00,0x10,0x18,0x28,0x28,0x28,0x24,0x3C,0x44,0x44,0x42,0xC7,0x00,0x00, 0x08,0x10,0x20,0x10,0x18,0x28,0x28,0x28,0x24,0x3C,0x44,0x44,0x42,0xC7,0x00,0x00, 0x18,0x28,0x00,0x10,0x18,0x28,0x28,0x28,0x24,0x3C,0x44,0x44,0x42,0xC7,0x00,0x00, 0x30,0x0C,0x00,0x10,0x18,0x28,0x28,0x28,0x24,0x3C,0x44,0x44,0x42,0xC7,0x00,0x00, 0x24,0x3C,0x00,0x10,0x18,0x28,0x28,0x28,0x24,0x3C,0x44,0x44,0x42,0xC7,0x00,0x00, 0x18,0x28,0x18,0x10,0x18,0x28,0x28,0x28,0x24,0x3C,0x44,0x44,0x42,0xC7,0x00,0x00, 0x00,0x00,0x00,0x1E,0x18,0x28,0x28,0x2A,0x4E,0x78,0x48,0x48,0x89,0xDE,0x00,0x00, 0x00,0x00,0x00,0x1C,0x23,0x41,0x40,0x40,0x40,0x40,0x40,0x61,0x32,0x0C,0x08,0x08, 0x30,0x10,0x10,0x6E,0x42,0x40,0x44,0x44,0x7C,0x44,0x40,0x40,0x42,0xFE,0x00,0x00, 0x0C,0x08,0x10,0x6E,0x42,0x40,0x44,0x44,0x7C,0x44,0x40,0x40,0x42,0xFE,0x00,0x00, 0x18,0x28,0x44,0x7E,0x42,0x40,0x44,0x44,0x7C,0x44,0x40,0x40,0x42,0xFE,0x00,0x00, 0x2C,0x2C,0x00,0x7E,0x42,0x40,0x44,0x44,0x7C,0x44,0x40,0x40,0x42,0xFE,0x00,0x00, 0x30,0x10,0x10,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00, 0x0C,0x08,0x10,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00, 0x18,0x28,0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00, 0x24,0x2C,0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00, 0x00,0x00,0x00,0x3C,0x22,0x22,0x21,0x21,0x31,0x21,0x23,0x22,0x26,0x78,0x00,0x00, 0x30,0x0C,0x00,0x42,0x62,0x62,0x52,0x52,0x4A,0x4A,0x46,0x46,0x42,0xE2,0x00,0x00, 0x30,0x10,0x10,0x2C,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00, 0x08,0x10,0x10,0x2C,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00, 0x18,0x28,0x44,0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00, 0x30,0x0C,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00, 0x24,0x24,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00, 0x00,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x02,0x04,0x08,0x10,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x3C,0x42,0x46,0x4A,0x4A,0x53,0x52,0x62,0x62,0x44,0x38,0x00,0x00, 0x30,0x10,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x44,0x38,0x00,0x00, 0x08,0x08,0x10,0x62,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x44,0x38,0x00,0x00, 0x18,0x28,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x44,0x38,0x00,0x00, 0x24,0x24,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x44,0x38,0x00,0x00, 0x08,0x08,0x10,0x62,0x44,0x24,0x28,0x18,0x18,0x10,0x10,0x10,0x10,0x3C,0x00,0x00, 0x00,0x00,0x00,0x20,0x20,0x38,0x26,0x21,0x21,0x21,0x26,0x38,0x20,0x70,0x00,0x00, 0x00,0x00,0x00,0x1C,0x22,0x22,0x22,0x2C,0x22,0x22,0x22,0x22,0x3A,0x6C,0x00,0x00, 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x3A,0x00,0x00, 0x00,0x00,0x00,0x00,0x08,0x18,0x00,0x38,0x44,0x44,0x44,0x44,0x44,0x3A,0x00,0x00, 0x00,0x00,0x30,0x28,0x44,0x00,0x00,0x7C,0x44,0x1C,0x64,0x44,0x45,0x3A,0x00,0x00, 0x00,0x00,0x20,0x5C,0x00,0x00,0x00,0x7C,0x44,0x1C,0x64,0x44,0x45,0x3A,0x00,0x00, 0x00,0x00,0x28,0x6C,0x00,0x00,0x00,0x7C,0x44,0x1C,0x64,0x44,0x45,0x3A,0x00,0x00, 0x00,0x00,0x38,0x28,0x10,0x00,0x00,0x7C,0x44,0x1C,0x64,0x44,0x45,0x3A,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x66,0x99,0x91,0x3F,0x50,0x90,0x99,0x6E,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x18,0x64,0x44,0x40,0x40,0x44,0x44,0x38,0x20,0x10,0x60, 0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x3C,0x42,0x42,0x7C,0x40,0x22,0x1C,0x00,0x00, 0x00,0x00,0x00,0x04,0x08,0x08,0x00,0x3C,0x42,0x42,0x7C,0x40,0x22,0x1C,0x00,0x00, 0x00,0x00,0x00,0x18,0x38,0x44,0x00,0x3C,0x42,0x42,0x7C,0x40,0x22,0x1C,0x00,0x00, 0x00,0x00,0x00,0x2C,0x24,0x00,0x00,0x3C,0x42,0x42,0x7C,0x40,0x22,0x1C,0x00,0x00, 0x00,0x00,0x00,0x20,0x20,0x10,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 0x00,0x00,0x00,0x08,0x10,0x10,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00, 0x00,0x00,0x10,0x28,0x48,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x3C,0x00,0x00, 0x00,0x00,0x28,0x6C,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x3C,0x00,0x00, 0x00,0x00,0x00,0x24,0x18,0x28,0x04,0x3E,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00, 0x00,0x00,0x30,0x1C,0x00,0x00,0x00,0x7C,0x42,0x42,0x42,0x42,0x42,0xE6,0x00,0x00, 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x66,0x3C,0x00,0x00, 0x00,0x00,0x00,0x00,0x0C,0x08,0x00,0x3C,0x42,0x42,0x42,0x42,0x66,0x18,0x00,0x00, 0x00,0x00,0x18,0x28,0x04,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x44,0x38,0x00,0x00, 0x00,0x00,0x30,0x1C,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x44,0x38,0x00,0x00, 0x00,0x00,0x24,0x2C,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x44,0x38,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x1F,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x46,0x4A,0x52,0x62,0x44,0xB8,0x00,0x00, 0x00,0x00,0x00,0x00,0x10,0x00,0xC4,0x44,0x44,0x44,0x44,0x44,0x26,0x3A,0x00,0x00, 0x00,0x00,0x00,0x04,0x08,0x18,0xC4,0x44,0x44,0x44,0x44,0x44,0x26,0x3A,0x00,0x00, 0x00,0x00,0x18,0x28,0x44,0x00,0x02,0x42,0x42,0x42,0x42,0x42,0x46,0x38,0x00,0x00, 0x00,0x00,0x00,0x00,0x24,0x24,0xC4,0x44,0x44,0x44,0x44,0x44,0x26,0x3A,0x00,0x00, 0x00,0x00,0x0C,0x08,0x10,0x00,0x00,0x24,0x24,0x24,0x18,0x18,0x10,0x10,0x10,0x60, 0x00,0x00,0xC0,0x40,0x40,0x40,0x5E,0x22,0x42,0x42,0x22,0x22,0x54,0x48,0x40,0x60, 0x00,0x00,0x24,0x24,0x00,0x00,0x00,0x24,0x24,0x24,0x18,0x18,0x10,0x10,0x10,0x60, }; |