找回密码
 立即注册

QQ登录

只需一步,快速开始

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

JLX6464G-720-PN 64*64点阵lcd单片机驱动程序 st7567

[复制链接]
跳转到指定楼层
楼主
ID:301316 发表于 2018-4-9 19:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
买了块64X64的lcd,ic是st7567

单片机源程序如下:
  1. /* 液晶演示程序JLX6464G-720,串行接口!
  2. 驱动IC 是:ST7567
  3. */
  4. #include <reg52.H>
  5. #include <intrins.h>
  6. #include <Ctype.h>
  7. //=============接口定义======================
  8. sbit key=P2^0;
  9. sbit cs1=P1^1;
  10. sbit reset=P1^0;
  11. sbit rs=P3^0;
  12. sbit sclk=P3^1;
  13. sbit sid=P3^2;
  14. //==========================================
  15. #define uchar unsigned char
  16. #define uint unsigned int
  17. #define ulong unsigned long
  18. void delay(int i);
  19. void delay_us(int i);
  20. char code graphic1[];
  21. char code graphic2[];
  22. char code graphic3[];
  23. uchar code ascii_table_8x16[95][16];
  24. uchar code ascii_table_5x7[95][5];
  25. uchar code cheng1[]={
  26. /*-- 文字: 成 --*/
  27. /*-- 宋体23; 此字体下对应的点阵为:宽x 高=31x31 --*/
  28.                 /*-- 高度不是 8 的倍数,现调整为:宽度x 高度=32x32 --*/
  29. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,
  30. 0xFC,0xFC,0x88,0x00,0x00,0x1C,0x78,0xF0,0xE0,0x00,0x80,0x80,0x00,0x00,0x00,0x00,
  31. 0x00,0x00,0x00,0x00,0xFF,0xFF,0x83,0x83,0x83,0x83,0x83,0x83,0xC3,0xC3,0x03,0x1F,
  32. 0xFF,0xFF,0x83,0x03,0x03,0x03,0xC3,0xF3,0xF3,0x63,0x03,0x03,0x00,0x00,0x00,0x00,
  33. 0x00,0x00,0xFC,0xFF,0x3F,0x00,0x80,0x00,0x00,0x80,0xFF,0xFF,0x03,0x00,0x00,0x03,
  34. 0x9F,0xFF,0xF8,0xF8,0xBE,0x1F,0x07,0x01,0x00,0x00,0xE0,0x20,0x00,0x00,0x20,0x38,
  35. 0x1F,0x07,0x01,0x00,0x00,0x01,0x01,0x07,0x07,0x23,0x31,0x18,0x0C,0x0E,0x07,0x03,
  36. 0x01,0x01,0x01,0x03,0x07,0x0F,0x0E,0x1C,0x1F,0x3F,0x30,0x00,0x00,0x00,0x00,0x00};
  37. uchar code gong1[]={
  38. /*-- 文字: 功 --*/
  39. /*-- 宋体23; 此字体下对应的点阵为:宽x 高=31x31 --*/
  40. /*-- 高度不是8 的倍数,现调整为:宽度x 高度=32x32 --*/
  41. 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0xC0,0x00,
  42. 0x00,0x00,0x00,0xFE,0xFC,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  43. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x0C,0x04,0x04,
  44. 0x04,0x84,0xFF,0xFF,0x04,0x04,0x04,0x04,0x04,0xFE,0xFE,0x04,0x00,0x00,0x00,0x00,
  45. 0xC0,0xC0,0xC0,0xC0,0xE0,0x60,0x7F,0x3F,0x30,0x30,0x10,0x18,0x18,0x88,0xC0,0xF8,
  46. 0x7F,0x1F,0x01,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,
  47. 0x01,0x00,0x00,0x00,0x00,0x20,0x20,0x30,0x18,0x0C,0x0C,0x07,0x03,0x01,0x00,0x04,
  48. 0x04,0x0C,0x0C,0x1C,0x38,0x3C,0x1F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  49. uchar code zhuang1[]={
  50. /*-- 文字: 状 --*/
  51. /*-- 宋体12; 此字体下对应的点阵为:宽x 高=16x16 --*/
  52. 0x08,0x30,0x00,0xFF,0x20,0x20,0x20,0x20,0xFF,0x20,0xE1,0x26,0x2C,0x20,0x20,0x00,
  53. 0x04,0x02,0x01,0xFF,0x40,0x20,0x18,0x07,0x00,0x00,0x03,0x0C,0x30,0x60,0x20,0x00};
  54. uchar code tai1[]={
  55. /*-- 文字: 态 --*/
  56. /*-- 宋体12; 此字体下对应的点阵为:宽x 高=16x16 --*/
  57. 0x00,0x04,0x04,0x04,0x84,0x44,0x34,0x4F,0x94,0x24,0x44,0x84,0x84,0x04,0x00,0x00,
  58. 0x00,0x60,0x39,0x01,0x00,0x3C,0x40,0x42,0x4C,0x40,0x40,0x70,0x04,0x09,0x31,0x00};
  59. uchar code shi1[]={
  60. /*-- 文字: 使 --*/
  61. /*-- 宋体12; 此字体下对应的点阵为:宽x 高=16x16 --*/
  62. 0x40,0x20,0xF0,0x1C,0x07,0xF2,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xF4,0x04,0x00,
  63. 0x00,0x00,0x7F,0x00,0x40,0x41,0x22,0x14,0x0C,0x13,0x10,0x30,0x20,0x61,0x20,0x00};
  64. uchar code yong1[]={
  65. /*-- 文字: 用 --*/
  66. /*-- 宋体12; 此字体下对应的点阵为:宽x 高=16x16 --*/
  67. 0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
  68. 0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x42,0x82,0x7F,0x00,0x00};
  69.         uchar code mao_hao[]={
  70. /*-- 文字: : (冒号) --*/
  71. /*-- 宋体12; 此字体下对应的点阵为:宽x 高=8x16 --*/
  72. 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00};
  73. char code num0[]={
  74. /*-- 文字: 0 --*/
  75. /*-- 宋体12; 此字体下对应的点阵为:宽x 高=8x16 --*/
  76. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00
  77. };
  78. char code num1[]={
  79. /*-- 文字: 1 --*/
  80. /*-- 宋体12; 此字体下对应的点阵为:宽x 高=8x16 --*/
  81. 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00
  82. };
  83. char code num2[]={
  84. /*-- 文字: 2 --*/
  85. /*-- 宋体12; 此字体下对应的点阵为:宽x 高=8x16 --*/
  86. 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00
  87. };
  88. char code num3[]={
  89. /*-- 文字: 3 --*/
  90. /*-- 宋体12; 此字体下对应的点阵为:宽x 高=8x16 --*/
  91. 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00
  92. };
  93. char code num4[]={
  94. /*-- 文字: 4 --*/
  95. /*-- 宋体12; 此字体下对应的点阵为:宽x 高=8x16 --*/
  96. 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00
  97. };
  98. char code num5[]={
  99. /*-- 文字: 5 --*/
  100. /*-- 宋体12; 此字体下对应的点阵为:宽x 高=8x16 --*/
  101. 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00
  102. };
  103. char code num6[]={
  104. /*-- 文字: 6 --*/
  105. /*-- 宋体12; 此字体下对应的点阵为:宽x 高=8x16 --*/
  106. 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00
  107. };
  108. char code num7[]={
  109. /*-- 文字: 7 --*/
  110. /*-- 宋体12; 此字体下对应的点阵为:宽x 高=8x16 --*/
  111.         0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00
  112. };
  113. char code num8[]={
  114. /*-- 文字: 8 --*/
  115. /*-- 宋体12; 此字体下对应的点阵为:宽x 高=8x16 --*/
  116. 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00
  117. };
  118. char code num9[]={
  119. /*-- 文字: 9 --*/
  120. /*-- 宋体12; 此字体下对应的点阵为:宽x 高=8x16 --*/
  121. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00
  122. };
  123. /*写指令到LCD 模块*/
  124. void transfer_command(int data1)
  125. {
  126. char i;
  127. cs1=0;
  128. rs=0;
  129. for(i=0;i<8;i++)
  130. {
  131. sclk=0;
  132. // delay_us(2);
  133. if(data1&0x80) sid=1;
  134. else sid=0;
  135. sclk=1;
  136. delay_us(2);
  137. data1=data1<<=1;
  138. }
  139. cs1=1;
  140. }
  141. /*写数据到LCD 模块*/
  142. void transfer_data(int data1)
  143. {
  144. char i;
  145. cs1=0;
  146. rs=1;
  147. for(i=0;i<8;i++)
  148. {
  149. sclk=0;
  150. // delay_us(1);
  151. if(data1&0x80) sid=1;
  152. else sid=0;
  153. sclk=1;
  154. // delay_us(1);
  155. data1=data1<<=1;
  156. }
  157. cs1=1;
  158. }
  159. /*延时*/
  160. void delay(int i)
  161. {
  162. int j,k;
  163. for(j=0;j<i;j++)
  164. for(k=0;k<110;k++);
  165. }
  166. /*延时*/
  167. void delay_us(int i)
  168. {
  169. int j,k;
  170. for(j=0;j<i;j++)
  171. for(k=0;k<1;k++);
  172. }
  173. void waitkey()
  174. {
  175. repeat:
  176. if(key==1) goto repeat;
  177. else delay(3500);
  178. }
  179. /*LCD 模块初始化*/
  180. void initial_lcd()
  181. {
  182. reset=0; /*低电平复位*/
  183. delay(100);
  184. reset=1; /*复位完毕*/
  185. delay(100);
  186. transfer_command(0xe2); /*软复位*/
  187. delay(5);
  188. transfer_command(0xae); /*开显示*/
  189. transfer_command(0x2c); /*升压步聚1*/
  190. delay(5);
  191. transfer_command(0x2e); /*升压步聚2*/
  192. delay(5);
  193. transfer_command(0x2f); /*升压步聚3*/
  194. delay(5);
  195. transfer_command(0x24); /*粗调对比度,可设置范围0x20~0x27*/
  196. transfer_command(0x81); /*微调对比度*/
  197.           transfer_command(0x1a); /*微调对比度的值,可设置范围0x00~0x3f*/
  198. transfer_command(0xa2); /*1/9 偏压比(bias)*/
  199. transfer_command(0xc8); /*行扫描顺序:从上到下*/
  200. transfer_command(0xa0); /*列扫描顺序:从左到右*/
  201. transfer_command(0x40); /*起始行:第一行开始*/
  202. transfer_command(0xaf); /*开显示*/
  203. }
  204. void lcd_address(uchar page,uchar column)
  205. {
  206. column=column-1; //我们平常所说的第1 列,在LCD 驱动IC 里是第0 列。所以在这里减去1.
  207. page=page-1;
  208. transfer_command(0xb0+page); //设置页地址。每页是8 行。一个画面的64 行被分成8 个页。我们平常所说的第1 页,在LCD*/
  209. transfer_command(((column>>4)&0x0f)+0x10); //设置列地址的高4 位
  210. transfer_command(column&0x0f); //设置列地址的低4 位
  211. }
  212. /*全屏清屏*/
  213. void clear_screen()
  214. {
  215. unsigned char i,j;
  216. for(i=0;i<9;i++)
  217. {
  218. lcd_address(1+i,1);
  219. for(j=0;j<132;j++)
  220. {
  221. transfer_data(0x00);
  222. }
  223. }
  224. }
  225. /*显示32x32 点阵图像、汉字、生僻字或32x32 点阵的其他图标*/
  226. void display_graphic_32x32(uchar page,uchar column,uchar *dp)
  227. {
  228. uchar i,j;
  229. for(j=0;j<4;j++)
  230. {
  231. lcd_address(page+j,column);
  232. for (i=0;i<31;i++)
  233. {
  234. transfer_data(*dp); /*写数据到LCD,每写完一个8 位的数据后列地址自动加1*/
  235. dp++;
  236. }
  237. }
  238. }
  239.   /*显示16x16 点阵图像、汉字、生僻字或16x16 点阵的其他图标*/
  240. void display_graphic_16x16(uchar page,uchar column,uchar reverse,uchar *dp)
  241. {
  242. uchar i,j;
  243. for(j=0;j<2;j++)
  244. {
  245. lcd_address(page+j,column);
  246. for (i=0;i<16;i++)
  247. {
  248. if(reverse==1)
  249. {
  250. transfer_data(*dp); /*写数据到LCD,每写完一个8 位的数据后列地址自动加1*/
  251. }
  252. else
  253. transfer_data(~*dp);
  254. dp++;
  255. }
  256. }
  257. }
  258. /*显示8x16 点阵图像、ASCII, 或8x16 点阵的自造字符、其他图标*/
  259. void display_graphic_8x16(uchar page,uchar column,uchar *dp)
  260. {
  261. uchar i,j;
  262. for(j=0;j<2;j++)
  263. {
  264. lcd_address(page+j,column);
  265. for (i=0;i<8;i++)
  266. {
  267. transfer_data(*dp); /*写数据到LCD,每写完一个8 位的数据后列地址自动加1*/
  268. dp++;
  269. }
  270. }
  271. }
  272. void display_string_8x16(uint page,uint column,uchar *text)
  273. {
  274. uint i=0,j,k,n;
  275. while(text[i]>0x00)
  276. {
  277. if((text[i]>=0x20)&&(text[i]<=0x7e))
  278. {
  279. j=text[i]-0x20;
  280. for(n=0;n<2;n++)                                                                       
  281. {
  282. lcd_address(page+n,column);
  283. for(k=0;k<8;k++)
  284. {
  285. transfer_data(ascii_table_8x16[j][k+8*n]);/*显示5x7的ASCII字到LCD 上,y 为页地址,x 为列地址,最后为数据*/
  286. }
  287. }
  288. i++;
  289. column+=8;
  290. }
  291. else
  292. i++;
  293. }
  294. }
  295. void display_string_5x7(uint page,uint column,uchar *text)
  296. {
  297. uint i=0,j,k;
  298. while(text[i]>0x00)
  299. {
  300. if((text[i]>=0x20)&&(text[i]<0x7e))
  301. {
  302. j=text[i]-0x20;
  303. lcd_address(page,column);
  304. for(k=0;k<5;k++)
  305. {
  306. transfer_data(ascii_table_5x7[j][k]);/*显示5x7的ASCII字到LCD上,y为页地址,x 为列地址,最后为数据*/
  307. }
  308. i++;
  309. column+=6;
  310. }
  311. else
  312. i++;
  313. }
  314. }
  315. //==================display a piture of 128*64 dots================
  316. void disp_grap(uchar page,uchar column,uchar *dp)
  317. {
  318. int i,j;
  319. for(i=0;i<8;i++)
  320. {
  321. lcd_address(page+i,column);
  322. for(j=0;j<64;j++)
  323. {
  324. transfer_data(*dp);
  325. dp++;
  326. }
  327.   }
  328. }
  329. void main(void)
  330. {
  331. while(1)
  332. {
  333. initial_lcd();
  334. clear_screen();
  335. disp_grap(1,1,graphic2); //display a picture of 128*64 dots
  336. waitkey();
  337. disp_grap(1,1,graphic3); //display a picture of 128*64 dots
  338. waitkey();
  339. clear_screen(); //clear all dots
  340. display_graphic_32x32(3,32*0,cheng1); /*在第1 页,第49 列显示单个汉字"成"*/
  341. display_graphic_32x32(3,32*1,gong1); /*在第1 页,第49 列显示单个汉字"功"*/
  342. waitkey();
  343. clear_screen();
  344. display_graphic_16x16(1,1,0,zhuang1); /*在第5 页,第1 列显示单个汉字"状"*/
  345. display_graphic_16x16(1,(1+16),0,tai1); /*在第5 页,第17 列显示单个汉字"态"*/
  346. display_graphic_8x16(1,(1+16*2),mao_hao); /*在第5 页,第25 列显示单个字符":"*/
  347. display_graphic_16x16(4,(1+16*1),1,shi1); /*在第5 页,第41 列显示单个汉字"使"*/
  348. display_graphic_16x16(4,(1+16*2),1,yong1); /*在第5 页,第49 列显示单个汉字"用"*/
  349. display_graphic_8x16(7,(24),num0); /*在第5 页,第89 列显示单个数字"0"*/
  350. display_graphic_8x16(7,(24+8*1),num0); /*在第5 页,第97 列显示单个数字"0"*/
  351. display_graphic_8x16(7,(24+8*2),mao_hao); /*在第5 页,第105 列显示单个字符":"*/
  352. display_graphic_8x16(7,(24+8*3),num0); /*在第5 页,第113 列显示单个数字"0"*/
  353. display_graphic_8x16(7,(24+8*4),num0); /*在第5 页,第121 列显示单个数字"0"*/
  354. waitkey();
  355. clear_screen();
  356. disp_grap(1,1,graphic1); //display a picture of 128*64 dots
  357. waitkey();
  358. }
  359. }
  360. char code graphic1[]={
  361. /*-- ???????:E:\?????\?????\JLX6464G-720.bmp --*/
  362. /*-- ??x??=64x64 --*/
  363. 0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFD,0x25,0x25,0x25,
  364. 0x25,0x25,0xFD,0x01,0x01,0x01,0x01,0x01,0x09,0xF9,0x49,0x49,0xF9,0x09,0x01,0x41,
  365. 0x45,0x59,0xC1,0x51,0x4D,0x41,0x01,0x01,0x01,0x01,0x09,0x31,0x01,0x09,0x09,0xF9,
  366. 0x09,0x09,0x09,0xF9,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,
  367. 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x24,0x24,0x25,0x25,0xFD,0x01,

  368. ……………………

  369. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
程序.rar (42.8 KB, 下载次数: 84)


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

使用道具 举报

沙发
ID:422479 发表于 2018-11-7 17:05 | 只看该作者
谢谢楼主。。。
回复

使用道具 举报

板凳
ID:43383 发表于 2020-5-28 09:52 | 只看该作者
谢谢楼主分享。。。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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