找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机程序 16灰阶LCM270X160分辨率FSTN液晶显示屏LCD,ST7586S驱动,6800接口

[复制链接]
ID:324463 发表于 2022-11-2 22:52 | 显示全部楼层 |阅读模式
16灰阶LCM 270X160分辨率FSTN液晶显示屏LCD,ST7586S驱动,6800接口,单块屏3.5英寸,7寸LCM单色屏,可以黑白,4灰阶,16灰阶

外形尺寸:170mmx62mm
玻璃尺寸:167mmx60mm
FPC软排线长度:23mm
单块玻璃尺寸:83.3mmx60mm
两块玻璃对角线尺寸:178mm

7寸LCM单色屏,FSTN屏,双屏显示,单块屏3.5英寸,3.5寸 LCD,270*160分辨率FSTN显示屏,ST7586S驱动,6800接口 10800个

LCD4310021001185001DED   ,D18110008,14966-LED-C-A173-20181106 ROHS
GWMS14966 CSM14966D CSM14966D(R)汕头超声液晶显示屏 LCD LCM
3.5寸液晶显示屏,270160 LCD 270X160 LCM 270*160显示屏 3.5英寸屏幕
270X160 高点阵,大尺寸液晶显示屏,双屏显示,单个屏幕3.5英寸,ST7586S,COG液晶模块 LCM LCD 单色屏 STN 6800接口
1.jpg

2.jpg

3.jpg

4.jpg

5.jpg

6.jpg

7.jpg

8.jpg

9.jpg

10.jpg

11.jpg

20.jpg

21.jpg

22.jpg

23.jpg

30.jpg

31.jpg

32.jpg

33.jpg

34.jpg

35.jpg

36.jpg

