找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ST7571 JLX128*128液晶屏的STM32驱动程序 寄存器版和库函数版

  [复制链接]
跳转到指定楼层
楼主
ID:241423 发表于 2018-11-24 13:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
分享下JLX高性价比的液晶的驱动程序,这款是模拟IIC驱动的,操作很方便

单片机源程序如下:
  1. /*         液晶模块型号:JLX128128G-610-PN-IIC
  2.                 I2C接口
  3.            驱动IC是:ST7571
  4.                 //单片机:STM32F103RBT6
  5. */
  6. #include <stm32f10x_lib.h>
  7. #include <sys.h>
  8. #include <delay.h>
  9. #include <JLX128128G_610_PN_IIC.h>
  10. #include <chinese_code.h>
  11. #include <image.h>

  12. #define uchar unsigned char
  13. #define uint unsigned int
  14. #define ulong unsigned long

  15. //等待按键,3个按键,有任何一个按键按下都可以进入下一步
  16. void waitkey(void)
  17. {
  18.         repeat:
  19.                 if(key2==1&&key3==1&&key4==1)        goto repeat;
  20.                 else                delay_ms(600);
  21. }

  22. void transfer(int data1)
  23. {
  24.         int i;
  25.         for(i=0;i<8;i++)
  26.    {
  27.                 LCD_SCL=0;
  28.                 if(data1&0x80) LCD_SDA=1;
  29.                 else LCD_SDA=0;
  30.                 LCD_SCL=1;
  31.                  LCD_SCL=0;
  32.                  data1=data1<<1;
  33.    }
  34.                 LCD_SDA=0;
  35.                 LCD_SCL=1;
  36.                 LCD_SCL=0;
  37. }

  38. void start_flag()
  39. {
  40.         LCD_SCL=1;                /*START FLAG*/
  41.         LCD_SDA=1;                /*START FLAG*/
  42.         LCD_SDA=0;                /*START FLAG*/
  43. }


  44. void stop_flag()
  45. {
  46.         LCD_SCL=1;                /*STOP FLAG*/
  47.         LCD_SDA=0;                /*STOP FLAG*/               
  48.         LCD_SDA=1;                /*STOP FLAG*/
  49. }

  50. //写命令到液晶显示模块
  51. void transfer_command(uchar com)   
  52. {
  53.         start_flag();
  54.         transfer(0x78);
  55.         transfer(0x80);
  56.         transfer(com);
  57.         stop_flag();
  58. }

  59. //写数据到液晶显示模块
  60. void transfer_data(uchar dat)
  61. {
  62.         start_flag();
  63.         transfer(0x78);
  64.         transfer(0xC0);
  65.         transfer(dat);
  66.         stop_flag();
  67. }

  68. void initial_lcd()
  69. {
  70.   LCD_RST=0;
  71.         delay_ms(1);
  72.         LCD_RST=1;
  73.         delay_ms(10);        
  74.         transfer_command(0x2c);
  75.         delay_ms(200);
  76.         transfer_command(0x2e);
  77.         delay_ms(200);
  78.         transfer_command(0x2f);
  79.         delay_ms(10);
  80.         
  81.         transfer_command(0xae);                //显示关
  82.         transfer_command(0x38);                //模式设置
  83.         transfer_command(0xb8);                //85HZ
  84.         transfer_command(0xc8);                //行扫描顺序        
  85.         transfer_command(0xa0);                //列扫描顺序
  86.         
  87.         transfer_command(0x44);                //Set initial COM0 register
  88.         transfer_command(0x00);
  89.         transfer_command(0x40);                //Set initial display line register
  90.         transfer_command(0x00);

  91.         transfer_command(0xab);
  92.         transfer_command(0x67);
  93.         transfer_command(0x27);                //粗调对比度,可设置范围0x20~0x27
  94.         transfer_command(0x81);                //微调对比度
  95.         transfer_command(0x28);                //微调对比度的值,可设置范围0x00~0x3f

  96.         transfer_command(0x56);                //0x56 1/11 bias
  97.         transfer_command(0xf3);
  98.         transfer_command(0x04);
  99.         transfer_command(0x93);
  100.         
  101.         transfer_command(0xaf);                //显示开
  102. }


  103. void lcd_address(uchar page,uchar column)
  104. {
  105.         column=column;
  106.         page=page-1;
  107.         transfer_command(0xb0+page);
  108.         transfer_command(((column>>4)&0x0f)+0x10);
  109.         transfer_command(column&0x0f);
  110. }

  111. void clear_screen()
  112. {        
  113.         uchar i,j;
  114.         for(j=0;j<16;j++)
  115.         {
  116.                 lcd_address(j+1,0);
  117.                 for(i=0;i<128;i++)
  118.                 {
  119.                         transfer_data(0x00);               
  120.                         transfer_data(0x00);
  121.                 }
  122.         }
  123. }


  124. //显示8x16的点阵的字符串,括号里的参数分别为(页,列,字符串指针)
  125. void display_string_8x16(u8 page,u8 column,u8*text)
  126. {
  127.         u8 i=0,j,k,n;

  128.         while(text[i]>0x00)
  129.         {
  130.                 if((text[i]>=0x20)&&(text[i]<=0x7e))
  131.                 {
  132.                         j=text[i]-0x20;
  133.                         for(n=0;n<2;n++)
  134.                         {
  135.                                 lcd_address(page+n,column);
  136.                                 for(k=0;k<8;k++)
  137.                                 {
  138.                                         transfer_data(ascii_table_8x16[j][k+8*n]);
  139.                                         transfer_data(ascii_table_8x16[j][k+8*n]);
  140.                                 }
  141.                         }
  142.                         i++;
  143.                         column+=8;
  144.                 }
  145.                 else
  146.                 i++;
  147.                
  148.                 if(column>127)
  149.                 {
  150.                         column=0;
  151.                         page+=2;
  152.                  }        
  153.         }        
  154. }

  155. //写入一组16x16点阵的汉字字符串(字符串表格中需含有此字)
  156. //括号里的参数:(页,列,汉字字符串)
  157. void display_string_16x16(u8 page,u8 column,u8 *text)
  158. {
  159.         u8 i,j,k;
  160.         u16 address;
  161.         j = 0;
  162.         while(text[j] != '\0')
  163.         {
  164.                 i=0;
  165.                 address=1;
  166.                 while(Chinese_text_16x16[i]> 0x7e )
  167.                 {
  168.                         if(Chinese_text_16x16[i] == text[j])
  169.                         {
  170.                                 if(Chinese_text_16x16[i+1] == text[j+1])
  171.                                 {
  172.                                         address = i*16;
  173.                                         break;
  174.                                 }
  175.                         }
  176.                         i +=2;
  177.                 }
  178.                 if(column>127)
  179.                 {
  180.                         column =0;
  181.                         page +=2;
  182.                 }
  183.                 if(address !=1)
  184.                 {
  185.                         for(k=0;k<2;k++)
  186.                         {
  187.                                 lcd_address(page+k,column);
  188.                                 for(i=0;i<16;i++)
  189.                                 {
  190.                                         transfer_data(Chinese_code_16x16[address]);
  191.                                         transfer_data(Chinese_code_16x16[address]);
  192.                                         address++;                                
  193.                                 }
  194.                         }
  195.                         j +=2;
  196.                 }
  197.                 else
  198.                 {
  199.                         for(k=0;k<2;k++)
  200.                         {
  201.                                 lcd_address(page+k,column);
  202.                                 for(i=0;i<16;i++)
  203.                                 {
  204.                                         transfer_data(0x00);
  205.                                         transfer_data(0x00);                                
  206.                                 }
  207.                         }
  208.                         j++;
  209.                 }
  210.                 column +=16;
  211.         }
  212. }

  213. //显示16x16点阵的汉字或者ASCII码8x16点阵的字符混合字符串
  214. //括号里的参数:(页,列,字符串)
  215. void display_string_8x16_16x16(u8 page,u8 column,u8 *text)
  216. {
  217.         u8 temp[3];
  218.         u16 i=0;
  219.         while(text[i] !='\0')
  220.         {
  221.                 if(text[i]>0x7e)
  222.                 {
  223.                         temp[0]=text[i];
  224.                         temp[1]=text[i+1];
  225.                         temp[2]='\0';                                                                                                                //汉字为两个字节
  226.                         display_string_16x16(page,column,temp); //显示汉字
  227.                         column +=16;
  228.                         i +=2;
  229.                         if(column>127)
  230.                         {
  231.                                 column =0;
  232.                                 page +=2;
  233.                         }
  234.                 }
  235.                 else
  236.                 {
  237.                         temp[0]=text[i];
  238.                         temp[1]='\0';                                                                                                                //字母占一个字节
  239.                         display_string_8x16(page,column,temp);  //显示字母
  240.                         column +=8;
  241.                         i++;
  242.                         if(column>127)
  243.                         {
  244.                                 column =0;
  245.                                 page +=2;
  246.                         }
  247.                 }
  248.         }
  249. }

  250. void display_32x32(u8 page,u8 column,u8 *dp)
  251. {
  252.         u8 i,j;
  253.         for(j=0;j<4;j++)
  254.         {
  255.                 lcd_address(page+j,column);
  256.                 for(i=0;i<32;i++)
  257.                 {
  258.                         transfer_data(*dp);
  259.                         transfer_data(*dp);
  260.                         dp++;
  261.                 }
  262.         }        
  263. }

  264. void display_graphic(u8 *dp)
  265. {
  266.         u8 i,j;
  267.         for(j=0;j<16;j++)
  268.         {
  269.                 lcd_address(j+1,0);
  270.                 for(i=0;i<128;i++)
  271.                 {
  272.                         transfer_data(*dp);
  273.                         transfer_data(*dp);
  274.                         dp++;        
  275.                 }
  276.         }
  277. }

  278. //==========主程序==========================================
  279. int main(void)
  280. {                                                                                                                                                
  281.         Stm32_Clock_Init(9);         //8MHZ*9倍频=72MHz
  282.         delay_init(72);                           //72MHz
  283.         MCU_Port_initial();
  284.         initial_lcd();
  285.         while(1)
  286.         {
  287.                 clear_screen();
  288.                 display_graphic(bmp2);
  289.                 waitkey();
  290.                 clear_screen();
  291.                 display_32x32(1,16,jing32);
  292.                 display_32x32(1,48,lian32);
  293.                 display_32x32(1,80,xun32);
  294.                 display_string_16x16(5,1,"深圳市晶联讯电子有限公司是集研发、生产、销售于一体的从事液晶显示屏及液晶显示模块的高科技公司。");
  295.                 waitkey();
  296.                 clear_screen();
  297.                 display_string_8x16(1,1,"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&()*+-,-./:;<=>?@[\]^_^{|}~0123456789ABCDFGHIJKLMNOPQRSTUVWXYZ");
  298.                 waitkey();
  299.                 clear_screen();
  300.                 display_string_8x16_16x16(1,1,"深圳市晶联讯电子 JLX128128G-610   128x128点阵   视区:59.4x59.4mm带16x16点阵中文 字库,或8x16或5x7点阵ASCII码,四灰度级显示功能。");
  301.                 waitkey();               
  302.         }
  303. }
复制代码

所有资料51hei提供下载:
128128改库函数版本.rar (304.32 KB, 下载次数: 168)
JLX128128G-610-PN-IIC-STM32.7z (148.29 KB, 下载次数: 116)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:148204 发表于 2020-1-12 13:24 | 只看该作者
下载试一下能不能点亮
回复

使用道具 举报

板凳
ID:589512 发表于 2020-2-20 15:56 | 只看该作者
下来看看能不能驱起来
回复

使用道具 举报

地板
ID:345352 发表于 2020-3-2 18:45 | 只看该作者
你好,我想问一下,显示内容的灰度是怎么设置的,初始已经设置成Gray-Scale mode了,说明书好像只说了灰度模式需要2个字节每8个像素,黑白模式只需1个字节
回复

使用道具 举报

5#
ID:844879 发表于 2020-11-17 15:18 | 只看该作者
正需要,下载参考下资源文件
回复

使用道具 举报

6#
ID:71233 发表于 2024-5-18 08:40 | 只看该作者
显示屏的对比度一般,灰度实在没有多大意义。
回复

使用道具 举报

7#
ID:166310 发表于 2024-7-26 10:51 | 只看该作者
谢谢楼主提供这么好的资料。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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