找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
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接口












































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 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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