st7735s SPI驱动代码如下:

#include "stm32f0xx.h"

#define LCD_SCK_PIN        GPIO_Pin_13
#define LCD_SCK_PORT       GPIOB
#define LCD_SCK_PIN_SCK    RCC_AHBPeriph_GPIOB
#define LCD_SCK_SOURCE     GPIO_PinSource13
#define LCD_SCK_AF         GPIO_AF_0

#define LCD_MISO_PIN       GPIO_Pin_14
#define LCD_MISO_PORT      GPIOB
#define LCD_MISO_PIN_SCK   RCC_AHBPeriph_GPIOB
#define LCD_MISO_SOURCE    GPIO_PinSource14
#define LCD_MISO_AF        GPIO_AF_0

#define LCD_MOSI_PIN       GPIO_Pin_15
#define LCD_MOSI_PORT      GPIOB
#define LCD_MOSI_PIN_SCK   RCC_AHBPeriph_GPIOB
#define LCD_MOSI_SOURCE    GPIO_PinSource15
#define LCD_MOSI_AF        GPIO_AF_0

#define LCD_SPI2               RCC_APB1Periph_SPI2
#define SPI_LCD_CS_LOW()       GPIO_ResetBits(GPIOB, GPIO_Pin_12)
#define SPI_LCD_CS_HIGH()      GPIO_SetBits(GPIOB, GPIO_Pin_12)
#define LCD_CS_PORT GPIOB
#define LCD_CS_PIN GPIO_Pin_12

#define SPI_LCD_REST()       GPIO_ResetBits(GPIOA, GPIO_Pin_6)
#define SPI_LCD_NO_REST()     GPIO_SetBits(GPIOA, GPIO_Pin_6)

#define SPI_LCD_DATA_W()       GPIO_ResetBits(GPIOA, GPIO_Pin_7)
#define SPI_LCD_DATA_R()       GPIO_SetBits(GPIOA, GPIO_Pin_7)

#define uchar unsigned char 
#define uint  unsigned int
#define Height 128
#define Width   128
#define RED     0xf800
#define GREEN   0x07e0
#define BLUE   0x001f
#define YELLOW 0xffe0
#define WHITE   0xffff
#define BLACK   0x0000
#define PURPLE 0xf81f

/*******************************************************************************
* Function Name  : SPI_FLASH_Init
* Description    : Initializes the peripherals used by the SPI FLASH driver.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void lcd_Init(void)
{
  GPIO_InitTypeDef  GPIO_InitStruct;
  SPI_InitTypeDef   SPI_InitStruct;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA| RCC_AHBPeriph_GPIOB, ENABLE);

RCC_APB1PeriphClockCmd(LCD_SPI2, ENABLE);

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;                 
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; 
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; 
GPIO_Init(GPIOA, &GPIO_InitStruct);

/*!< Configure SD_SPI pins: SCK */
  GPIO_InitStruct.GPIO_Pin = LCD_SCK_PIN;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_3;
  GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP; 
  GPIO_Init(LCD_SCK_PORT, &GPIO_InitStruct);

/*!< Configure SD_SPI pins: MISO */
  GPIO_InitStruct.GPIO_Pin = LCD_MISO_PIN;
  GPIO_Init(LCD_MISO_PORT, &GPIO_InitStruct);

/*!< Configure SD_SPI pins: MOSI */
  GPIO_InitStruct.GPIO_Pin =LCD_MOSI_PIN;
  GPIO_Init(LCD_MOSI_PORT, &GPIO_InitStruct);
  
  /* Connect PXx to SD_SPI_SCK */
  GPIO_PinAFConfig(LCD_SCK_PORT, LCD_SCK_SOURCE, LCD_SCK_AF);

/* Connect PXx to SD_SPI_MISO */
  GPIO_PinAFConfig(LCD_MISO_PORT, LCD_MISO_SOURCE, LCD_MISO_AF);

/* Connect PXx to SD_SPI_MOSI */
  GPIO_PinAFConfig(LCD_MOSI_PORT, LCD_MOSI_SOURCE, LCD_MOSI_AF);

/*!< Configure SD_SPI_CS_PIN pin: SD Card CS pin */
  GPIO_InitStruct.GPIO_Pin =LCD_CS_PIN;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_3;
  GPIO_Init(LCD_CS_PORT, &GPIO_InitStruct);

