找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机12864液晶逐字显示程序及proteus仿真

[复制链接]
跳转到指定楼层
楼主
给51黑电子论坛的朋友们分享一个lcd12864液晶逐字显示的源程序,也就是屏幕上面的字是像打字机一样一个个的打出来的,而不是同时出现.还带proteus,下面是仿真原理图:



所有资料下载:
12864液晶逐字显示.rar (50.23 KB, 下载次数: 19)


逐字显示源程序:
  1. #include <reg51.h>
  2. sbit DI=P2^2; // 数据\指令 选择
  3. sbit RW=P2^1; // 读\写 选择
  4. sbit E=P2^0; // 读\写使能
  5. sbit CS1=P2^4; // 片选1
  6. sbit CS2=P2^3; // 片选2
  7. unsigned int number=0,mstcnt=0;
  8. unsigned char code ziku[]={
  9. /*--  文字:  广  --*/
  10. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  11. 0x00,0x00,0xFC,0x04,0x04,0x04,0x04,0x05,0x06,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
  12. 0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  13. /*--  文字:  西  --*/
  14. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  15. 0x02,0xF2,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xF2,0x02,0x00,
  16. 0x00,0x7F,0x28,0x24,0x22,0x21,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00,

  17. /*--  文字:  民  --*/
  18. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  19. 0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0xF2,0x92,0x92,0x92,0x9E,0x80,0x80,0x00,0x00,
  20. 0x00,0x00,0xFF,0x40,0x20,0x10,0x00,0x00,0x03,0x0C,0x10,0x20,0x40,0xF0,0x00,0x00,

  21. /*--  文字:  族  --*/
  22. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  23. 0x08,0x08,0xF9,0x4E,0x48,0xC8,0x20,0x98,0x6F,0x4A,0xC8,0x48,0x48,0x48,0x08,0x00,
  24. 0x40,0x38,0x07,0x40,0x80,0x7F,0x40,0x42,0x22,0x12,0x0F,0x12,0x22,0x42,0x42,0x00,

  25. /*--  文字:  大  --*/
  26. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  27. 0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
  28. 0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00,

  29. /*--  文字:  学  --*/
  30. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  31. 0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
  32. 0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,

  33. /*--  文字:  ,  --*/
  34. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  35. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  36. 0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  37. /*--  文字:  环  --*/
  38. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  39. 0x00,0x22,0x22,0xFE,0x22,0x22,0x00,0x02,0xC2,0x32,0xFE,0x42,0x82,0x02,0x02,0x00,
  40. 0x00,0x04,0x04,0x03,0x12,0x0A,0x04,0x03,0x00,0x00,0xFF,0x00,0x00,0x03,0x0E,0x00,

  41. /*--  文字:  境  --*/
  42. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  43. 0x20,0x20,0xFE,0x20,0x20,0x00,0x24,0xAC,0xB4,0xA5,0xA6,0xB4,0xAC,0x24,0x00,0x00,
  44. 0x10,0x30,0x1F,0x08,0x08,0x00,0x80,0x4F,0x3A,0x0A,0x0A,0x7A,0x8F,0x80,0xE0,0x00,

  45. /*--  文字:  优  --*/
  46. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  47. 0x40,0x20,0xF8,0x17,0x02,0x10,0x10,0xF0,0x1F,0xF0,0x12,0x1C,0x14,0x10,0x00,0x00,
  48. 0x00,0x00,0xFF,0x00,0x40,0x20,0x18,0x07,0x00,0x3F,0x40,0x40,0x40,0x78,0x20,0x00,

  49. /*--  文字:  美  --*/
  50. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  51. 0x00,0x84,0x84,0x94,0x95,0x96,0x94,0xFC,0x94,0x96,0x95,0x94,0x94,0x84,0x80,0x00,
  52. 0x80,0x80,0x44,0x44,0x24,0x14,0x0C,0x07,0x0C,0x14,0x24,0x64,0xC4,0x44,0x00,0x00,

  53. /*--  文字:  ,  --*/
  54. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  55. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  56. 0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  57. /*--  文字:  历  --*/
  58. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  59. 0x00,0x00,0xFE,0x02,0x22,0x22,0x22,0x22,0xFA,0x22,0x22,0x22,0xE2,0x02,0x02,0x00,
  60. 0x40,0x30,0x0F,0x00,0x40,0x20,0x18,0x06,0x01,0x00,0x20,0x60,0x3F,0x00,0x00,0x00,

  61. /*--  文字:  史  --*/
  62. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  63. 0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,
  64. 0x80,0x80,0x41,0x40,0x22,0x14,0x08,0x17,0x20,0x20,0x20,0x40,0x41,0xC0,0x40,0x00,

  65. /*--  文字:  悠  --*/
  66. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  67. 0x20,0x10,0xFC,0x03,0xF8,0x20,0x10,0x0C,0x17,0xA4,0x44,0xB4,0x0C,0x04,0x04,0x00,
  68. 0x40,0x70,0x03,0x00,0x38,0x40,0x40,0x45,0x59,0x40,0x40,0x70,0x01,0x13,0x61,0x00,

  69. /*--  文字:  久  --*/
  70. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  71. 0x00,0x00,0x80,0x40,0x30,0x0C,0x0B,0x08,0xC8,0xBC,0x08,0x00,0x00,0x00,0x00,0x00,
  72. 0x40,0x41,0x20,0x20,0x10,0x08,0x04,0x03,0x00,0x01,0x06,0x18,0x30,0x60,0x20,0x00,

  73. /*--  文字:  。  --*/
  74. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  75. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  76. 0x00,0x18,0x24,0x24,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  77. /*--  文字:  欢  --*/
  78. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  79. 0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00,
  80. 0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00,

  81. /*--  文字:  迎  --*/
  82. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  83. 0x40,0x41,0xCE,0x04,0x00,0xFC,0x04,0x02,0x02,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
  84. 0x40,0x20,0x1F,0x20,0x40,0x47,0x42,0x41,0x40,0x5F,0x40,0x42,0x44,0x43,0x40,0x00,

  85. /*--  文字:  你  --*/
  86. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  87. 0x80,0x40,0xF0,0x2C,0x43,0x20,0x98,0x0F,0x0A,0xE8,0x08,0x88,0x28,0x1C,0x08,0x00,
  88. 0x00,0x00,0x7F,0x00,0x10,0x0C,0x03,0x21,0x40,0x3F,0x00,0x00,0x03,0x1C,0x08,0x00,

  89. /*--  文字:  的  --*/
  90. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  91. 0x00,0xF8,0x8C,0x8B,0x88,0xF8,0x40,0x30,0x8F,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,
  92. 0x00,0x7F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x03,0x26,0x40,0x20,0x1F,0x00,0x00,

  93. /*--  文字:  到  --*/
  94. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  95. 0x00,0x22,0x72,0x2A,0x26,0xE2,0x2A,0x72,0x22,0x00,0xF8,0x00,0x00,0xFF,0x00,0x00,
  96. 0x00,0x42,0xC2,0x42,0x22,0x3F,0x22,0x12,0x12,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,

  97. /*--  文字:  来  --*/
  98. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  99. 0x00,0x80,0x84,0x84,0x94,0xA4,0xC4,0xFF,0x84,0xC4,0xB4,0x94,0x84,0x84,0x80,0x00,
  100. 0x20,0x20,0x10,0x10,0x08,0x04,0x02,0xFF,0x01,0x02,0x04,0x08,0x18,0x30,0x10,0x00,

  101. /*--  文字:  !  --*/
  102. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  103. 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  104. 0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  105. /*--  文字:  计  --*/
  106. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  107. 0x20,0x21,0x2E,0xE4,0x00,0x00,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x00,
  108. 0x00,0x00,0x00,0x7F,0x20,0x10,0x08,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,

  109. /*--  文字:  算  --*/
  110. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  111. 0x08,0x07,0xFA,0xAA,0xAE,0xAA,0xAA,0xA8,0xAC,0xAB,0xAA,0xFE,0x0A,0x02,0x02,0x00,
  112. 0x08,0x08,0x8B,0x6A,0x1E,0x0A,0x0A,0x0A,0x0A,0xFE,0x0A,0x0B,0x08,0x08,0x08,0x00,

  113. /*--  文字:  机  --*/
  114. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  115. 0x08,0x08,0xC8,0xFF,0x48,0x88,0x08,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,
  116. 0x04,0x03,0x00,0xFF,0x00,0x41,0x30,0x0C,0x03,0x00,0x00,0x00,0x3F,0x40,0x78,0x00,

  117. /*--  文字:  科  --*/
  118. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  119. 0x10,0x12,0x92,0x72,0xFE,0x51,0x91,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,
  120. 0x04,0x02,0x01,0x00,0xFF,0x00,0x04,0x04,0x04,0x02,0x02,0x02,0xFF,0x01,0x01,0x00,

  121. /*--  文字:  学  --*/
  122. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  123. 0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
  124. 0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,

  125. /*--  文字:  学  --*/
  126. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  127. 0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
  128. 0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,

  129. /*--  文字:  院  --*/
  130. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  131. 0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,
  132. 0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00,

  133. /*--  文字:     --*/
  134. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  135. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  136. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  137. };
  138. void checkstate()
  139. {
  140.         unsigned char dat;
  141.         DI=0;
  142.         RW=1;
  143.         do
  144.         {
  145.                 P1=0x00;
  146.                 E=1;
  147.                 dat=P1;
  148.                 E=0;
  149.                 dat=0x80 & dat;                                 //仅当第7位为0时才可操作(判别busy信号)
  150.         }while(!(dat==0x00));
  151. }
  152. void writecommand(unsigned char command)         //写命令
  153. {
  154.         checkstate();
  155.         RW=0;
  156.         P1=command;
  157.         E=1;
  158.         E=0;
  159. }
  160. void writedate(unsigned char date)                //写数据
  161. {
  162.    checkstate();
  163.    DI=1; RW=0;
  164.    P1=date;
  165.    E=1; E=0;
  166. }
  167. void cleanscreen()                                                 //清屏
  168. {
  169.         unsigned char page,i;
  170.         for(page=0xb8;page<0xc0;page++)
  171.         {
  172.                 writecommand(page);
  173.                 writecommand(0x40);
  174.                 for(i=0;i<64;i++)
  175.                         writedate(0x00);
  176.         }
  177. }
  178. void choosescreen(unsigned char NO)                //选择屏幕
  179. {
  180.         switch (NO)
  181.         {
  182.                 case        0:
  183.                         CS1=0;
  184.                         CS2=0;
  185.                         break;
  186.                 case        1:
  187.                         CS1=0;
  188.                         CS2=1;
  189.                         break;
  190.                 case        2:
  191.                         CS1=1;
  192.                         CS2=0;
  193.                         break;
  194.                 default:
  195.                         break;
  196.         }        
  197. }
  198. void lce_init(void)
  199. {
  200.         writecommand(0xc0);
  201.         writecommand(0x3f);
  202. }
  203. void display(unsigned char count)
  204. {
  205.         unsigned int i,m;
  206.         choosescreen(1);
  207.         writecommand(0xb8);        
  208.         writecommand(0x40);
  209.         for(i=0;i<count*16;i++)
  210.         {
  211.                 if(i!=0&&i%16==0)
  212.                         m++;
  213.                 switch (i)
  214.                 {
  215.                         case        64:
  216.                                 choosescreen(2);
  217.                                 writecommand(0xb8);        
  218.                                 writecommand(0x40);
  219.                                 break;
  220.                         case        128:
  221.                                 choosescreen(1);
  222.                                 writecommand(0xba);        
  223.                                 writecommand(0x40);
  224.                                 break;
  225.                         case        192:
  226.                                 choosescreen(2);
  227.                                 writecommand(0xba);        
  228.                                 writecommand(0x40);
  229.                                 break;
  230.                         case        256:
  231.                                 choosescreen(1);
  232.                                 writecommand(0xbc);        
  233.                                 writecommand(0x40);
  234.                                 break;
  235.                         case        320:
  236.                                 choosescreen(2);
  237.                                 writecommand(0xbc);        
  238.                                 writecommand(0x40);
  239.                                 break;
  240.                         case        384:
  241.                                 choosescreen(1);
  242.                                 writecommand(0xbe);        
  243.                                 writecommand(0x40);
  244.                                 break;
  245.                         case        448:
  246.                                 choosescreen(2);
  247.                                 writecommand(0xbe);        
  248.                                 writecommand(0x40);
  249.                                 break;
  250.                         default:
  251.                                 break;
  252.                 }
  253.                 writedate(*(ziku+i+m*16));
  254.         }
  255.         choosescreen(1);
  256.         writecommand(0xb9);        
  257.         writecommand(0x40);
  258.         m=0;
  259.         
  260.         for(i=0;i<count*16;i++)
  261.         {
  262.                 if(i!=0&&i%16==0)
  263.                         m++;
  264.                 switch (i)
  265.                 {
  266.                         case        64:
  267.                                 choosescreen(2);
  268.                                 writecommand(0xb9);        
  269.                                 writecommand(0x40);
  270.                                 break;
  271.                         case        128:
  272.                                 choosescreen(1);
  273.                                 writecommand(0xbb);        
  274.                                 writecommand(0x40);
  275.                                 break;

  276.                         case        192:
  277.                                 choosescreen(2);
  278.                                 writecommand(0xbb);        
  279.                                 writecommand(0x40);
  280.                                 break;
  281.                         case        256:
  282.                                 choosescreen(1);
  283.                                 writecommand(0xbd);        
  284.                                 writecommand(0x40);
  285.                                 break;
  286.                         case        320:
  287.                                 choosescreen(2);
  288.                                 writecommand(0xbd);        
  289.                                 writecommand(0x40);
  290.                                 break;
  291.                         case        384:
  292.                                 choosescreen(1);
  293.                                 writecommand(0xbf);        
  294.                                 writecommand(0x40);
  295.                                 break;
  296.                         case        448:
  297.                                 choosescreen(2);
  298.                                 writecommand(0xbf);        
  299.                                 writecommand(0x40);
  300.                                 break;
  301.                         default:
  302.                                 break;
  303.                 }
  304.                 writedate(*(ziku+i+m*16+16));
  305.         }
  306.         m=0;        
  307. }
  308. void t0(void) interrupt 1 using 0
  309. {
  310.         mstcnt++;
  311.         if(mstcnt==2000)
  312.     {
  313.                 mstcnt=0;
  314.                 number++;
  315.                
  316.         }
  317. }
  318. main()
  319. {
  320.         TMOD=0x02;
  321.         TH0=0x06;
  322.         TL0=0x06;
  323.         TR0=1;
  324.         ET0=1;                                 
  325.         EA=1;
  326.         
  327.         E=1;
  328.         choosescreen(0);
  329.         cleanscreen();
  330.         
  331.         lce_init();
  332.         
  333.         while(1)
  334.         {        
  335.                 display(number);
  336.                 if(number==33)
  337.                 {        
  338.                         number=0;
  339.                         choosescreen(0);
  340.                         cleanscreen();
  341.                 }        
  342.         }

  343. }
复制代码



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

使用道具 举报

沙发
ID:325484 发表于 2018-5-16 14:42 | 只看该作者
您好,你现在显示的文字不是我想要的文字。需要怎么改,还是使用什么样的字模提取软件就可以得到我想要的文字。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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