找回密码
 立即注册

QQ登录

只需一步,快速开始

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

JLX12832G cog 128x32 28pin单片机驱动程序源码

[复制链接]
ID:307026 发表于 2018-4-12 23:26 | 显示全部楼层 |阅读模式
JLX12832G-037 使用说明书
单片机源程序如下:
  1. /* JLX12832G-037-P-FOG 测试程序****/
  2. /* LCD 驱动 IC:ST7567

  3. /* 该程序显示 2 行中文如下:*/
  4. /* 全套液晶解决方案*/
  5. /* 质量取胜创建口碑*/

  6. //#include <reg51.H>
  7. //#include <intrins.h>

  8. //--------------------------------------------------------  
  9. #define lcd_cs1 10  //接口定义,CS:片选
  10. #define lcd_reset 9  //接口定义,RESET:复位  
  11. #define lcd_rs  11  //接口定义,RS:命令/数据寄存器选择。也叫"A0",或“CD”  
  12. #define lcd_sid 12  //接口定义,SID 即 SDA:串行数据  
  13. #define lcd_sclk 13  //接口定义,sclk:串行时钟  
  14. //-------------------------------------------------------  




  15. #define uchar unsigned char  
  16. #define uint unsigned int
  17. #define ulong unsigned long
  18. #define uchar unsigned char  
  19. #define uint unsigned int
  20. #define ulong unsigned long

  21. void displaygraphic(char *dp);

  22. uchar jiong1[]={/*--  文字:  囧  --*/
  23. /*--  宋体 12;  此字体下对应的点阵为:宽 x 高=16x16   --*/
  24. 0x00,0xFE,0x82,0x42,0xA2,0x9E,0x8A,0x82,0x86,0x8A,0xB2,0x62,0x02,0xFE,0x00,0x00,
  25. 0x00,0x7F,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x7F,0x00,0x00};

  26. uchar lei1[]={/*--  文字:  畾  --*/
  27. /*--  宋体 12;  此字体下对应的点阵为:宽 x 高=16x16   --*/
  28. 0x80,0x80,0x80,0xBF,0xA5,0xA5,0xA5,0x3F,0xA5,0xA5,0xA5,0xBF,0x80,0x80,0x80,0x00,
  29. 0x7F,0x24,0x24,0x3F,0x24,0x24,0x7F,0x00,0x7F,0x24,0x24,0x3F,0x24,0x24,0x7F,0x00};

  30. //写命令到 LCD 模块  
  31. void transfer_command(int data1)     
  32. {  
  33. char i;  
  34. digitalWrite(lcd_cs1,LOW);   //cs1=0,片选清零才可以传送命令或数据  
  35. digitalWrite(lcd_rs,LOW);   //rs=0:表示以下发送 1 个字节的命令  
  36. for(i=0;i<8;i++)  
  37. {  
  38.   digitalWrite(lcd_sclk,LOW);  
  39.   if(data1&0x80) digitalWrite(lcd_sid,HIGH);  
  40.   else digitalWrite(lcd_sid,LOW);  
  41.   digitalWrite(lcd_sclk,HIGH);
  42.    data1<<=1;  
  43. }  
  44. digitalWrite(lcd_cs1,HIGH);   //cs1=1,当不用传数据给液晶屏时片选尽量置高,以免接收到一些干扰信号
  45. }  
  46. //写数据到 LCD 模块  
  47. void transfer_data(int data1)  
  48. {  
  49. char i;  
  50. digitalWrite(lcd_cs1,LOW);   //cs1=0,片选清零才可以传送命令或数据  
  51. digitalWrite(lcd_rs,HIGH);   //rs=0:表示以下发送 1 个字节的数据  
  52. for(i=0;i<8;i++)  
  53. {  
  54.   digitalWrite(lcd_sclk,LOW);  
  55.   if(data1&0x80) digitalWrite(lcd_sid,HIGH);  
  56.   else digitalWrite(lcd_sid,LOW);  
  57.   digitalWrite(lcd_sclk,HIGH);  
  58.    data1<<=1;  
  59. }  
  60. digitalWrite(lcd_cs1,HIGH);      //cs1=1,当不用传数据给液晶屏时片选尽量置高,以免接收到一些干扰信号
  61. }



  62. /*延时*/
  63. void delay(int i)               
  64. {
  65. int j,k;
  66. for(j=0;j<i;j++)
  67. for(k=0;k<500;k++);
  68. }


  69. /*等待一个按键,我的主板是用 P2.0 与 GND 之间接一个按键
  70. void waitkey()
  71. {
  72. repeat:
  73.    if (P2&0x01) goto repeat;
  74. else delay(6);
  75. if (P2&0x01) goto repeat;
  76. else
  77. delay(40);
  78. }
  79. */
  80. void lcd_address(int page,int column)
  81. {

  82. column=column;
  83. transfer_command(0xb0+page-1);   /*设置页地址*/
  84. transfer_command(0x10+(column>>4&0x0f)); /*设置列地址的高 4 位*/
  85. transfer_command(column&0x0f); /*设置列地址的低 4 位*/
  86. }
  87. /*显示 16x16 点阵图像、汉字、生僻字或 16x16 点阵的其他图标*/
  88. void display_graphic_16x16(uint page,uint column,uchar *dp)
  89. {
  90. uint i,j;
  91. digitalWrite(lcd_cs1,LOW);
  92. for(j=0;j<2;j++)
  93. {
  94.   lcd_address(page,column);
  95.   for (i=0;i<16;i++)
  96.   {  
  97.    transfer_data(*dp);     /*写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1*/
  98.    dp++;
  99.   }
  100.   page++;
  101. }
  102. digitalWrite(lcd_cs1,HIGH);
  103. }

  104. /*显示 5*7 点阵图像、ASCII, 或 5x7 点阵的自造字符、其他图标*/
  105. void display_graphic_5x7(uint page,uchar column,uchar *dp)
  106. {
  107. uint col_cnt;
  108. digitalWrite(lcd_cs1,LOW);  
  109. lcd_address(page,column);
  110. for (col_cnt=0;col_cnt<8;col_cnt++)
  111. {  
  112.   transfer_data(*dp);
  113.   dp++;
  114. }
  115. digitalWrite(lcd_cs1,HIGH);
  116. }


  117. /*显示 8x16 点阵图像、ASCII, 或 8x16 点阵的自造字符、其他图标*/
  118. void display_graphic_8x16(uint page,uchar column,uchar *dp)
  119. {
  120. uint i,j;
  121. digitalWrite(lcd_cs1,LOW);  
  122. for(j=0;j<2;j++)
  123. {
  124.   lcd_address(page,column);
  125.   for (i=0;i<8;i++)
  126.   {  
  127.    transfer_data(*dp);     /*写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1*/
  128.    dp++;
  129.   }
  130.   page++;
  131. }
  132. digitalWrite(lcd_cs1,HIGH);
  133. }



  134. //==================display a piture of 128*64 dots================
  135. void displaygraphic(char *dp)
  136. {
  137.         int i,j;
  138.         for(i=0;i<4;i++)
  139.         {
  140.         digitalWrite(lcd_cs1,LOW);
  141.   transfer_command(0xb0+i);   //set page address,
  142.   transfer_command(0x10);
  143.   transfer_command(0x00);
  144.   for(j=0;j<128;j++)
  145.   {
  146.          transfer_data(*dp);     
  147.    dp++;   
  148.   }
  149.           }
  150.    
  151. }


  152. char graphic1[]={
  153. /*--  调入了一幅图像:D:\Backup\我的文档\图片\G-037.bmp  --*/
  154. /*--  宽度 x 高度=128x32  --*/
  155. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x2A,0x2A,0x2A,
  156. 0x2A,0x2A,0x2A,0x7E,0x00,0x00,0x00,0x00,0x02,0xFE,0x92,0x92,0x92,0xFE,0x12,0x11,
  157. 0x12,0x1C,0xF0,0x18,0x17,0x12,0x10,0x00,0x20,0x21,0x2E,0xE4,0x00,0x42,0x42,0xFE,
  158. 0x42,0x42,0x42,0x02,0xFE,0x00,0x00,0x00,0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,
  159. 0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xE2,
  160. 0x12,0x0A,0x06,0x02,0x00,0x80,0x00,0x00,0x00,0x00,0x80,0x40,0x30,0x0E,0x84,0x00,
  161. 0x00,0x0E,0x10,0x60,0xC0,0x80,0x80,0x00,0x00,0x10,0x92,0x92,0x92,0x92,0x92,0x92,
  162. 0x92,0x92,0x12,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  163. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00,
  164. 0x00,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00,0x08,0x1F,0x08,0x08,0x04,0xFF,0x05,0x81,
  165. 0x41,0x31,0x0F,0x11,0x21,0xC1,0x41,0x00,0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x7F,
  166. 0x00,0x00,0x00,0x00,0x3F,0x40,0x38,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,
  167. 0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00,0x01,0x01,0x01,0x01,0x01,0x41,0x81,0x7F,
  168. 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x01,0x20,0x70,0x28,0x24,0x23,0x31,
  169. 0x10,0x10,0x14,0x78,0x30,0x01,0x00,0x00,0x00,0x00,0x1F,0x04,0x04,0x04,0x04,0x04,
  170. 0x04,0x0F,0x00,0x20,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  171. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,
  172. 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,
  173. 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,
  174. 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,
  175. 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,
  176. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
  177. 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,
  178. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  179. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,
  180. 0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,
  181. 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
  182. 0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
  183. 0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,
  184. 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
  185. 0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
  186. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  187. };

  188. //============initial
  189. void initial_lcd()
  190. {
  191.     digitalWrite(lcd_cs1,LOW);
  192.     digitalWrite(lcd_reset,LOW);                 //Reset the chip when reset=0  
  193.     delay(20);
  194.     digitalWrite(lcd_reset,HIGH);
  195. transfer_command(0xe2);  /*软复位*/
  196. transfer_command(0x2c);  /*升压步聚 1*/
  197. delay(5);  
  198. transfer_command(0x2e);  /*升压步聚 2*/
  199. delay(5);
  200. transfer_command(0x2f);  /*升压步聚 3*/
  201. delay(5);
  202. transfer_command(0x22);  /*粗调对比度,可设置范围 20~27*/
  203. transfer_command(0x81);  /*微调对比度*/
  204. transfer_command(0x1b);  /*微调对比度的值,可设置范围 0~63*/
  205. transfer_command(0xa2);  /*1/9 偏压比(bias)*/
  206. transfer_command(0xc8);  /*行扫描顺序:从上到下*/
  207. transfer_command(0xa0);  /*列扫描顺序:从左到右*/
  208. transfer_command(0x40);  /*起始行:从第一行开始*/
  209. transfer_command(0xaf);  /*开显示*/
  210.     digitalWrite(lcd_cs1,HIGH);
  211. }

  212. //===============clear all dot martrics=============
  213. void clear_screen()
  214. {
  215. unsigned char i,j;
  216.         
  217.   for(i=0;i<4;i++)
  218.         {
  219.         digitalWrite(lcd_cs1,LOW);
  220.   transfer_command(0xb0+i);
  221.   transfer_command(0x10);
  222.   transfer_command(0x00);
  223.   for(j=0;j<132;j++)
  224.   {
  225.           transfer_data(0x00);
  226.   }
  227.          }
  228. }
  229. //===============main program===================
  230. void setup()
  231. {
  232.   pinMode(lcd_cs1,OUTPUT);
  233.   pinMode(lcd_reset,OUTPUT);
  234.   pinMode(lcd_rs,OUTPUT);
  235.   pinMode(lcd_sid,OUTPUT);
  236.   pinMode(lcd_sclk,OUTPUT);      
  237. //  int i,j,k;
  238. digitalWrite(lcd_cs1,LOW);
  239. initial_lcd();
  240.         while(1)
  241.         {
  242.    
  243.   clear_screen();    //clear all dots   
  244.          displaygraphic(graphic1);  //display a picture of 128*64 dots         
  245.   //waitkey();
  246.      
  247.     }
  248. }


复制代码

所有资料51hei提供下载:
st7567_SPI.zip (6.86 KB, 下载次数: 24)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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