SPI_LCD_CS_HIGH();
 
  /*!< SD_SPI Config */
  SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
  SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;
  SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
  SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStruct.SPI_CRCPolynomial = 7;
  SPI_Init(SPI2, &SPI_InitStruct);
  SPI_RxFIFOThresholdConfig(SPI2, SPI_RxFIFOThreshold_QF);
  SPI_Cmd(SPI2, ENABLE); /*!< SD_SPI enable */
//  
// SPI_FLASH_CS_LOW();
  
}

/*******************************************************************************
* Function Name  : SPI_LCD_SendByte
* Description    : Sends a byte through the SPI interface and return the byte
*                  received from the SPI bus.
* Input          : byte : byte to send.
* Output         : None
* Return         : The value of the received byte.
*******************************************************************************/
uint8_t SPI_LCD_SendByte(uint8_t byte)
{
  /* Loop while DR register in not emplty */
  while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);

/* Send byte through the SPI1 peripheral */
  SPI_SendData8(SPI2, byte);

/* Wait to receive a byte */
  while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);

/* Return the byte read from the SPI bus */
  return SPI_ReceiveData8(SPI2);
}

//******************************************//
void delay(int count)   /* X10ms */
{
       unsigned int i,j;
        for(i=0;i<count;i++)        
              for(j=0;j<50;j++);             
}

//**********write register command***********//
void  LCD_WriteCommand(unsigned short c)
{
SPI_LCD_CS_LOW();
SPI_LCD_DATA_W();
SPI_LCD_SendByte(c);
SPI_LCD_CS_HIGH();
}

//***************write  data****************// 
void LCD_WriteData(unsigned short dat)
{
SPI_LCD_CS_LOW();
SPI_LCD_DATA_R();
SPI_LCD_SendByte(dat);
SPI_LCD_CS_HIGH();
}

//******************************************//
void LCD_Write_Data(uint dat16)
{
  LCD_WriteData(dat16>>8);
  LCD_WriteData(dat16);
}

void  ST7735S_CPT144_Initial ()

//------------------------------------ST7735R Reset Sequence-----------------------------------------// 
SPI_LCD_NO_REST(); 
delay (100);                                                              //Delay 1ms 
SPI_LCD_REST();
delay (100);                                                              //Delay 1ms 
SPI_LCD_NO_REST();
delay (300);                                                              //Delay 120ms 
//--------------------------------End ST7735S Reset Sequence ---------------------------------------//
LCD_WriteCommand(0x11); //Sleep out
delay(120); //Delay 120ms
//------------------------------------ST7735S Frame rate-------------------------------------------------//
LCD_WriteCommand(0xB1); //Frame rate 80Hz
LCD_WriteData(0x02);
LCD_WriteData(0x35);
LCD_WriteData(0x36);
LCD_WriteCommand(0xB2); //Frame rate 80Hz
LCD_WriteData(0x02);
LCD_WriteData(0x35);
LCD_WriteData(0x36);
LCD_WriteCommand(0xB3); //Frame rate 80Hz
LCD_WriteData(0x02);
LCD_WriteData(0x35);
LCD_WriteData(0x36);
LCD_WriteData(0x02);
LCD_WriteData(0x35);
LCD_WriteData(0x36);
//------------------------------------End ST7735S Frame rate-------------------------------------------//
LCD_WriteCommand(0xB4); //Dot inversion
LCD_WriteData(0x03);
//------------------------------------ST7735S Power Sequence-----------------------------------------//
LCD_WriteCommand(0xC0);
LCD_WriteData(0xA2);
LCD_WriteData(0x02);
LCD_WriteData(0x84);
LCD_WriteCommand(0xC1);
LCD_WriteData(0xC5);
LCD_WriteCommand(0xC2);
LCD_WriteData(0x0D);
LCD_WriteData(0x00);
LCD_WriteCommand(0xC3);
LCD_WriteData(0x8D);
LCD_WriteData(0x2A);
LCD_WriteCommand(0xC4);
LCD_WriteData(0x8D);
LCD_WriteData(0xEE);
//---------------------------------End ST7735S Power Sequence---------------------------------------//
LCD_WriteCommand(0xC5); //VCOM
LCD_WriteData(0x0a);
LCD_WriteCommand(0x36); //MX, MY, RGB mode
LCD_WriteData(0xC8);
//------------------------------------ST7735S Gamma Sequence-----------------------------------------//
LCD_WriteCommand(0XE0);
LCD_WriteData(0x12);
LCD_WriteData(0x1C);
LCD_WriteData(0x10);
LCD_WriteData(0x18);
LCD_WriteData(0x33);
LCD_WriteData(0x2C);
LCD_WriteData(0x25);
LCD_WriteData(0x28);
LCD_WriteData(0x28);
LCD_WriteData(0x27);
LCD_WriteData(0x2F);
LCD_WriteData(0x3C);
LCD_WriteData(0x00);
LCD_WriteData(0x03);
LCD_WriteData(0x03);
LCD_WriteData(0x10);
LCD_WriteCommand(0XE1);
LCD_WriteData(0x12);
LCD_WriteData(0x1C);
LCD_WriteData(0x10);
LCD_WriteData(0x18);
LCD_WriteData(0x2D);
LCD_WriteData(0x28);
LCD_WriteData(0x23);
LCD_WriteData(0x28);
LCD_WriteData(0x28);
LCD_WriteData(0x26);
LCD_WriteData(0x2F);
LCD_WriteData(0x3B);
LCD_WriteData(0x00);
LCD_WriteData(0x03);
LCD_WriteData(0x03);
LCD_WriteData(0x10);
//------------------------------------End ST7735S Gamma Sequence-----------------------------------------//
LCD_WriteCommand(0x3A); //65k mode
LCD_WriteData(0x05);
LCD_WriteCommand(0x29); //Display on 
}

