|
发表于 2012-3-30 21:26:31
|
显示全部楼层
fk2011 发表于 2012-3-30 19:53
刚刚做32*32的字库,花了好久,你这么大的字库做好了得耗费多长时间啊?大神也提供个思路。 ...
用字模软件生成标准字库的二进制文件
unsigned char region = *p-0xa0;//得到区号 gb2312
unsigned char location = *(p+1)-0xa0;//得到位号- void LCD_CN(rt_uint16_t x,rt_uint16_t y,const rt_uint8_t *p,rt_uint8_t fon, rt_uint16_t charColor,rt_uint16_t bkColor)
- {
- int fd;
-
- unsigned char region = *p-0xa0;//得到区号 gb2312
- unsigned char location = *(p+1)-0xa0;//得到位号
- uint32_t index;//地址偏移量
- uint16_t i,n,end_x;
-
-
- switch(fon)
- {
- case 12:
- {
- index = (94*(region-1)+location-1)*24;//地址偏移量
- end_x=x+11;
- fd = open("/Chinese12.FON", O_RDONLY, 0);//打开在根目录的字库
- lseek(fd, index, DFS_SEEK_SET);//设置偏移量
- read(fd, buffer, 24);
-
- LCD_WriteReg(CUR_X,x); // .............. CUR_x
- LCD_WriteReg(CUR_Y,y); // .............. CUR_y
- LCD_WriteReg(END_X,end_x); // ............ END_X
- LCD_WriteRAM_Prepare(); // .............. PIXELS
- for(n=0;n<24;n++)
- {
- for (i = 0; i < 8; i++)//
- {
- if (buffer[n] & (0x01<<i))
- {
- LCD_WriteRAM(charColor);//写有效点
- }
- else
- {
- LCD_WriteRAM(bkColor);//写底色
- }
- }
- for (i = 0; i < 4; i++)//
- {
- if (buffer[n+1] & (0x01<<i))
- {
- LCD_WriteRAM(charColor);//写有效点
- }
- else
- {
- LCD_WriteRAM(bkColor);//写底色
- }
- }
- n+=1;
- }
- }
- break;
- case 16:
- {
- index = (94*(region-1)+location-1)*32;//地址偏移量
- end_x=x+15;
-
- fd = open("/Chinese16.FON", O_RDONLY, 0);//打开在根目录的字库
- if (fd < 0)
- {
- rt_kprintf("check: open file for read failed\n");
- return;
- }
- lseek(fd, index, DFS_SEEK_SET);//设置偏移量
- read(fd, buffer, 32);
-
-
-
- LCD_WriteReg(CUR_X,x); // .............. CUR_x
- LCD_WriteReg(CUR_Y,y); // .............. CUR_y
- LCD_WriteReg(END_X,end_x); // ............ END_X
- LCD_WriteRAM_Prepare(); // .............. PIXELS
- for(n=0;n<32;n++)
- {
- for (i = 0; i < 8; i++)//
- {
- if (buffer[n] & (0x01<<i))
- {
- LCD_WriteRAM(charColor);//写有效点
- }
- else
- {
- LCD_WriteRAM(bkColor);//写底色
- }
- }
- }
- }
- break;
- case 24:
- {
- index = (94*(region-1)+location-1)*72;//地址偏移量
- end_x=x+23;
-
- fd = open("/Chinese24.FON", O_RDONLY, 0);//打开在根目录的字库
- lseek(fd, index, DFS_SEEK_SET);//设置偏移量
- read(fd, buffer, 72);
-
- LCD_WriteReg(CUR_X,x); // .............. CUR_x
- LCD_WriteReg(CUR_Y,y); // .............. CUR_y
- LCD_WriteReg(END_X,end_x); // ............ END_X
- LCD_WriteRAM_Prepare(); // .............. PIXELS
- for(n=0;n<72;n++)
- {
- for (i = 0; i < 8; i++)//
- {
- if (buffer[n] & (0x01<<i))
- {
- LCD_WriteRAM(charColor);//写有效点
- }
- else
- {
- LCD_WriteRAM(bkColor);//写底色
- }
- }
- }
- }
- break;
- case 32:
- {
- index = (94*(region-1)+location-1)*128;//地址偏移量
- end_x=x+31;
- fd = open("/Chinese32.FON", O_RDONLY, 0);//打开在根目录的字库
- lseek(fd, index, DFS_SEEK_SET);//设置偏移量
- read(fd, buffer, 128);
- LCD_WriteReg(CUR_X,x); // .............. CUR_x
- LCD_WriteReg(CUR_Y,y); // .............. CUR_y
- LCD_WriteReg(END_X,end_x); // ............ END_X
- LCD_WriteRAM_Prepare(); // .............. PIXELS
- for(n=0;n<128;n++)
- {
- for (i = 0; i < 8; i++)//
- {
- if (buffer[n] & (0x01<<i))
- {
- LCD_WriteRAM(charColor);//写有效点
- }
- else
- {
- LCD_WriteRAM(bkColor);//写底色
- }
- }
- }
- }
- break;
- case 64:
- {
- index = (94*(region-1)+location-1)*448;//地址偏移量
- end_x=x+63;
- fd = open("/Chinese64.FON", O_RDONLY, 0);//打开在根目录的字库
- lseek(fd, index, DFS_SEEK_SET);//设置偏移量
- read(fd, buffer, 448);
- LCD_WriteReg(CUR_X,x); // .............. CUR_x
- LCD_WriteReg(CUR_Y,y); // .............. CUR_y
- LCD_WriteReg(END_X,end_x); // ............ END_X
- LCD_WriteRAM_Prepare(); // .............. PIXELS
- for(n=0;n<448;n++)
- {
- for (i = 0; i < 8; i++)//
- {
- if (buffer[n] & (0x01<<i))
- {
- LCD_WriteRAM(charColor);//写有效点
- }
- else
- {
- LCD_WriteRAM(bkColor);//写底色
- }
- }
- }
- }
- break;
- default:break;
- }
-
- close(fd);
- }
复制代码 |
|