找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2358|回复: 0
收起左侧

可移植的嵌入式系统汉字显示代码

[复制链接]
ID:75926 发表于 2015-4-10 17:10 | 显示全部楼层 |阅读模式
移植之前 必须保证 成功移植了文件系统,这是在VS2008上运行通过的;
//移植的时候要修改printf 函数为LCD的打印一个点的函数,与文件系统相关的函数 酌情修改

这是显示效果,16*16 的GBK字库 字库的文件名是 "font.DZK"

  1. #include "stdio.h"

  2. #define FONT_SIZE        32//定义单个汉字所占的字节数

  3. void Display(FILE *f,char *str);
  4. void Displays(FILE *f,char *str,unsigned char count);

  5. int main(void)
  6. {
  7. FILE *f;
  8. f=fopen("font.DZK",r");
  9. if(f==NULL)
  10. {
  11. printf("error..");
  12. return 0;
  13. }
  14. Displays(f,"您好",2);

  15. fclose(f);
  16. return 0;
  17. }



  18. void GetFont(FILE *f,char *str,unsigned char *buff)
  19. {
  20. unsigned char High=*str;
  21. unsigned char Low=*(str+1);
  22. unsigned long offset;
  23. High-=0x81;
  24. if(Low<0x7f)
  25. Low-=0x40;
  26. else
  27. Low-=0x41;
  28. offset=(unsigned long)(High*190+Low)*FONT_SIZE;
  29. fseek(f,offset,0);
  30. fread(buff,FONT_SIZE,1,f);
  31. }


  32. void Display(FILE *f,char *str)
  33. {
  34. char i,j;
  35. unsigned char buff[FONT_SIZE],temp;
  36. GetFont(f,str,buff);
  37. for(i=0;i<32;i+=2)
  38. {
  39. temp=buff[i];
  40. for(j=0;j<8;j++)
  41. {
  42. if(temp&0x80)
  43. printf("*");
  44. else
  45. printf(" ");
  46. temp<<=1;
  47. }
  48. temp=buff[i+1];
  49. for(j=0;j<8;j++)
  50. {
  51. if(temp&0x80)
  52. printf("*");
  53. else
  54. printf(" ");
  55. temp<<=1;
  56. }
  57. printf("\n");
  58. }
  59. }


  60. void printblank(void)
  61. {
  62. unsigned char i;
  63. for(i=0;i<16;i++)
  64. printf("  ");
  65. }

  66. void Displays(FILE *f,char *str,unsigned char count)
  67. {
  68. unsigned char i;
  69. for(i=0;i<count;i++,str+=2)
  70. {
  71. Display(f,str);
  72. printblank();
  73. }
  74. }
复制代码






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表