void DISP_WINDOWS(void)
{
LCD_WriteCommand(0x2A);    //设置列地址
LCD_WriteData(0x00);
LCD_WriteData(0x02);
LCD_WriteData(0x00);
LCD_WriteData(0x81);

LCD_WriteCommand(0x2B);    //设置行地址
LCD_WriteData(0x00);
LCD_WriteData(0x03);
LCD_WriteData(0x00);
LCD_WriteData(0x82);

LCD_WriteCommand(0x2C);
}

void show_icon(st_icon ic)
{
short i,p=0;
short sx,ex,sy,ey;

sx=ic.x;
ex=ic.w+sx;

sy=ic.y;
ey=sy;

do
{
LCD_WriteCommand(0x2A);    //设置列地址
LCD_WriteData(0x00);
LCD_WriteData(sx+1);
LCD_WriteData(0x00);
LCD_WriteData(ex+1);

LCD_WriteCommand(0x2B);    //设置行地址
LCD_WriteData(0x00);
LCD_WriteData(sy+2);
LCD_WriteData(0x00);
LCD_WriteData(sy+2);

LCD_WriteCommand(0x2C);

for(i=ex;i>sx;i--)
{
LCD_WriteData(ic.dat[p++]);
LCD_WriteData(ic.dat[p++]);

sy++;
}
while(p<(ic.w*ic.h));
}

void show_any_icon(unsigned short sx,unsigned short sy,unsigned short w,unsigned short h,unsigned char dat[])
{
short i,p=0;
unsigned short ex,ey;

ex=w+sx;
ey=sy;

do
{
LCD_WriteCommand(0x2A);    //设置列地址
LCD_WriteData(0x00);
LCD_WriteData(sx+1);
LCD_WriteData(0x00);
LCD_WriteData(ex+1);

LCD_WriteCommand(0x2B);    //设置行地址
LCD_WriteData(0x00);
LCD_WriteData(sy+2);
LCD_WriteData(0x00);
LCD_WriteData(sy+2);

LCD_WriteCommand(0x2C);

for(i=ex;i>sx;i--)
{
LCD_WriteData(dat[p++]);
LCD_WriteData(dat[p++]);

sy++;
}
while(p<(w*h));
}

//************显示带彩色图片***************//
void disp_clear(void)
{
uint i,j;
unsigned short p=BACK_COLOR;

DISP_WINDOWS();
for(j=Height;j>0;j--)
{
for(i=Width;i>0;i--)
{
LCD_WriteData((unsigned char)((p&0xff00)>>8));
LCD_WriteData((unsigned char)(p&0x00ff));
}
}

//HOLD_DISP ();
}

void disp_NumDot()
{
uint i,j;
uchar p = 0;
  DISP_WINDOWS();
for(j=Height;j>0;j--)
{
for(i=Width;i>0;i--)
{
LCD_WriteData(0x00);
LCD_WriteData(p);
delay(50);
}
p++;
}
}

//**********显示带白框的黑色图片************//
void Frame(void)
{
int i,j,k;
  DISP_WINDOWS();
  for (i=Width;i>0;i--)
{
    LCD_Write_Data(WHITE);
}
for (j=Height-2;j>0;j--)
{
    LCD_Write_Data(WHITE);
    for (k=Width-2;k>0;k--)
{
LCD_Write_Data(BLACK);
}
LCD_Write_Data(WHITE);
}
for (i=Width;i>0;i--)
{
    LCD_Write_Data(WHITE);
}
// HOLD_DISP ();
}

/*蓝牙图标*/

显示图标的代码如下:

typedef struct __st_icon
{
unsigned short x;//图标X轴起始点
unsigned short y;//图标Y轴起始点
unsigned short w;//图标宽度
unsigned short h;//图标高度
unsigned short len;
unsigned short color;//图标颜色
const unsigned char *dat;//图标取模得到的数据
} st_icon;

//蓝牙图片数据
#define BT_HIGHT 16
#define BT_WIGHT 16
const unsigned char gImage_blue[32] = { /* 0X00,0X01,0X10,0X00,0X10,0X00, */
0X01,0X00,0X01,0X80,0X01,0XC0,0X01,0XE0,0X0D,0XB0,0X0F,0XF0,0X07,0XE0,0X03,0XC0,
0X03,0XC0,0X07,0XE0,0X0F,0XF0,0X0D,0XB0,0X01,0XE0,0X01,0XC0,0X01,0X80,0X01,0X00,
};

st_icon g_st_bt_icon;

/*初始化蓝牙图片
设定起始地址、大小和数据

*/
void bt_init(void)
{
g_st_bt_icon.x=50;
g_st_bt_icon.y=2;
g_st_bt_icon.w=BT_WIGHT;
g_st_bt_icon.h=BT_HIGHT;
g_st_bt_icon.dat=gImage_blue;
}

/*显示蓝牙图片
分辨率为16*16
color 显示的颜色
*/
void show_bt(unsigned short color)
{
unsigned short i,j,k=0;
short sx,ex,sy,ey;
unsigned short offset,m,n;
unsigned char temp,t1;

sx=g_st_bt_icon.x;
ex=g_st_bt_icon.w+sx;

sy=g_st_bt_icon.y;
ey=sy+g_st_bt_icon.h;

offset = g_st_bt_icon.w;

for(j=0;j<g_st_bt_icon.h;j++)
{
m=offset/8;
n=offset%8;
i=0;
while(i<m)
{
temp=g_st_bt_icon.dat[k++];
for(t1=0;t1<8;t1++)
{
LCD_WriteCommand(0x2A);    //设置列地址
LCD_WriteData(0x00);
LCD_WriteData(sx+1+t1+i*8);
LCD_WriteData(0x00);
LCD_WriteData(sx+1+t1+i*8);

LCD_WriteCommand(0x2B);    //设置行地址
LCD_WriteData(0x00);
LCD_WriteData(sy+1+j);
LCD_WriteData(0x00);
LCD_WriteData(sy+1+j);

LCD_WriteCommand(0x2C);
if(temp&0x80)
{
LCD_WriteData((color&0xff00)>>8);
LCD_WriteData(color&0x00ff);
}
else
{
LCD_WriteData((BACK_COLOR&0xff00)>>8);
LCD_WriteData(BACK_COLOR&0x00ff);
}
temp<<=1;

i++;
}

if(n>0)
{
temp=g_st_bt_icon.dat[k++];
for(t1=0;t1<n;t1++)
{
LCD_WriteCommand(0x2A);    //设置列地址
LCD_WriteData(0x00);
LCD_WriteData(sx+1+t1);
LCD_WriteData(0x00);
LCD_WriteData(sx+1+t1);

LCD_WriteCommand(0x2B);    //设置行地址
LCD_WriteData(0x00);
LCD_WriteData(sy+2+j);
LCD_WriteData(0x00);
LCD_WriteData(sy+2+j);    
if(temp&0x80)
{
LCD_WriteData((color&0xff00)>>8);
LCD_WriteData(color&0x00ff);
}
else
{
LCD_WriteData((BACK_COLOR&0xff00)>>8);
LCD_WriteData(BACK_COLOR&0x00ff);
}
temp<<=1;
}

}
}
}

st7735s SPI驱动显示图标相关推荐

  1. esp32 spi 驱动 oled 屏显示来自 PC 的画面

    esp32 spi 驱动 oled 屏显示来自 PC 的画面 实验代码 gayhub 实验源码 设备及运行环境 装有python的电脑 Python 3.8.2 (tags/v3.8.2:7b3ab5 ...

  2. 华大HC32F460 SPI 驱动 ST7735S LCD显示器

    华大HC32F460 SPI 驱动 ST7735S LCD显示器 前言: STM32改HC32F460 换芯片后发现SPI硬件驱动不了屏了,这个小问题搞了很久,最后用逻辑分析仪,分析时序,然后解决了, ...

  3. STM32F103以SPI 驱动128*128的TFT彩屏,LCD驱动为ST7735s,程序使用CubeMX的HAL库开发方式,另外也做了标准库的程序移植

    0.  关于本文: 其实我一直都比较懒,不喜欢写博客.但网上关于详细讲解SPI驱动LCD的文章比较少,虽然也能下载到一些案例程序,但对于初学者来说,如果不懂LCD驱动的原理,不懂如何对文字和图片取模, ...

  4. 单片机:STM32F4x HAL库软硬SPI驱动ST7735s 1.8寸LCD屏幕

    单片机:STM32F4x HAL库软硬SPI驱动ST7735s 1.8寸LCD屏幕 说明:此篇为学习记录.可能存在错误或者不足.如有问题请指出. 硬件环境 主控芯片:STM32F411CEU6 主控开 ...

  5. 电脑设备中PCI简易通讯控制器驱动显示黄色感叹号图标怎么办【申明:来源于网络】

    电脑设备中PCI简易通讯控制器驱动显示黄色感叹号图标怎么办[申明:来源于网络] 电脑设备中PCI简易通讯控制器驱动显示黄色感叹号图标: http://wenda.so.com/q/1467255688 ...

  6. 1.8寸TFT LCD128X160 ST7735S SPI串口屏驱动示例

    1.8寸TFT LCD128X160 ST7735S SPI串口屏驱动示例 1.8寸TFT LCD128X160 ST7735S SPI串口屏 驱动资料 由中景园提供的,里面包含了: 链接:https ...

  7. TFT1.44驱动显示RCT6 通过6线SPI可以正常显示,而c8t6 白屏,代码互相移植导致的下载失败的问题

    自己焊的板子,一度让我怀疑是不是板子出了问题. 遇到的问题 1,四线SPI驱动rct6开发板上可以正常显示,c8t6白屏,后来看这个博客,REST说也要连起来 解决:显示屏上的复位引脚飞线到复位引脚, ...

  8. STC32G单片机驱动1.8寸TFT LCD128X160 ST7735S SPI串口驱动示例

    STC32G单片机驱动1.8寸TFT LCD128X160 ST7735S SPI串口屏示例

  9. 联盛德 HLK-W806 (十一): 软件SPI和硬件SPI驱动ST7567液晶LCD

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

最新文章

  1. 参观 Google 总部是一种什么体验?
  2. Windows中现在有独立的Linux文件夹系统
  3. 利用ImageMagick命令执行漏洞拿下Facebook四万美元奖金
  4. 日志 log4j.xml配置详解
  5. Servlet3.1 新增的非阻塞式IO
  6. 使用 commander inquirer 构建专业的node cli
  7. Leetcode 1. 两数之和 (Python版)
  8. 代码自解释不是不写注释的理由
  9. 自定义滚动条(Custom ScrollBar)
  10. 圣诞抽奖 | 2018年的开发者,经历了裁员、加班种种不堪,2019年的你如何获得升职加薪的机会?...
  11. Qt的信号槽机制介绍(含Qt5与Qt4的差异对比)
  12. Javascript调试之console对象,它的一些小技巧你都知道吗?
  13. Elasticsearch】Elasticsearch 25 个必知必会的默认值
  14. C++ 中的sort()排序函数用法
  15. 优班图linux 命令,Linux 常用命令
  16. 2021-05-14
  17. [Redis实战]单文件夹启动多实例,redis哨兵+主从复制完整demo样例[windows环境]
  18. 三种编程规则:驼峰命名法、帕斯卡命名法、匈牙利名
  19. Facade in Java
  20. command-codes

热门文章

  1. 谋定农民丰收节交易会-李加映:功能性农业·农业大健康大会
  2. 金仓数据库KingbaseES 插件kdb_date_function
  3. VBA实现矩阵快速求幂
  4. springboot集成ElasticSearch
  5. 基于MVT的医学图像处理平台设计与实现
  6. TF-IDF 词向量
  7. 【BZOJ-2295】我爱你啊 暴力
  8. SOA架构和微服务架构的区别(转载)
  9. springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显
  10. operate1c语言,operate的第三人称单数和例句