找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2120|回復(fù): 0
收起左側(cè)

單片機(jī)程序 16灰階LCM270X160分辨率FSTN液晶顯示屏LCD,ST7586S驅(qū)動,6800接口

[復(fù)制鏈接]
ID:324463 發(fā)表于 2022-11-2 22:52 | 顯示全部樓層 |閱讀模式
16灰階LCM 270X160分辨率FSTN液晶顯示屏LCD,ST7586S驅(qū)動,6800接口,單塊屏3.5英寸,7寸LCM單色屏,可以黑白,4灰階,16灰階

外形尺寸:170mmx62mm
玻璃尺寸:167mmx60mm
FPC軟排線長度:23mm
單塊玻璃尺寸:83.3mmx60mm
兩塊玻璃對角線尺寸:178mm

7寸LCM單色屏,F(xiàn)STN屏,雙屏顯示,單塊屏3.5英寸,3.5寸 LCD,270*160分辨率FSTN顯示屏,ST7586S驅(qū)動,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 高點(diǎn)陣,大尺寸液晶顯示屏,雙屏顯示,單個屏幕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單片機(jī)源程序如下:
  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. }
復(fù)制代碼
下載:
STM32單片機(jī)LCD270160代碼與英文pdf.7z (865.37 KB, 下載次數(shù): 20)




評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表