找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3783|回复: 1
打印 上一主题 下一主题
收起左侧

单片机控制LCD12864显示多行汉字(含PROTEUS仿真文件、程序和字模提取软件)

[复制链接]
跳转到指定楼层
楼主

仿真实验结果展示:

汉字取模过程(软件下载链接在文末):

第一步:打开液晶仿真排版软件

设定相关参数:

输入汉字:


随便找个位置将图片保存:

第二步:打开液晶汉字模提取软件

设定相关参数:

将刚才保存的图片打开并保存数据:



C语言程序代码:
  1. #include <reg51.h>
  2. #define LCDLCDDisp_Off   0x3e
  3. #define LCDLCDDisp_On    0x3f
  4. #define Page_Add     0xb8//页地址
  5. #define LCDCol_Add     0x40//列地址
  6. #define Start_Line     0xC0//行地址
  7. /*****液晶显示器的端口定义*****/
  8. #define data_ora P0 /*液晶数据总线*/
  9. sbit LCDMcs=P2^4 ;    /*片选1*/
  10. sbit LCDScs=P2^3 ;    /*片选2*/
  11. sbit LCDDi=P2^2 ;     /*数据/指令 选择*/
  12. sbit LCDRW=P2^1 ;     /*读/写 选择*/
  13. sbit LCDEnable=P2^0 ;     /*读/写 使能*/

  14. //

  15. unsigned char code Bmp1[]=
  16. {
  17. /*------------------------------------------------------------------------------

  18.   宽×高(像素): 128×16
  19.   字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/256字节
  20.   显示的汉字:关关雎鸠在河之洲
  21. ------------------------------------------------------------------------------*/
  22. /*--  调入了一幅图像:C:\Users\dhd\Desktop\1111111.bmp  --*/
  23. /*--  宽度x高度=128x16  --*/
  24. 0x00,0x10,0x10,0x11,0x12,0x1C,0x10,0xF0,0x10,0x18,0x14,0x13,0x1A,0x90,0x00,0x00,
  25. 0x00,0x10,0x10,0x11,0x12,0x1C,0x10,0xF0,0x10,0x18,0x14,0x13,0x1A,0x90,0x00,0x00,
  26. 0x00,0xFC,0x24,0x24,0xFE,0x24,0x10,0xFC,0x4B,0x49,0xFE,0x48,0x68,0x4C,0x08,0x00,
  27. 0x10,0x10,0xFF,0x10,0xF8,0x10,0x00,0xFC,0x04,0x16,0x45,0x84,0x7E,0x04,0x00,0x00,
  28. 0x08,0x08,0x08,0x08,0xC8,0x38,0x0F,0x08,0x08,0xE8,0x08,0x88,0x08,0x0C,0x08,0x00,
  29. 0x10,0x21,0x62,0x06,0x82,0xE2,0x22,0x22,0x22,0xF2,0x22,0x02,0xFE,0x03,0x02,0x00,
  30. 0x00,0x10,0x10,0x10,0x10,0x10,0x11,0x16,0x10,0x90,0x50,0x30,0x10,0x00,0x00,0x00,
  31. 0x10,0x22,0x64,0x0C,0x80,0x20,0xC0,0xFF,0x20,0xC0,0xFC,0x20,0xC0,0xFF,0x00,0x00,
  32. 0x81,0x81,0x41,0x41,0x21,0x11,0x0D,0x03,0x0D,0x11,0x21,0x21,0x41,0xC1,0x41,0x00,
  33. 0x81,0x81,0x41,0x41,0x21,0x11,0x0D,0x03,0x0D,0x11,0x21,0x21,0x41,0xC1,0x41,0x00,
  34. 0x10,0x3F,0x11,0x11,0x0F,0x08,0x00,0xFF,0x22,0x22,0x3F,0x22,0x23,0x32,0x20,0x00,
  35. 0x40,0x30,0x0F,0x00,0x3F,0x10,0x08,0x13,0x12,0x12,0x1A,0x52,0x82,0x7F,0x02,0x00,
  36. 0x08,0x04,0x02,0xFF,0x00,0x40,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x60,0x40,0x00,
  37. 0x04,0x04,0xFE,0x01,0x00,0x0F,0x04,0x04,0x04,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00,
  38. 0x00,0x20,0x10,0x10,0x28,0x48,0x44,0x42,0x41,0x40,0x40,0x40,0x40,0x60,0x20,0x00,
  39. 0x04,0x04,0xFE,0x01,0x00,0x40,0x30,0x0F,0x00,0x00,0x3F,0x00,0x00,0xFF,0x00,0x00,


  40. };
  41. unsigned char code Bmp2[]=
  42. {
  43. /*------------------------------------------------------------------------------
  44.   宽×高(像素): 128×16
  45.   字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/256字节
  46.   显示的汉字:窈窕淑女君子好逑
  47. --------------------------------------------------------------------------
  48. */
  49. 0x10,0x0E,0x04,0x94,0x4C,0x24,0x05,0x86,0x84,0xE4,0x8C,0x94,0xC4,0x94,0x0C,0x00,
  50. 0x10,0x0E,0x44,0x94,0x0C,0x04,0xF5,0x06,0xF4,0x04,0x0C,0xD4,0x84,0x14,0x0C,0x00,
  51. 0x10,0x22,0x64,0x0C,0xC0,0x40,0xFF,0x44,0x44,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,
  52. 0x20,0x20,0x20,0x20,0x20,0xE0,0x3F,0x20,0x20,0x20,0xE0,0x20,0x20,0x30,0x20,0x00,
  53. 0x10,0x10,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0x92,0xFF,0x12,0x18,0x10,0x00,
  54. 0x80,0x80,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x80,0xC0,0x80,0x00,
  55. 0x10,0x10,0xF0,0x1F,0x10,0xF0,0x80,0x82,0x82,0x82,0xE2,0x92,0x8A,0xC6,0x80,0x00,
  56. 0x40,0x42,0x44,0xCC,0x00,0x08,0x28,0x48,0x08,0xFF,0x08,0x4A,0x2C,0x08,0x00,0x00,
  57. 0x00,0x21,0x31,0x29,0x25,0x2B,0xB1,0x40,0x30,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00,
  58. 0x00,0x88,0x88,0x45,0x42,0x31,0x0F,0x00,0x3F,0x42,0x45,0x48,0x58,0x40,0x70,0x00,
  59. 0x04,0x04,0xFE,0x09,0x24,0x42,0x3F,0x82,0x44,0x20,0x13,0x0C,0x13,0x60,0x20,0x00,
  60. 0x00,0x80,0x80,0x42,0x45,0x24,0x28,0x10,0x18,0x24,0x23,0x40,0xC0,0x00,0x00,0x00,
  61. 0x40,0x20,0x10,0x0C,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFE,0x04,0x00,0x00,
  62. 0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  63. 0x40,0x22,0x15,0x08,0x14,0x63,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,
  64. 0x00,0x40,0x20,0x1F,0x20,0x42,0x42,0x49,0x50,0x4F,0x40,0x41,0x42,0x66,0x20,0x00,

  65. };
  66. unsigned char code Bmp3[]=
  67. {
  68. /*------------------------------------------------------------------------------
  69.   宽×高(像素): 128×16
  70.   字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/256字节
  71.   显示的汉字:参差荇菜左右流之
  72. ------------------------------------------------------------------------------*/

  73. 0x20,0x20,0x20,0x28,0xA8,0x6C,0x3B,0x28,0xA8,0x6A,0xAC,0x28,0x20,0x30,0x20,0x00,
  74. 0x00,0x04,0x24,0x24,0x25,0x26,0xA4,0x7C,0x24,0x26,0x25,0x34,0x26,0x84,0x00,0x00,
  75. 0x04,0x84,0x84,0x44,0x24,0x9F,0x04,0x24,0x24,0x2F,0x24,0x24,0x34,0xA6,0x04,0x00,
  76. 0x04,0x04,0x24,0x64,0xA4,0x2F,0x64,0xA4,0x24,0x2F,0x94,0x54,0x14,0x06,0x04,0x00,
  77. 0x08,0x08,0x08,0x08,0x88,0x78,0x0F,0x08,0x08,0x08,0x08,0x88,0x0C,0x08,0x00,0x00,
  78. 0x08,0x08,0x08,0x08,0xC8,0x38,0x0F,0x08,0x08,0x08,0x08,0x08,0x88,0x0C,0x08,0x00,
  79. 0x10,0x22,0x64,0x0C,0x80,0x44,0x44,0x64,0x55,0x4E,0x44,0x54,0x66,0xC4,0x00,0x00,
  80. 0x00,0x10,0x10,0x10,0x10,0x10,0x11,0x16,0x10,0x90,0x50,0x30,0x10,0x00,0x00,0x00,
  81. 0x04,0x84,0x82,0x81,0x4A,0x4A,0x49,0x25,0x24,0x12,0x10,0x09,0x02,0x06,0x02,0x00,
  82. 0x41,0x21,0x11,0x89,0x85,0x8B,0x89,0x89,0xF9,0x89,0x8D,0x89,0xC1,0x81,0x01,0x00,
  83. 0x08,0x08,0x04,0x02,0xFF,0x00,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x00,
  84. 0x02,0x42,0x42,0x22,0x12,0x0A,0x06,0xFF,0x06,0x0A,0x12,0x12,0x22,0x63,0x22,0x00,
  85. 0x20,0x50,0x48,0x46,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x60,0x40,0x00,
  86. 0x08,0x04,0x02,0x01,0xFF,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xFF,0x01,0x00,0x00,
  87. 0x04,0x04,0xFE,0x01,0x00,0x80,0x40,0x3F,0x00,0xFF,0x00,0x3F,0x40,0x40,0x70,0x00,
  88. 0x00,0x20,0x10,0x10,0x28,0x48,0x44,0x42,0x41,0x40,0x40,0x40,0x40,0x60,0x20,0x00,

  89. };
  90. unsigned char code Bmp4[]=
  91. {
  92. /*------------------------------------------------------------------------------
  93.    宽×高(像素): 128×16
  94.   字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/256字节
  95.   显示的汉字:窈窕淑女寤寐求之
  96. ------------------------------------------------------------------------------*/

  97. 0x10,0x0E,0x04,0x94,0x4C,0x24,0x05,0x86,0x84,0xE4,0x8C,0x94,0xC4,0x94,0x0C,0x00,
  98. 0x10,0x0E,0x44,0x94,0x0C,0x04,0xF5,0x06,0xF4,0x04,0x0C,0xD4,0x84,0x14,0x0C,0x00,
  99. 0x10,0x22,0x64,0x0C,0xC0,0x40,0xFF,0x44,0x44,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,
  100. 0x20,0x20,0x20,0x20,0x20,0xE0,0x3F,0x20,0x20,0x20,0xE0,0x20,0x20,0x30,0x20,0x00,
  101. 0x10,0x0C,0xF4,0x84,0x84,0xF4,0x05,0x56,0xD4,0x74,0x54,0x54,0xD4,0x14,0x0C,0x00,
  102. 0x10,0x0C,0xF4,0x84,0x84,0xF4,0x05,0x46,0x44,0x44,0xF4,0x44,0x44,0x54,0x0C,0x00,
  103. 0x00,0x08,0x28,0x48,0xC8,0x08,0x08,0xFF,0x88,0x0A,0x8C,0x48,0x6C,0x08,0x00,0x00,
  104. 0x00,0x10,0x10,0x10,0x10,0x10,0x11,0x16,0x10,0x90,0x50,0x30,0x10,0x00,0x00,0x00,
  105. 0x00,0x21,0x31,0x29,0x25,0x2B,0xB1,0x40,0x30,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00,
  106. 0x00,0x88,0x88,0x45,0x42,0x31,0x0F,0x00,0x3F,0x42,0x45,0x48,0x58,0x40,0x70,0x00,
  107. 0x04,0x04,0xFE,0x09,0x24,0x42,0x3F,0x82,0x44,0x20,0x13,0x0C,0x13,0x60,0x20,0x00,
  108. 0x00,0x80,0x80,0x42,0x45,0x24,0x28,0x10,0x18,0x24,0x23,0x40,0xC0,0x00,0x00,0x00,
  109. 0x02,0x42,0x3E,0x02,0x02,0xFF,0x02,0xFA,0x4B,0x4A,0x4A,0x4A,0x4B,0xFA,0x02,0x00,
  110. 0x02,0x42,0x3E,0x02,0x02,0xFF,0x42,0x22,0x12,0x0A,0xFF,0x0A,0x32,0x63,0x22,0x00,
  111. 0x00,0x10,0x10,0x08,0x04,0x42,0x81,0x7F,0x00,0x03,0x04,0x04,0x08,0x18,0x08,0x00,
  112. 0x00,0x20,0x10,0x10,0x28,0x48,0x44,0x42,0x41,0x40,0x40,0x40,0x40,0x60,0x20,0x00,

  113. };
  114. /****************************************************************************
  115. 函数功能:LCD延时程序
  116. 入口参数:t
  117. 出口参数:
  118. ****************************************************************************/
  119. void LCDdelay(unsigned int t)
  120. {
  121.         unsigned int i,j;
  122.         for(i=0;i<t;i++);
  123.         for(j=0;j<10;j++);
  124. }
  125. /****************************************************************************
  126. 状态检查,LCD是否忙


  127. *****************************************************************************/
  128. void CheckState()               
  129. {
  130.    unsigned char dat,DATA;//状态信息(判断是否忙)
  131.    LCDDi=0; // 数据\指令选择,D/I(RS)="L" ,表示 DB7∽DB0 为显示指令数据
  132.    LCDRW=1; //R/W="H" ,E="H"数据被读到DB7∽DB0
  133.    do
  134.    {
  135.       DATA=0x00;
  136.       LCDEnable=1;        //EN下降源
  137.           LCDdelay(2);//延时
  138.           dat=DATA;
  139.       LCDEnable=0;
  140.       dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)
  141.     }
  142.     while(!(dat==0x00));
  143. }
  144. /*****************************************************************************
  145. 函数功能:写命令到LCD程序,RS(DI)=L,RW=L,EN=H,即来一个脉冲写一次
  146. 入口参数:cmdcode
  147. 出口参数:
  148. *****************************************************************************/
  149. void write_com(unsigned char cmdcode)
  150. {
  151.     CheckState();//检测LCD是否忙
  152.         LCDDi=0;
  153.         LCDRW=0;
  154.         P1=cmdcode;               
  155.         LCDdelay(2);
  156.         LCDEnable=1;
  157.         LCDdelay(2);
  158.         LCDEnable=0;
  159. }
  160. /*****************************************************************************
  161. 函数功能:LCD初始化程序
  162. 入口参数:
  163. 出口参数:
  164. *****************************************************************************/
  165. void init_lcd()
  166. {
  167.         LCDdelay(100);        
  168.         LCDMcs=1;//刚开始关闭两屏
  169.         LCDScs=1;
  170.         LCDdelay(100);
  171.         write_com(LCDLCDDisp_Off);         //写初始化命令
  172.         write_com(Page_Add+0);
  173.         write_com(Start_Line+0);
  174.         write_com(LCDCol_Add+0);
  175.         write_com(LCDLCDDisp_On);
  176. }
  177. /*****************************************************************************
  178. 函数功能:写数据到LCD程序,RS(DI)=H,RW=L,EN=H,即来一个脉冲写一次
  179. 入口参数:LCDDispdata
  180. 出口参数:
  181. *****************************************************************************/
  182. void write_data(unsigned char LCDDispdata)
  183. {
  184.     CheckState();//检测LCD是否忙
  185.         LCDDi=1;
  186.         LCDRW=0;
  187.         P1=LCDDispdata;
  188.         LCDdelay(2);
  189.         LCDEnable=1;
  190.         LCDdelay(2);
  191.         LCDEnable=0;
  192. }
  193. /*****************************************************************************
  194. 函数功能:清除LCD内存程序
  195. 入口参数:pag,col,hzk
  196. 出口参数:
  197. *****************************************************************************/
  198. void Clr_Scr()
  199. {
  200.         unsigned char j,k;
  201.         LCDMcs=0; //左、右屏均开显示
  202.         LCDScs=0;
  203.          write_com(Page_Add+0);
  204.          write_com(LCDCol_Add+0);
  205.          for(k=0;k<8;k++)//控制页数0-7,共8页
  206.          {
  207.                 write_com(Page_Add+k); //每页每页进行写
  208.                   for(j=0;j<64;j++)  //每页最多可写32个中文文字或64个ASCII字符
  209.                 {
  210.                       write_com(LCDCol_Add+j);
  211.                         write_data(0x00);//控制列数0-63,共64列,写点内容,列地址自动加1
  212.                 }
  213.         }
  214. }
  215. /*****************************************************************************
  216. 函数功能:左屏位置显示
  217. 入口参数:page,column,hzk
  218. 出口参数:
  219. *****************************************************************************/
  220. void Bmp_Left_Disp(unsigned char page,unsigned char column, unsigned char code *Bmp)
  221. {
  222.         unsigned char j=0,i=0;
  223.         for(j=0;j<2;j++)
  224.         {
  225.                 write_com(Page_Add+page+j);
  226.                 write_com(LCDCol_Add+column);
  227.                 for(i=0;i<64;i++)
  228.                         write_data(Bmp[128*j+i]);
  229.         }
  230. }
  231. /*****************************************************************************
  232. 函数功能:右屏位置显示
  233. 入口参数:page,column,hzk
  234. 出口参数:
  235. *****************************************************************************/
  236. void Bmp_Right_Disp(unsigned char page,unsigned char column, unsigned char code *Bmp)
  237. {
  238.         unsigned char j=0,i=0;
  239.         for(j=0;j<2;j++)
  240.         {
  241.                 write_com(Page_Add+page+j);
  242.                 write_com(LCDCol_Add+column);
  243.                 for(i=64;i<128;i++)
  244.                         write_data(Bmp[128*j+i]);
  245.         }
  246. }


  247. void main()
  248. {
  249.         init_lcd();
  250.         Clr_Scr();
  251.         LCDMcs=0; //左屏开显示
  252.         LCDScs=1;
  253.         Bmp_Left_Disp(0,0,Bmp1);// Bmp1为某个汉字的首地址
  254.     Bmp_Left_Disp(2,0,Bmp2);
  255.     Bmp_Left_Disp(4,0,Bmp3);
  256.     Bmp_Left_Disp(6,0,Bmp4);

  257.         LCDMcs=1; //右屏开显示
  258.         LCDScs=0;
  259.     Bmp_Right_Disp(0,0,Bmp1);
  260.     Bmp_Right_Disp(2,0,Bmp2);
  261.     Bmp_Right_Disp(4,0,Bmp3);
  262.     Bmp_Right_Disp(6,0,Bmp4);
  263.         while(1)
  264.     {

  265.         }
  266.            }

复制代码

评分

参与人数 1黑币 +20 收起 理由
admin + 20 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:137736 发表于 2021-12-6 20:57 | 只看该作者
将软件源码打包放上来呀。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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