找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机驱动不带字库的LCD12864串行显示Proteus仿真代码

[复制链接]
跳转到指定楼层
楼主
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code hz48_48[];

  5. /*********LCD12864液晶引脚功能定义**********/
  6. sbit    cs=P0^0;          //片选使能
  7. sbit reset=P0^1;         //复位
  8. sbit    rs=P0^2;     //命令/数据选择,L:命令 H:数据
  9. sbit   sid=P0^3;         //串行数据输入
  10. sbit  sclk=P0^4;         //时钟

  11. void delay(uint i)                 /*1ms延时函数*/
  12. {
  13.         uint j,k;
  14.         for(j=0;j<i;j++)
  15.            for(k=0;k<110;k++);
  16. }

  17. /*********LCD12864写指令********/
  18. void transfer_command(uchar data1)
  19. {
  20.         char i;
  21.         cs=0;
  22.         rs=0;
  23.         for(i=0;i<8;i++)
  24.         {
  25.                 sclk=0;
  26.                 if(data1&0x80) sid=1;
  27.                 else sid=0;
  28.                 sclk=1;
  29.                 data1=data1<<=1;
  30.         }
  31. }

  32. /*********LCD12864写数据********/
  33. void transfer_data(uchar data1)
  34. {
  35.         char i;
  36.         cs=0;
  37.         rs=1;
  38.         for(i=0;i<8;i++)
  39.         {
  40.                 sclk=0;
  41.                 if(data1&0x80) sid=1;
  42.                 else sid=0;
  43.                 sclk=1;
  44.                 data1=data1<<=1;
  45.         }
  46. }

  47. /*********LCD12864初始化*********/
  48. void initial_lcd()
  49. {
  50. cs=0;
  51. reset=0;      /*低电平复位*/
  52. delay(100);
  53. reset=1;      /*复位完毕*/
  54. delay(20);
  55. transfer_command(0xe2); /*软复位*/
  56. delay(5);
  57. transfer_command(0x2c); /*升压步聚 1*/
  58. delay(5);
  59. transfer_command(0x2e); /*升压步聚 2*/
  60. delay(5);
  61. transfer_command(0x2f); /*升压步聚 3*/
  62. delay(5);
  63. transfer_command(0x23); /*粗调对比度,可设置范围 0x20~0x27*/
  64. transfer_command(0x81); /*微调对比度*/
  65. transfer_command(0x28); /*0x1a,微调对比度的值,可设置范围 0x00~0x3f*/
  66. transfer_command(0xa2); /*1/9 偏压比(bias)*/
  67. transfer_command(0xc0); /*行扫描顺序:从上到下,若设为0xc8,则图文垂直镜像*/
  68. transfer_command(0xa1); /*列扫描顺序:从右到左,若设为0xa0,则图文水平镜像*/
  69. transfer_command(0x40); /*起始行:第一行开始*/
  70. transfer_command(0xaf); /*开显示*/
  71. cs=1;
  72. }

  73. void clear()        //清屏
  74. {
  75.    uchar i,j;
  76.    for(j=0;j<8;j++)                                    //循环8页64行
  77.         {
  78.            transfer_command(0xb0+j);  //设置页地址
  79.            transfer_command(0x10);          //列地址高4位
  80.            transfer_command(0x00);    //列地址低4位
  81.            for(i=0;i<128;i++)                  //循环128列
  82.            {transfer_data(0x00);}          //清屏(清零)
  83.         }
  84. }

  85. void display_hz48_48(uchar page,uchar col,uchar *dp)  //定义页、列、指针      
  86. {
  87.    uchar i,j;
  88.    for(j=0;j<6;j++)                                                            //循环6页48行(本案例显示48*48汉字,即48行48列)
  89.         {
  90.            transfer_command(0xb0+page+j);          //设置页地址
  91.            transfer_command(0x10+((col>>4)&0x0f)); //列地址高4位,位置跟随
  92.            transfer_command(0x00+(col&0x0f));      //列地址低4位,位置跟随
  93.            for(i=0;i<48;i++)                        //循环48列
  94.            {
  95.            transfer_data(*dp);
  96.            dp++;
  97.            }         
  98.            
  99.         }
  100. }

  101. void main(void)                   //主程序
  102. {
  103.    initial_lcd();           //初始化
  104.    clear();                           //清屏
  105.    delay(200);
  106.    display_hz48_48(1,12,hz48_48);          //显示第一个字,位置坐标:第1页第12列
  107.    display_hz48_48(1,68,hz48_48+288);  //显示第二个字,位置坐标:第1页第68列
  108.    while(1);
  109. }

  110. /*******以下为字形代码,由PCtoLCD2002提取**********/
  111. uchar code hz48_48[][288]={
  112. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  113. 0x00,0x00,0x00,0x00,0x08,0x18,0x38,0x78,0xF8,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,
  114. 0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  115. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFE,0xFE,0xFE,0x08,0x08,0x0C,0x0C,
  116. 0x0C,0x0C,0x84,0x84,0x84,0x84,0xC6,0xC6,0xC6,0xC6,0xE2,0xE2,0x62,0x62,0x03,0x03,
  117. 0x03,0x03,0x63,0x73,0x3F,0x3F,0x1F,0x1F,0x1F,0x0E,0x0C,0x08,0x00,0x00,0x00,0x00,
  118. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x03,0x00,0x00,0x00,0x08,0x38,
  119. 0xF8,0xF8,0xF0,0x10,0x19,0x19,0x19,0x08,0x08,0x08,0x0C,0x8C,0xFC,0xFC,0xFC,0x3C,
  120. 0x18,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  121. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xC0,0xC0,0xC0,0xC0,0xC0,
  122. 0xC1,0xC7,0x47,0x47,0x62,0x63,0xE3,0xE3,0xE3,0xE3,0x21,0x31,0x31,0x31,0x31,0x31,
  123. 0xF0,0xF0,0xF0,0xF0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  124. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,
  125. 0xC0,0x08,0x08,0x08,0x0C,0x0C,0xFF,0xFF,0xFF,0x9F,0x8C,0x8C,0x84,0x84,0x80,0x80,
  126. 0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  127. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,
  128. 0x07,0x03,0x03,0x03,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x07,0x1F,
  129. 0x1F,0x1F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"富",0*/
  130. /* (48 X 48 , 楷体, 加粗 )*/

  131. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  132. 0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  133. 0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  134. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x06,0x06,0x06,0x06,0x03,0xFF,
  135. 0xFF,0xFF,0x3F,0x0F,0x06,0x00,0x00,0x02,0x1E,0xFE,0xFE,0xFE,0x82,0x82,0x82,0x82,
  136. 0x83,0xC1,0xC1,0xFB,0xFF,0x7F,0x5F,0x0F,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
  137. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0x0C,0x0C,0x04,0x06,0x06,0x07,
  138. 0x07,0x02,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x81,0x83,0x83,0x81,0x81,0xFF,0xFF,
  139. 0xFE,0x4E,0x40,0x60,0x60,0x60,0xF0,0xF0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,
  140. 0x00,0x00,0x00,0x00,0x10,0x38,0x3E,0x3F,0x1F,0x0F,0x0C,0x04,0x06,0x0E,0xFE,0xFE,
  141. 0xFC,0x3C,0x08,0x00,0x00,0x03,0x0F,0x3F,0xFF,0xF1,0x60,0x60,0x60,0x20,0xFF,0xFF,
  142. 0xFF,0x20,0x30,0x30,0x30,0x3E,0x3F,0x1F,0x17,0x03,0x01,0x00,0x00,0x00,0x00,0x00,
  143. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFF,0xFF,
  144. 0xFF,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0x60,0x60,0x7F,0x3F,
  145. 0x3F,0x30,0x10,0x13,0x17,0x1E,0x7E,0xFC,0xF8,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,
  146. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x0F,0x0F,0x0F,0x07,0x03,
  147. 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  148. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x03,0x00,0x00,0x00,0x00,/*"强",1*/
  149. /* (48 X 48 , 楷体, 加粗 )*/
  150. };
复制代码


全部资料51hei下载地址:
LCD12864串行方式显示.zip (63.46 KB, 下载次数: 32)

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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