⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 show_char.c~

📁 嵌入式计算系统-走迷宫 通过LCD显示地图和汽车
💻 C~
字号:
/*
 *	test.c  ---	Primary header file for 
 *				LCD Device Driver with Framebuffer
 *	(C)opyright 2004 Bit 920 Labs
 *
 *	Written by: Tangliting <dawn@bit.edu.cn>
 *	Created on: Sat. Mar 7 14:33:45 GMT +8:00 2004
 */

#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <fcntl.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <sys/mman.h>#include <string.h>#include <linux/fb.h>#include <linux/kd.h>#include <sys/mman.h>#include <sys/types.h>#include <sys/stat.h>#include <termios.h>#include <sys/time.h>#include <sys/ioctl.h>#include "keyboard_zlg.h"//#include "lcd.h"#include "lcd.c"#include "ascii.lib"
FILE *hzkFile = NULL;short all;short xx,yy;// Default file name of configuration#define TOUCHSCREEN_CONF	"./touchscreen.conf"#define TOUCHSCREEN_DEV		"/dev/touchscreen/0"// TouchScreen input data structuretypedef struct{	unsigned short pressure;	unsigned short y;	unsigned short x;	unsigned short pad;} ts_event_t;  // TouchScreen configuration structuretypedef struct{	unsigned int xFactor;	unsigned int yFactor;	unsigned int xOffset;	unsigned int yOffset;	unsigned char scale;} TS_CONFIG;// Common data type definitionstypedef unsigned int	U32;typedef unsigned short	U16;typedef unsigned char	U8;typedef int				S32;typedef short			S16;typedef char			S8;// Screen rectangle structuretypedef struct{	S32 left;	S32 right;	S32 top;	S32 bottom;} RECT, * P_RECT;// Screen point structuretypedef struct{	unsigned short x;	unsigned short y;} Point;int touchscreen_fd =  0;		/* touch screen device handle */TS_CONFIG	tsConfig;		/* touch screen configuration data */ts_event_t	current_data;unsigned short x1_max, y1_max;S16 _ConvertX(U16 x);S16 _ConvertY(U16 y);// Retrieve an average data from touch screen input deviceint _GetPenDataAvg(int ts_handler, ts_event_t * ts_avg, unsigned short max_num){	ts_event_t *tmpDataArr;	unsigned short bp;	unsigned short count;	long tempX, tempY;	int ret;	// Allocate a buffer for input data	tmpDataArr = (ts_event_t *)malloc(2 * sizeof(ts_event_t));	if (tmpDataArr == NULL)	{		printf("Error: malloc failed.\n");		return -1;	}	// Read a set of data into buffer	count = 0;	do	{                bp = 0;		while (1)		{			if(bp>1)			{				if(max_num > abs(tmpDataArr[bp-2].x-tmpDataArr[bp-1].x) && 				   max_num > abs(tmpDataArr[bp-2].y-tmpDataArr[bp-1].y))				{				//	printf("tmpDataArr[bp-1]=%d\n",tmpDataArr[bp-1].pressure);					break;				}				else					bp=0;				}			//printf("before read, ts_handler is %d\n",ts_handler);			//printf("bp=%d\n",bp);			ret = read(ts_handler, &tmpDataArr[bp], sizeof(ts_event_t));			//printf("ret =%d, sizeof(ts_event_t)=%d\n",ret,sizeof(ts_event_t));	//		 printf("x = 0x%4x, y = 0x%4x, Press = 0x%4x\n", tmpDataArr[bp].x, 	//				 				   tmpDataArr[bp].y, 	//				 				   tmpDataArr[bp].pressure);			bp++;		}//while		count=bp;	} while (count == 0);	tempX =	tempY = 0;	for (bp = 0; bp < count; bp++)	{		tempX += tmpDataArr[bp].x;		tempY += tmpDataArr[bp].y;	}	// Calculate an average value        ts_avg->x = tempX / count;	ts_avg->y = tempY / count;	ts_avg->pressure = tmpDataArr[1].pressure;//	printf("%d\n",tmpDataArr[1].pressure);		// Release	free(tmpDataArr);}// Convert touch screen point to Screen PointS16 _TouchpadConvertLCD(U16 value, U32 factor, U32 offset){	S32 temp;	temp = value;	temp -= offset;	  	if ( temp < 0)	{		/*  outside LCD area  ...  */		temp = -temp;	}	return ((S16)((temp * factor) >> tsConfig.scale));}// Convert X-coordinateS16 _ConvertX(U16 x){	return _TouchpadConvertLCD(x, tsConfig.xFactor, tsConfig.xOffset);}// Convert Y-coordinateS16 _ConvertY(U16 y)//**************************************//{	//y = 4240 - y;	return _TouchpadConvertLCD(y, tsConfig.yFactor, tsConfig.yOffset);// + 16;}int check(int x,int y, RECT range){	//printf("%d %d %d %d \n",range.left,range.right,range.top,range.bottom);	//printf("%d %d ",x,y);	//printf("\n\n");	if(x < range.left || x > range.right)			return 1;	if(y > range.bottom || y < range.top)		return 1;	return 0;}Point get_ts_xy(int ts_handler,int max_x,int max_y){	Point temp;	//printf("before of function _GetPenDataAvg\n");      	_GetPenDataAvg(ts_handler, &current_data, 50);//max_num=10	//printf("out of function _GetPenDataAvg\n");	//printf("current_data.x = %d\n",  current_data.x);	//printf("current_data.y = %d\n",  current_data.y);		temp.x = _ConvertX(current_data.x);  	temp.y = abs(480-_ConvertY(current_data.y));	printf("you click: x = %d, y = %d",temp.x,temp.y);	printf("\n\n");	return temp;}
void DrawCharEN(short x, short y, unsigned char c, ColorType color)
{
	unsigned char codes[16];
	short i;

	for (i = 0; i < 16; i++)
		codes[i] = ascii_codes[c][i];
	
	fb_Text_8x16(x, y, codes, color);
}

