arm触摸屏的头文件_ARM触屏校准程序

原标题:ARM触屏校准程序

程序功能:

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)触屏校准函数库文件,包含以上所有功能模块。

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

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

for (x=x0; x

/* 用tmp取出数组中对应的元素, 长度为1字节,

* 取出tmp中相应的1位, 并转换为2字节的颜色信息,

* 并存入显存相应位置 */

tmp = ASCII[(*p)*16+y-y0];

c = (tmp & (1<

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();

}

/*

* 挨着上次的字符显示指定字符串

*/

voidd_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

LCD_BUFFER[y0][x] = d_color;

for (y=(y0-tmp); 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

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

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 fai, 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

for(j=0;j<400;j++);

}

2)触屏校准头文件。

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

NAME: adj_sc.c

DESC: Adjusting Touch screen & test

HISTORY:

2011.09.01:Joshua Chan: draft ver 1.0

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

#ifndef _ADJ_SC_H_

#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函数。

#define GLOBAL_CLK 1

#include

#include

#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 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

Deion : 设置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

Deion : 设置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<

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<

UCLK = (rCLKDIVN&8)?(UPLL>>1):UPLL;

}

5)ASCII字模数组文件。

/*

* 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,0x0

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值