找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4813|回复: 5
收起左侧

QC12864液晶(ST7920芯片)-画图显示图片源程序

[复制链接]
ID:135102 发表于 2017-7-13 09:51 | 显示全部楼层 |阅读模式
用育松12864显示图片
0.png 0.png 0.png

单片机源程序如下:
  1. #include <AT89X52.h>       //调用51单片机的头文件
  2. #include <Intrins.h>    //因为本例中用到空操作_nop_();所以必须调用这个头文件

  3. //12864液晶相关I/O设置
  4. sbit RS=P3^5;                         //并行数据/控制字选择 H:数据  L:控制字
  5. sbit RW=P3^6;                         //并行读/写选择       H:读    L:写
  6. sbit E =P3^4;                         //并行读写使能        H有效,下降沿锁定数据
  7. sbit PSB=P3^7;                     //串口,并口选择       H:并口  L:串口(开发板上引脚标识为CS1)
  8. sbit RST=P2^1;                     //复位引脚            L:液晶复位
  9. sbit DB0=P0^7;                         //
  10. sbit DB1=P0^6;                         //
  11. sbit DB2=P0^5;                         //
  12. sbit DB3=P0^4;                         //
  13. sbit DB4=P0^3;                         //
  14. sbit DB5=P0^2;                         //
  15. sbit DB6=P0^1;                         //
  16. sbit DB7=P0^0;                         //


  17. unsigned char code picture[]={
  18. /*--  调入了一幅图像:F:\kaifaban\GL8\05.bmp  --*/
  19. /*--  宽度x高度=128x64  --*/
  20. 0x00,0x02,0x80,0x2A,0x91,0x15,0x5E,0x1F,0xFF,0xCB,0x50,0x01,0x7E,0xA1,0x00,0x00,
  21. 0x00,0x04,0x94,0x50,0xC0,0x06,0xB7,0xBF,0xFE,0x74,0xA0,0x00,0xF5,0xD0,0x80,0x00,
  22. 0x20,0x00,0x28,0x57,0x00,0x0A,0xDF,0xFF,0xFF,0x8A,0x80,0x00,0x73,0xD2,0x00,0x00,
  23. 0x00,0x00,0x80,0x02,0xF0,0x1A,0xBB,0xFF,0xFA,0x51,0x00,0x00,0x9D,0xF4,0x00,0x04,
  24. 0x00,0x00,0x00,0x03,0xD0,0x15,0x77,0xFF,0xE7,0xAA,0x00,0x00,0x7F,0xB8,0x00,0x00,
  25. 0x00,0x00,0x00,0x02,0xE8,0xAA,0xEF,0xFF,0xFF,0xD4,0x00,0x00,0x1F,0xEC,0x00,0x00,
  26. 0x41,0x00,0x00,0x03,0xD0,0x55,0xFF,0xFF,0xFE,0xE0,0x00,0x00,0x2F,0xEC,0x00,0x00,
  27. 0x00,0x00,0x00,0x00,0xA8,0x0B,0xBF,0xFF,0xFF,0x10,0x00,0x00,0x2F,0xFE,0x00,0x00,
  28. 0x42,0xA8,0x00,0x0F,0x50,0x2F,0xFF,0xFF,0xFE,0x40,0x00,0x00,0x17,0xF4,0x00,0x00,
  29. 0x02,0x04,0x00,0x01,0xBC,0x16,0xFF,0xFF,0xFF,0xA8,0x00,0x00,0x17,0xFE,0x00,0x00,
  30. 0x00,0x00,0x00,0x46,0x45,0x2D,0xF8,0x7F,0xFD,0x57,0x00,0x00,0x0F,0xFE,0x00,0x00,
  31. 0x00,0x52,0x00,0x02,0x22,0x1F,0xF9,0x1F,0xF5,0x00,0x40,0x00,0x0B,0xFF,0x01,0x00,
  32. 0x00,0x24,0x01,0x0C,0x22,0x77,0xFA,0xBF,0x54,0x00,0xA0,0x00,0x07,0xFE,0x00,0x0C,
  33. 0x80,0x14,0x00,0x1E,0x04,0x3F,0xFD,0x1D,0xF0,0x00,0x28,0x00,0x0B,0xFF,0x00,0x04,
  34. 0x00,0x51,0x40,0x19,0x11,0xDF,0xF4,0x7E,0x80,0x00,0x50,0x00,0x17,0xFF,0x00,0x00,
  35. 0x48,0x58,0xAA,0xBA,0x98,0x3F,0xF8,0x3A,0x00,0x00,0x20,0x00,0x03,0xFF,0x00,0x00,
  36. 0x20,0xA0,0xAA,0xEA,0xA0,0x0F,0xFF,0xF4,0x01,0x00,0x00,0x00,0x13,0xFF,0x00,0x20,
  37. 0x20,0x20,0x21,0x2E,0x60,0x07,0xFF,0xE8,0x02,0xFD,0x00,0x00,0x05,0xFF,0x80,0x00,
  38. 0x00,0x00,0xA3,0xCB,0x80,0x07,0xFF,0xD0,0x05,0xD7,0x00,0x00,0x13,0xFF,0x04,0x00,
  39. 0x10,0x00,0x2A,0xFB,0x40,0x07,0xBF,0xE0,0x01,0xA3,0xC0,0x00,0x01,0xFF,0xA0,0x00,
  40. 0x40,0x01,0x2A,0xD4,0x11,0x15,0xFF,0x80,0x00,0x57,0x80,0x00,0x4B,0xFF,0x00,0x00,
  41. 0x88,0x02,0x15,0xDA,0x42,0x8B,0xBD,0xC0,0x00,0x07,0xC0,0x00,0xA8,0xFF,0x90,0x00,
  42. 0x00,0x01,0x2B,0x35,0x21,0x0B,0xBF,0x00,0x00,0x02,0x88,0x01,0x59,0xFF,0x00,0x00,
  43. 0x00,0x01,0x55,0x1A,0xC4,0x15,0x7F,0x80,0x00,0x10,0x80,0x04,0xAE,0xFF,0x80,0x00,
  44. 0x80,0x05,0x4A,0x15,0x24,0x0E,0xFE,0x00,0x00,0x05,0x00,0x09,0x0A,0xFF,0x18,0x01,
  45. 0x08,0x02,0xD3,0x54,0x20,0x0D,0x7F,0x00,0x00,0x00,0x00,0x00,0x42,0xFF,0xA0,0x00,
  46. 0x10,0x1D,0x48,0x30,0x88,0x36,0xFD,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0x22,0xE0,
  47. 0x00,0x15,0x54,0x52,0x0B,0xDE,0xFE,0x00,0x00,0x00,0x00,0x00,0x09,0xFF,0xAE,0xB8,
  48. 0x00,0x2A,0x52,0x80,0x07,0xDD,0xBA,0x00,0x00,0x00,0x00,0x15,0xA5,0xFF,0x54,0x94,
  49. 0x40,0x2A,0xA9,0x50,0x0D,0xED,0xFC,0x00,0x00,0x00,0x00,0x09,0xF5,0xFF,0xAB,0x50,
  50. 0x02,0xA1,0x66,0x80,0x0B,0xFD,0x70,0x00,0x00,0x00,0x00,0x03,0xF5,0xFF,0xA5,0x50,
  51. 0x02,0x00,0x02,0xA0,0x03,0xFD,0xF8,0x00,0x00,0x00,0x00,0x08,0xFB,0xFF,0x42,0xA8,
  52. 0x02,0x80,0xDD,0x40,0x0D,0xFB,0xE0,0x00,0x00,0x00,0x00,0x00,0xF3,0xFF,0x22,0xB0,
  53. 0x02,0x40,0x25,0x00,0x03,0xFF,0xF0,0x00,0x00,0x00,0x00,0x02,0x37,0xFF,0xA8,0xC0,
  54. 0x01,0x00,0x00,0x80,0x1B,0xFB,0xC0,0x00,0x00,0x00,0x00,0x00,0x27,0xFF,0x51,0x00,
  55. 0xB5,0x01,0x00,0x00,0x07,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0x00,0x00,
  56. 0x9A,0x00,0x00,0x00,0x17,0xFF,0x80,0x00,0x00,0x08,0x00,0x00,0x0F,0xFF,0x00,0x80,
  57. 0x74,0x00,0x00,0x00,0x0F,0xFF,0xE0,0x00,0x00,0x09,0xC0,0x00,0x0F,0xFF,0x00,0x00,
  58. 0x91,0x20,0x00,0x00,0x1F,0xFF,0x80,0x00,0x00,0x05,0x80,0x00,0x0F,0xFE,0x00,0x00,
  59. 0x65,0x14,0x00,0x00,0x1F,0xFF,0xC0,0x00,0x00,0x02,0xA0,0x00,0x0F,0xFF,0x20,0x00,
  60. 0x90,0x08,0x00,0x00,0x03,0xFF,0x80,0x00,0x00,0x00,0x2A,0x00,0x1F,0xFE,0x02,0x00,
  61. 0x24,0x04,0x00,0x00,0x03,0xFF,0xC0,0x00,0x02,0x00,0x56,0x00,0x1F,0xFE,0x20,0x00,
  62. 0x50,0x00,0x00,0x00,0x1B,0xF7,0x80,0x00,0x0E,0x00,0x48,0x00,0x1F,0xFC,0x00,0x00,
  63. 0x24,0x00,0x00,0x00,0x1F,0xFF,0xE0,0x00,0x05,0xD4,0x00,0x00,0x1F,0xFC,0x00,0x00,
  64. 0x52,0x80,0x00,0x00,0x1F,0xF7,0xC0,0x00,0x01,0x70,0x00,0x00,0x3F,0xF0,0x00,0x00,
  65. 0x45,0x40,0x00,0x00,0x1F,0xFF,0xF0,0x00,0x01,0x1E,0x80,0x00,0x3F,0xFC,0x00,0x20,
  66. 0x5A,0x80,0x00,0x00,0x1F,0xFF,0xE0,0x00,0x01,0x47,0x40,0x00,0x7F,0xFA,0x00,0x20,
  67. 0x15,0x40,0x00,0x00,0x0F,0xFF,0xF8,0x00,0x00,0x51,0xA0,0x00,0x7F,0xFC,0x00,0x00,
  68. 0x16,0x80,0x00,0x00,0x1F,0xFF,0xF8,0x00,0x00,0x20,0xE0,0x01,0xFF,0xF8,0x00,0x00,
  69. 0x15,0x40,0x00,0x00,0x0F,0xFF,0xFC,0x00,0x00,0x44,0x38,0x01,0xFF,0xF8,0x00,0x00,
  70. 0x0A,0xA0,0x00,0x00,0x1F,0xFF,0xFA,0x00,0x00,0x29,0x30,0x03,0xFF,0xF0,0x00,0x00,
  71. 0x05,0x40,0x00,0x00,0x0D,0xFF,0xFD,0x00,0x00,0x0A,0x48,0x07,0xFF,0xF8,0x00,0x00,
  72. 0x05,0x00,0x00,0x00,0x1F,0xFF,0xFA,0x00,0x00,0x0A,0x80,0x2F,0xFF,0xF0,0x80,0x00,
  73. 0x00,0x00,0x00,0x00,0x0D,0xFF,0xFE,0x80,0x00,0x02,0x00,0x0F,0xFF,0xF9,0x00,0x00,
  74. 0x00,0x00,0x00,0x00,0x1B,0xFF,0xFD,0x40,0x00,0x00,0x00,0xBF,0xFF,0xF5,0x00,0x00,
  75. 0x00,0x00,0x00,0x00,0x0B,0xF7,0xFE,0xA0,0x00,0x00,0x00,0x3F,0xFF,0xF4,0x01,0x54,
  76. 0x00,0x00,0x00,0x00,0x17,0xF6,0xFD,0x50,0x00,0x00,0x01,0x7F,0xFF,0xF4,0x16,0xD0,
  77. 0x00,0x00,0x00,0x00,0x09,0xF2,0xFE,0xA8,0x00,0x00,0x04,0xFF,0xFF,0xF5,0x70,0x10,
  78. 0x00,0x00,0x00,0x00,0x0A,0xD0,0xFA,0xAA,0x00,0x00,0x15,0xFF,0xFF,0xEA,0xEA,0x20,
  79. 0x00,0x00,0x00,0x00,0x03,0xE0,0x17,0x55,0x40,0x00,0x23,0xFF,0xFF,0xF5,0x94,0x60,
  80. 0x00,0x00,0x00,0x00,0x0F,0xF0,0x74,0x4A,0xA8,0x01,0x5F,0xFF,0xFF,0xAA,0xF6,0x80,
  81. 0x00,0x00,0x00,0x00,0x03,0xF1,0x7B,0x55,0x50,0x82,0x3F,0xFF,0xFF,0xE9,0x7A,0x20,
  82. 0x00,0x00,0x00,0x00,0x07,0xF5,0xF6,0x2A,0xAA,0x25,0xFF,0xFF,0xFF,0x6A,0x68,0x00,
  83. 0x00,0x00,0x00,0x00,0x0B,0xFF,0xFB,0x41,0x55,0x57,0xFF,0xFF,0xFF,0xD1,0x50,0x00,
  84. };

  85. //名称:液晶用延时函数
  86. void delay(unsigned int t)
  87. {
  88.         unsigned int i;
  89.         for(i=0;i<t;i++);        
  90. }


  91. /*名称:字节内 的位数据位置转换 函数
  92.   功能: 把dat中的第7位和第0位交换、        
  93.         第6位和第1位交换、第5位和第2位交换      
  94.         第4位和第3位交换  
  95. */
  96. unsigned char num(unsigned char dat)
  97. {
  98.    unsigned char val;
  99.         val = ((dat & 0x01) << 7) | ((dat & 0x02) << 5) | ((dat & 0x04) << 3) | ((dat & 0x08) << 1) |
  100.    ((dat & 0x10) >> 1) | ((dat & 0x20) >> 3) | ((dat & 0x40) >> 5) | ((dat & 0x80) >> 7);
  101.    return  val;
  102. }


  103. //名称:写命令函数
  104. void write_com(unsigned char cmdcode)
  105. {               
  106.         RS=0;                   //设置该字节数据为命令代码
  107.         RW=1;                   //设置此次操作为读
  108.         E=1;                    //使能
  109.         _nop_();                    //空操作,做短暂的延时
  110.         _nop_();                    //空操作,做短暂的延时
  111.         E=0;                    //失能
  112.         RS=0;                   //设置该字节数据为命令代码
  113.         RW=0;                   //设置此次操作为读写

  114.         P0=num(cmdcode);            //将命令写入总线

  115.         _nop_();                    //空操作,做短暂的延时
  116.         E=1;                                   //E的下降沿,数据写入
  117.         _nop_();                    //空操作,做短暂的延时
  118.         E=0;                                   //E的下降沿,数据写入
  119. }


  120. //名称:写数据函数
  121. void write_data(unsigned char Rsspdata)
  122. {
  123.         RS=0;                   //设置该字节数据为命令代码
  124.         RW=1;                   //设置此次操作为读
  125.         E=1;                    //使能
  126.         _nop_();                    //空操作,做短暂的延时
  127.         _nop_();                    //空操作,做短暂的延时
  128.         E=0;                    //失能
  129.         RS=1;                   //设置该字节数据为数据代码
  130.         RW=0;                   //设置此次操作为读写

  131.         P0=num(Rsspdata);           //将数据写入总线

  132.         _nop_();                    //空操作,做短暂的延时
  133.         E=1;                                   //E的下降沿,数据写入
  134.         _nop_();                    //空操作,做短暂的延时
  135.         E=0;                                   //E的下降沿,数据写入
  136. }


  137. //名称:图片显示函数 ,图片取模值放到数组picture
  138. void img_disp(unsigned char code *img)
  139. {
  140.           unsigned char i,j;
  141.           for(j=0;j<32;j++)                //垂直地址y32行,上下两屏共64行
  142.           {
  143.             for(i=0;i<8;i++)        //再设定水平地址x(0-8)
  144.             {
  145.                       write_com(0x34);     //扩展指令集
  146.                                                  //连续写两个字节完成垂直于水平的坐标
  147.                       write_com(0x80+j);   //先设定垂直地址y(0-32)
  148.                       write_com(0x80+i);      //再设定水平地址x(0-8)
  149.                       write_com(0x30);                  //基本指令集
  150.                       write_data(img[j*16+i*2]);
  151.                       write_data(img[j*16+i*2+1]);
  152.             }
  153.           }
  154.           for(j=32;j<64;j++)
  155.           {
  156.             for(i=0;i<8;i++)
  157.             {
  158.               write_com(0x34);                  //扩展指令集
  159.                         //连续写两个字节完成垂直于水平的坐标
  160.               write_com(0x80+j-32);   //先设定垂直地址(0-32)
  161.               write_com(0x88+i);      //再设定水平地址(0-8)
  162.               write_com(0x30);                  //基本指令集
  163.               write_data(img[j*16+i*2]);
  164.               write_data(img[j*16+i*2+1]);
  165.             }
  166.           }
  167.           write_com(0x36);                                  //扩展指令集,绘图显示ON
  168. }


  169. //名称:12864初始化函数
  170. void init_lcd(void)
  171. {           
  172.         RST=0;           //复位液晶
  173.         delay(250);      //加些延时
  174. ……………………

  175. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png
所有资料51hei提供下载:
QC12864液晶(ST7920芯片)-画图.rar (1.11 MB, 下载次数: 117)

评分

参与人数 3黑币 +120 收起 理由
xiaoyuxinke + 15 很给力!
furukawa_nagisa + 5 很给力!
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:330548 发表于 2018-5-15 16:28 | 显示全部楼层
很详细,非常感谢。
回复

使用道具 举报

ID:555112 发表于 2019-10-22 15:11 | 显示全部楼层
很有用
回复

使用道具 举报

ID:267707 发表于 2022-1-5 19:43 | 显示全部楼层
什么仿真软件——————
回复

使用道具 举报

ID:61140 发表于 2022-6-13 21:28 | 显示全部楼层
图片什么软件画的,好漂亮
回复

使用道具 举报

ID:398219 发表于 2022-9-29 08:55 | 显示全部楼层
额,我下载后用不起,屏幕显示乱码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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