STM32单片机源程序如下:
  1. #include "S6B0724_i68.h"
  2. //#include <stdlib.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include "delay.h"
  6. #include "picture.h"
  7. #include "font5x8.h"

  8. #define LCD_WIDTH 270
  9. #define LCD_PAGE  20

  10. //#define LCD_PORT GPIOB

  11. #define CS1_CLR  GPIO_ResetBits(GPIOC, GPIO_Pin_6)
  12. #define CS1_SET  GPIO_SetBits(GPIOC, GPIO_Pin_6)

  13. #define DC1_CLR  GPIO_ResetBits(GPIOC, GPIO_Pin_7)
  14. #define DC1_SET  GPIO_SetBits(GPIOC, GPIO_Pin_7)

  15. #define RW1_CLR  GPIO_ResetBits(GPIOC, GPIO_Pin_8)
  16. #define RW1_SET  GPIO_SetBits(GPIOC, GPIO_Pin_8)

  17. #define EN1_CLR  GPIO_ResetBits(GPIOC, GPIO_Pin_9)
  18. #define EN1_SET  GPIO_SetBits(GPIOC, GPIO_Pin_9)

  19. #define RST1_CLR  GPIO_ResetBits(GPIOC, GPIO_Pin_10)
  20. #define RST1_SET  GPIO_SetBits(GPIOC, GPIO_Pin_10)

  21. #define CS2_CLR  GPIO_ResetBits(GPIOA, GPIO_Pin_2)
  22. #define CS2_SET  GPIO_SetBits(GPIOA, GPIO_Pin_2)

  23. #define DC2_CLR  GPIO_ResetBits(GPIOA, GPIO_Pin_4)
  24. #define DC2_SET  GPIO_SetBits(GPIOA, GPIO_Pin_4)

  25. #define RW2_CLR  GPIO_ResetBits(GPIOA, GPIO_Pin_5)
  26. #define RW2_SET  GPIO_SetBits(GPIOA, GPIO_Pin_5)

  27. #define EN2_CLR  GPIO_ResetBits(GPIOA, GPIO_Pin_6)
  28. #define EN2_SET  GPIO_SetBits(GPIOA, GPIO_Pin_6)

  29. #define RST2_CLR  GPIO_ResetBits(GPIOA, GPIO_Pin_3)
  30. #define RST2_SET  GPIO_SetBits(GPIOA, GPIO_Pin_3)

  31. uint8_t buffer[270*20];

  32. void lcd_gpio_config(void)
  33. {
  34.         GPIO_InitTypeDef GPIO_InitStructure;
  35.        
  36.         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE );
  37.     GPIO_PinRemapConfig( GPIO_Remap_SWJ_JTAGDisable, ENABLE );

  38.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  39.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  40.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;
  41.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  42.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
  43.         GPIO_Init(GPIOC, &GPIO_InitStructure);

  44.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  45.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  46. }

  47. void lcd_send_cmd1(unsigned int cmd)
  48. {
  49.         CS1_CLR;
  50.     DC1_CLR;
  51.     RW1_CLR;
  52.        
  53.     GPIOB->ODR= (GPIOB->ODR & 0xFF) | ((cmd & 0xFF) << 8);

  54.     EN1_SET;
  55.     EN1_CLR;
  56.         CS1_SET;
  57. }

  58. void lcd_send_data1(unsigned int dat)
  59. {
  60.         CS1_CLR;
  61.     DC1_SET;

  62.     RW1_CLR;
  63.        
  64.     GPIOB->ODR= (GPIOB->ODR & 0xFF) | ((dat & 0xFF) << 8);

  65.     EN1_SET;
  66.     EN1_CLR;
  67.         CS1_SET;
  68. }

  69. void lcd_reset1(void)
  70. {
  71.         RST1_CLR;
  72.         delay_ms(10);        //keep low, min 1ms
  73.         RST1_SET;
  74.         delay_ms(120);        //keep high, min 5ms
  75. }

  76. void lcd_send_cmd2(unsigned int cmd)
  77. {
  78.         CS2_CLR;
  79.     DC2_CLR;

  80.     RW2_CLR;
  81.        
  82.     GPIOB->ODR= (GPIOB->ODR & 0xFF00) | (cmd & 0xFF);

  83.     EN2_SET;
  84.     EN2_CLR;
  85.         CS2_SET;
  86. }

  87. void lcd_send_data2(unsigned int dat)
  88. {
  89.         CS2_CLR;
  90.     DC2_SET;

  91.     RW2_CLR;
  92.        
  93.     GPIOB->ODR= (GPIOB->ODR & 0xFF00) | (dat & 0xFF);

  94.     EN2_SET;
  95.     EN2_CLR;
  96.         CS2_SET;
  97. }

  98. void lcd_reset2(void)
  99. {
  100.         RST2_CLR;
  101.         delay_ms(10);        //keep low, min 1ms
  102.         RST2_SET;
  103.         delay_ms(120);        //keep high, min 5ms
  104. }

  105. void lcd_send_cmd(unsigned int cmd)
  106. {
  107.         lcd_send_cmd1(cmd);
  108.         lcd_send_cmd2(cmd);
  109. }

  110. void lcd_send_data(unsigned int dat)
  111. {
  112.         lcd_send_data1(dat);
  113.         lcd_send_data2(dat);
  114. }

  115. void lcd_reset(void)
  116. {
  117.         lcd_reset1(); lcd_reset2();
  118. }

  119. void lcd_init_registers(void)
  120. {
  121.         //lcd_send_cmd(0x01);        //soft reset
  122.         //delay_ms(120);

  123.         lcd_send_cmd(0x11);                //sleep out
  124.         lcd_send_cmd(0x28);                //display off
  125.         delay_ms(25);
  126.        
  127.         lcd_send_cmd(0xC0);
  128.         lcd_send_data(0x50);
  129.         lcd_send_data(0x01);
  130.        
  131.         lcd_send_cmd(0xC3);
  132.         lcd_send_data(0x00);
  133.        
  134.         lcd_send_cmd(0xC4);
  135.         lcd_send_data(0x07);
  136.        
  137.         lcd_send_cmd(0xD0);
  138.         lcd_send_data(0x1D);
  139.        
  140.         lcd_send_cmd(0xB3);
  141.         lcd_send_data(0x00);
  142.        
  143.         lcd_send_cmd(0xB5);
  144.         lcd_send_data(0x00);
  145.        
  146.         lcd_send_cmd(0x39);        //mono mode
  147.        
  148.         lcd_send_cmd(0x3A);
  149.         lcd_send_data(0x02);
  150.        
  151.         lcd_send_cmd(0x36);
  152.         lcd_send_data(0x00);        // COM:C159->C0   SEG: SEG383->SEG0
  153.        
  154.         lcd_send_cmd(0xB1);
  155.         lcd_send_data(0x00);
  156.        
  157.         lcd_send_cmd(0xB0);        //duty
  158.         lcd_send_data(0x9F);

  159.         lcd_send_cmd(0x20);

  160.         lcd_send_cmd(0x2A); // Column Address Setting
  161.         lcd_send_data(0x00); // COL0 -> COL127
  162.         lcd_send_data(0x13); //
  163.         lcd_send_data(0x00); //
  164.         lcd_send_data(0x6C); // 80*3=240 pixels

  165.         lcd_send_cmd(0x2B); // Row Address Setting
  166.         lcd_send_data(0x00); // ROW0 -> ROW159
  167.         lcd_send_data(0x00); //
  168.         lcd_send_data(0x00); //
  169.         lcd_send_data(0x9F); // 160 pixels
  170.   
  171.         lcd_send_cmd(0x29);
  172. }

  173. uint8_t offsets[] = {6, 3, 0};

  174. void lcd_update(void)
  175. {
  176.         lcd_send_cmd(0x2A); // Column Address Setting
  177.         lcd_send_data(0x00);
  178.         lcd_send_data(0x13);
  179.         lcd_send_data(0x00);
  180.         lcd_send_data(0x6C);
  181.        
  182.         lcd_send_cmd(0x2B); // Row Address Setting
  183.         lcd_send_data(0x00);
  184.         lcd_send_data(0x00);
  185.         lcd_send_data(0x00);
  186.         lcd_send_data(0x9F);
  187.        
  188.         lcd_send_cmd(0x2C);
  189.        
  190.         uint8_t temp;
  191.        
  192.         for(uint16_t j=0; j< 160; j++)
  193.         {
  194.                 for(uint16_t i=0; i< 90; i++)
  195.                 {
  196.                         temp = 0x00;
  197.                         for(uint16_t z=0; z< 3; z++)
  198.                         {
  199.                                 temp |= ((buffer[j/8 * 270 + i*3 + z] >> (j % 8) & 0x01) ? 0x03 : 0x00) << offsets[z];
  200.                         }
  201.                        
  202.                         lcd_send_data(temp);
  203.                 }
  204.         }
  205. }

  206. void lcd_write_buffer(int x, int p, int cx, int pc, const uint8_t *data)
  207. {               
  208.         for(int j=0; j< pc; j++)
  209.         {
  210.                 for(int i = 0; i< cx; i++)
  211.                 {
  212.                         buffer[(p + j)*270 + x + i] = data[j*cx + i];
  213.                 }
  214.         }
  215. }

  216. void lcd_set_buffer(int x, int p, uint8_t data)
  217. {
  218.         buffer[p*270 + x] = data;
  219. }

  220. void lcd_init(void)
  221. {
  222.     lcd_gpio_config();
  223.     lcd_reset();
  224.         lcd_init_registers();
  225.        
  226.         memset(buffer, 0x00, sizeof buffer);
  227. }

  228. void lcd_graphic_test(void)
  229. {
  230.         int i, j;
  231.        
  232.         //display chess pattern
  233.         for(j=0; j< LCD_PAGE; j++)
  234.         {
  235.                 for(i=0; i< LCD_WIDTH; i++)
  236.                 {
  237.                         lcd_set_buffer(i, j, (i/4)%2 ? 0xF0 : 0x0F);
  238.                 }
  239.         }
  240.         lcd_update();
  241.         delay_ms(1000);
  242.        
  243.         //all black.
  244.         for(j=0; j< LCD_PAGE; j++)
  245.         {
  246.                 for(i=0; i< LCD_WIDTH; i++)
  247.                 {
  248.                         lcd_set_buffer(i, j, 0xFF);
  249.                 }
  250.         }
  251.         lcd_update();
  252.         delay_ms(1000);
  253.        
  254.         //all white.
  255.         for(j=0; j< LCD_PAGE; j++)
  256.         {
  257.                 for(i=0; i< LCD_WIDTH; i++)
  258.                 {
  259.                         lcd_set_buffer(i, j, 0x00);
  260.                 }
  261.         }
  262.         lcd_update();
  263.         delay_ms(1000);

  264.         int nCharIndex = 0;
  265.         for(int i=0; i< 20; i++)
  266.         {
  267.                 for(int j=0; j< 270; j++)
  268.                 {
  269.                         nCharIndex = (i*45 + j/6) % 96;
  270.                         buffer[i*270 + j] = (j%6 != 5) ? FONT5x8[nCharIndex][j%6] : 0x00;
  271.                 }
  272.         }
  273.         lcd_update();
  274.         delay_ms(1000);
  275.        
  276.         memset(buffer, 0x00, sizeof buffer);
  277.         lcd_write_buffer(20, 0, 228, 20, DEMO);
  278.         lcd_update();
  279.         delay_ms(1000);
  280.        
  281.         memset(buffer, 0x00, sizeof buffer);
  282.         lcd_write_buffer(10, 1, 64, 8, Doraemon);
  283.         lcd_update();
  284.         delay_ms(1000);
  285. }
复制代码
下载:
STM32单片机LCD270160代码与英文pdf.7z (865.37 KB, 下载次数: 19)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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