void DrawCharCHS(int x, int y, unsigned char c[2], ColorType color)
{
	unsigned char codes[32];
	short i;
	unsigned char ch, cl;
	unsigned long offset;

	if (hzkFile == NULL)
	{
		printf("No Chinese Character Library opened.\n");

		exit(1);
	}

	ch = c[0];
	cl = c[1];

	offset = ((ch - 0xa1) * 94L + (cl - 0xa1)) * 32L;

	fseek(hzkFile, offset, SEEK_SET);
	fread(codes, 32, 1, hzkFile);	

	fb_Text_16x16(x, y, codes, color);
}
void DRAWGRAPH(){FILE *fp;
int i,j,a; fb_DrawRect(4, 4,636, 456, GRAY);fp=fopen("mazepath.txt","r");
for(i=0;i<21;i++)
  for(j=0;j<15;j++)
  {fscanf(fp,"%d ",&a);if(a==-1)
  fb_FillRect(5+i*30, 5+j*30,5+(i+1)*30, 5+(j+1)*30, GRAY);if(a==1)
  fb_FillRect(5+i*30, 5+j*30,5+(i+1)*30, 5+(j+1)*30, RED);xx=i;yy=j;
   }  fclose(fp);    }void DRAWGRAPHs( short x, short y){ fb_Clear(SYS_BLACK);  DRAWGRAPH();fb_FillRect(5+x, 5+y, 35+x, 35+y, BLUE);}unsigned short amme(unsigned short x,unsigned short y){FILE *fp;
int i,j,a; fb_DrawRect(4, 4,636, 456, GRAY);fp=fopen("mazepath.txt","r");
for(i=0;i<21;i++)
  for(j=0;j<15;j++)
  {fscanf(fp,"%d ",&a);if(a==-1)  if(x/30==i&&y/30==j)   {fclose(fp);    return 0;}}fclose(fp);return 1;}// Initialize Mx1 input devicesint main(){	char * tsconf_name;	FILE * tsconf_fp;	unsigned short x1,x2,y1,y2;	Point clPoint;//	RECT tempRange;	     short x, y;
	short i;
	ColorType color0 = SYS_WHITE;
	//ColorType color1=RED,color2=GREEN,color3=BLUE,color4=ORANGE;
	short colorPage;
	short endFlag;
	unsigned char * ascTxt1 = "Beijing Institute of Technology";
	unsigned char * ascTxt2 = "ARM S3C 2410";        unsigned char * ascTxt3 = "20053484";        unsigned char * ascTxt4 = "12110503";
	unsigned char * chsTxt1 = "北京理工大学";
	unsigned char * chsTxt2 = "嵌入式实验室";
	unsigned char * chsTxt3 = "北京理工大学计算教学实验中心";               unsigned char * chsTxt4 = "王永辉";      
	unsigned char bufferTxt[2];
	unsigned short  keypress;
	short x_max, y_max;
	ColorType color_max;
        short x_car, y_car;	if (fb_Init() == -1)	{		printf("Initialize Framebuffer LCD failed.\n");		exit(1);	}    
    x_max = fb_GetScreenWidth() - 1;
    y_max = fb_GetScreenHeight() - 1;
    color_max = fb_GetScreenColors() - 1;
   fb_Clear(0x0);  all=10;       DRAWGRAPH(); x_car=0;         y_car=0;DRAWGRAPHs(x_car,y_car);   zlg7290_init();while(1){	while(1)             		if(!(zlg7290_getkey(&keypress)))			{				keypress-=1;				printf("keypress=%d\n\n",keypress);                              break;                              }  else				zlg7290_sndcmd(0x70,1<<(keypress-1));if(keypress==3)if(x_car+30<=605) {if(amme(x_car+30,y_car))x_car+=30;}if(keypress==1)if(x_car-30>=0) {if(amme(x_car-30,y_car))x_car-=30;}if(keypress==2)if(y_car+30<=425){ if(amme(x_car,y_car+30))y_car+=30;}if(keypress==5)if(y_car-30>=0){if(amme(x_car,y_car-30)) y_car-=30;}  if(xx*30==x_car&&yy*30==y_car)   { DRAWGRAPHs(x_car,y_car);break;    }else DRAWGRAPHs(x_car,y_car);zlg7290_sndcmd(0x70,1<<(keypress-1));usleep(99999);keypress=99999;}	//显示英文和中文	// Test Text functions
	printf("Test text_16x8:\t\t");
	x = 10, y = 10;
	for (i = 0; i < strlen(ascTxt1); i++)
	{
		DrawCharEN(x, y, ascTxt1[i], SYS_WHITE);
		x += 8;
	}	x = 10, y = 40;
	for (i = 0; i < strlen(ascTxt2); i++)
	{
		DrawCharEN(x, y, ascTxt2[i], RED);
		x += 8;
	}x = 10, y = 70;
	for (i = 0; i < strlen(ascTxt3); i++)
	{
		DrawCharEN(x, y, ascTxt3[i], RED);
		x += 8;
	}x = 10, y = 100;
	for (i = 0; i < strlen(ascTxt4); i++)
	{
		DrawCharEN(x, y, ascTxt4[i], RED);
		x += 8;
	}
	printf("Press any key to continue...\n");
	getchar();
	printf("Test text_16x16:\t");
	hzkFile = fopen("./hzk", "rb"); //change from hz16 to hzk    x = 10, y = 140;
	for (i = 0; i < strlen(chsTxt4); i += 2)
	{
		bufferTxt[0] = chsTxt4[i];
		bufferTxt[1] = chsTxt4[i + 1];
		DrawCharCHS(x, y, bufferTxt, RED);
		x += 16;
	}
	x = 10, y = 180;
	for (i = 0; i < strlen(chsTxt1); i += 2)
	{
		bufferTxt[0] = chsTxt1[i];
		bufferTxt[1] = chsTxt1[i + 1];
		DrawCharCHS(x, y, bufferTxt, GREEN);
		x += 16;
	}	x = 10, y = 220;
		for (i = 0; i < strlen(chsTxt2); i += 2)
	{
		bufferTxt[0] = chsTxt2[i];
		bufferTxt[1] = chsTxt2[i + 1];
		DrawCharCHS(x, y, bufferTxt, BLUE);
		x += 16;
	}	x = 10, y = 260;
		for (i = 0; i < strlen(chsTxt3); i += 2)
	{
		bufferTxt[0] = chsTxt3[i];
		bufferTxt[1] = chsTxt3[i + 1];
		DrawCharCHS(x, y, bufferTxt, ORANGE);
		x += 16;
	}    
	fclose(hzkFile);

	printf("\nFinished Test. Press any key to exit.\n");
	getchar();
	fb_Clear(SYS_BLACK);
    fb_Release();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -