为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > [小学]12点阵汉字在HD系列机型中的应用-屏幕显示-打印

[小学]12点阵汉字在HD系列机型中的应用-屏幕显示-打印

2018-03-15 12页 doc 29KB 7阅读

用户头像

is_597436

暂无简介

举报
[小学]12点阵汉字在HD系列机型中的应用-屏幕显示-打印[小学]12点阵汉字在HD系列机型中的应用-屏幕显示-打印 12点阵汉字在HD系列机型中的应用 在设备屏幕上显示输出 在III型机打印输出 一、加载字库 通常加载字库有两种方式:内嵌常量式,外部参数文件形式 内嵌变量式是指将字库点阵的内容以常量的形式写在程序源码中,如下文 unsigned char FontPattern[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x...
[小学]12点阵汉字在HD系列机型中的应用-屏幕显示-打印
[]12点阵汉字在HD系列机型中的应用-屏幕显示-打印 12点阵汉字在HD系列机型中的应用 在设备屏幕上显示输出 在III型机打印输出 一、加载字库 通常加载字库有两种方式:内嵌常量式,外部参数文件形式 内嵌变量式是指将字库点阵的内容以常量的形式写在程序源码中,如下文 unsigned char FontPattern[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x48, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ………… 0x21, 0x00, 0x79, 0x00, 0x49, 0x40, 0x7B, 0xE0, 0x49, 0x40, 0xFD, 0x40, 0x95, 0x40, 0xFD, 0x40, 0x01, 0x40, 0xFD, 0x50, 0x2A, 0x50, 0xCC, 0x70, 0x10, 0x00, 0x3D, 0xF0, 0x24, 0x40, 0x3C, 0x40, 0x24, 0x40, 0x7F, 0xF0, 0x52, 0x40, 0x7E, 0x40, 0x00, 0x40, 0xFF, 0x40, 0x24, 0x40, 0xC4, 0x40, 0x20, 0x80, 0x7B, 0xF0, 0x49, 0xC0, 0x7A, 0xA0, 0x4C, 0x90, 0xFB, 0xE0, 0xAA, 0x20, 0xFB, 0xE0, 0x02, 0x20, 0xFF, 0xE0, 0x48, 0x00, 0x8B, 0xF0 }; 显示函数在调用时直接使用该参数即可,程序下载到手持机即可直接使用。 外部参数文件形式是指将字库文件要外部基本参数的形式下载到手持机 中,需要手持机程序在开机的时候检查该参数文件是否存在,如果不存在,则提 示下载该参数文件,如果存在,则加载该内容。 unsigned char * FontPattern; typedef union { unsigned char s_char[4]; unsigned long l_word; } typ_long2char; /*以下部分为字库程序启动时加载*/ { unsigned char tmpbuffer[16]; typ_long2char tmplc; memcpy(tmpbuffer, (char *)Font12Addr, 8); if (memcmp(tmpbuffer, "\xf0\x0f\x00\xff", 4) == 0) { memcpy(tmplc.s_char, tmpbuffer + 4, 4); Font12Length = tmplc.l_word; //获得字库长度 FontPattern = malloc(Font12Length); if (FontPattern == NULL) { //提示内存分配失败,程序将无法正常运行 } memcpy(FontPattern, (char *)(Font12Addr + 8), Font12Length); } else { //提示字库文件未下载 } } /*加载完成*/ /*以下部分为字库文件下载*/ void down_font(void) { unsigned char * frwBuffer; long DataLength; int tcnt; frwBuffer = malloc(0x40000); if (frwBuffer == NULL) { DispStr_CE(0, 1, "内存分配失败", DISP_POSITION | DISP_CLRSCR); DispStr_CE(0, 6, "按任意键返回", DISP_POSITION); PressAnyKey(); } else { DataLength = DownLoadData("font12", frwBuffer + 8, 0x40000); if (DataLength > 0) { memcpy(frwBuffer, "\xf0\x0f\x00\xff", 4); tmplc.l_word = DataLength; memcpy(frwBuffer + 4, tmplc.s_char, 4); if ((DataLength % 2) != 0) DataLength ++; DataLenght += 8; for(tcnt = 0; tcnt < 4; tcnt ++) { if(FLASH_erase_block_2((char *)Font12Addr + tcnt * 0x10000) != 0) break; } if (tcnt != 4) { DispStr_CE(0, 1, "操作失败(1)", DISP_POSITION | DISP_CLRSCR); DispStr_CE(0, 6, "按任意键返回", DISP_POSITION); ErrorBeep(0); free(frwBuffer); PressAnyKey(); } else { if (FLASH_write_data_8M(Font12Addr, frwBuffer, DataLength) != 1) { DispStr_CE(0, 0, "操作失败(2)", DISP_POSITION | DISP_CLRSCR); DispStr_CE(0, 6, "按任意键返回", DISP_POSITION); ErrorBeep(0); free(frwBuffer); PressAnyKey(); } else { DispStr_CE(0, 0, "操作成功", DISP_POSITION | DISP_CLRSCR); DispStr_CE(0, 6, "按任意键返回", DISP_POSITION); RightBeep(); free(frwBuffer); PressAnyKey(); } } } else { DispStr_CE(0, 0, "操作失败", DISP_POSITION | DISP_CLRSCR); DispStr_CE(0, 6, "按任意键返回", DISP_POSITION); ErrorBeep(0); free(frwBuffer); PressAnyKey(); } } } 二、显示输出 上文中,我们已经将字库字模变量加载到手持机中,那么我们就可以进行 显示操作了。 在点阵字库原理中,我已经已经阐明了字模的组成,每个点都是以1或0 示。 void DispStr_Font12(int x, int y, char * s, char r) { unsigned char buffer[24]; int i, j, k; unsigned char qh, wh, ascii, r1, r2; unsigned long location; if (r == 0) { r1 = 1; r2 = 0; } else { r1 = 0; r2 = 1; } while(*s) { ascii = *(s); if (ascii >= 32 && ascii < 128 ) { location = (ascii - 32) * 12L; memcpy(buffer, FontPattern + location, 12); for(i = 0; i < 12; i ++) for(k = 0; k < 8; k ++) if((buffer[ i ] >> (7 - k)) & 0x1) put_pixel(x + k, y + i, r1, DISP_PUT_MODE_PUT); else put_pixel(x + k, y + i, r2, DISP_PUT_MODE_PUT); s += 1; x += 6; } else { { qh = *(s) - 0xa0; wh = *(s + 1) - 0xa0; location = (94 * (qh - 1) + (wh - 1)) * 24L + 1140L; memcpy(buffer, FontPattern + location, 24); } for(i = 0; i < 12; i ++) for(j = 0; j < 2; j++) for(k = 0; k < 8; k ++) if((buffer[ i * 2 + j] >> (7 - k)) & 0x1) put_pixel(x + 8 * j + k, y + i, r1, DISP_PUT_MODE_PUT); else put_pixel(x + 8 * j + k, y + i, r2, DISP_PUT_MODE_PUT); s += 2; x += 13; } } } 三、打印输出 void mtclprn_font12line_buffer(unsigned char * pbuffer, unsigned char * charlinestr, int verticaldot, int dx, int dy, unsigned char templetchar[]) { unsigned char * s, chwid; int m = 0, n = 0, i = 0, j = 0, k = 0; unsigned char qh, wh, buffer[40], ascii, pagebuffer[32768]; unsigned long location, poffset, testmask, vertical; s = charlinestr; poffset = 0; memset(pagebuffer, 0, 32768); while(*s) { ascii = *(s); if (ascii >= 32 && ascii < 128 ) { location = (ascii - 32) * 12L; memcpy(buffer, templetchar + location, 12); for(i = 0; i < 12; i ++) //y { for(k = 0; k < 8; k ++) //x { if((buffer[ i ] >> (7 - k)) & 0x1) { pagebuffer[poffset + k * 2 + i * 2 * verticaldot] = 1; //原点 pagebuffer[poffset + k * 2 + i * 2 * verticaldot + verticaldot] = 1; //下移一位 pagebuffer[poffset + k * 2 + 1 + i * 2 * verticaldot] = 1; //右移一位 pagebuffer[poffset + k * 2 + 1 + i * 2 * verticaldot + verticaldot] = 1; //右下移一位 } } } s += 1; chwid = 6; } else { { qh = *(s) - 0xa0; wh = *(s + 1) - 0xa0; location = (94 * (qh - 1) + (wh - 1)) * 24L + 1140L; memcpy(buffer, templetchar + location, 24); } for(i = 0; i < 12; i ++) { for(j = 0; j < 2; j++) { for(k = 0; k < 8; k ++) { if((buffer[ i * 2 + j] >> (7 - k)) & 0x1) { pagebuffer[poffset + (8 * j + k) * 2 + i * 2 * verticaldot] = 1; //原点 pagebuffer[poffset + (8 * j + k) * 2 + i * 2 * verticaldot + verticaldot] = 1; //下移一位 pagebuffer[poffset + (8 * j + k) * 2 + 1 + i * 2 * verticaldot] = 1; //右移一位 pagebuffer[poffset + (8 * j + k) * 2 + 1 + i * 2 * verticaldot + verticaldot] = 1; //右下移一位 } } } } s += 2; chwid = 12; } poffset += chwid * 2 + 1; } for (i = 0; i < poffset; i ++) { for (j = 0; j < 3; j ++) { ascii = 0; for (k = 0; k < 8; k ++) { if (pagebuffer[verticaldot * ((2 - j) * 8 + (7 - k)) + i] == 1) ascii = ascii * 2 + 1; else ascii *= 2; } pbuffer[dy * 48 + i * 48 + dx + j] = ascii; } } }
/
本文档为【[小学]12点阵汉字在HD系列机型中的应用-屏幕显示-打印】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索