st7735s SPI驱动显示图标
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驱动显示图标相关推荐
- esp32 spi 驱动 oled 屏显示来自 PC 的画面
esp32 spi 驱动 oled 屏显示来自 PC 的画面 实验代码 gayhub 实验源码 设备及运行环境 装有python的电脑 Python 3.8.2 (tags/v3.8.2:7b3ab5 ...
- 华大HC32F460 SPI 驱动 ST7735S LCD显示器
华大HC32F460 SPI 驱动 ST7735S LCD显示器 前言: STM32改HC32F460 换芯片后发现SPI硬件驱动不了屏了,这个小问题搞了很久,最后用逻辑分析仪,分析时序,然后解决了, ...
- STM32F103以SPI 驱动128*128的TFT彩屏,LCD驱动为ST7735s,程序使用CubeMX的HAL库开发方式,另外也做了标准库的程序移植
0. 关于本文: 其实我一直都比较懒,不喜欢写博客.但网上关于详细讲解SPI驱动LCD的文章比较少,虽然也能下载到一些案例程序,但对于初学者来说,如果不懂LCD驱动的原理,不懂如何对文字和图片取模, ...
- 单片机:STM32F4x HAL库软硬SPI驱动ST7735s 1.8寸LCD屏幕
单片机:STM32F4x HAL库软硬SPI驱动ST7735s 1.8寸LCD屏幕 说明:此篇为学习记录.可能存在错误或者不足.如有问题请指出. 硬件环境 主控芯片:STM32F411CEU6 主控开 ...
- 电脑设备中PCI简易通讯控制器驱动显示黄色感叹号图标怎么办【申明:来源于网络】
电脑设备中PCI简易通讯控制器驱动显示黄色感叹号图标怎么办[申明:来源于网络] 电脑设备中PCI简易通讯控制器驱动显示黄色感叹号图标: http://wenda.so.com/q/1467255688 ...
- 1.8寸TFT LCD128X160 ST7735S SPI串口屏驱动示例
1.8寸TFT LCD128X160 ST7735S SPI串口屏驱动示例 1.8寸TFT LCD128X160 ST7735S SPI串口屏 驱动资料 由中景园提供的,里面包含了: 链接:https ...
- TFT1.44驱动显示RCT6 通过6线SPI可以正常显示,而c8t6 白屏,代码互相移植导致的下载失败的问题
自己焊的板子,一度让我怀疑是不是板子出了问题. 遇到的问题 1,四线SPI驱动rct6开发板上可以正常显示,c8t6白屏,后来看这个博客,REST说也要连起来 解决:显示屏上的复位引脚飞线到复位引脚, ...
- STC32G单片机驱动1.8寸TFT LCD128X160 ST7735S SPI串口驱动示例
STC32G单片机驱动1.8寸TFT LCD128X160 ST7735S SPI串口屏示例
- 联盛德 HLK-W806 (十一): 软件SPI和硬件SPI驱动ST7567液晶LCD
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
最新文章
- 参观 Google 总部是一种什么体验?
- Windows中现在有独立的Linux文件夹系统
- 利用ImageMagick命令执行漏洞拿下Facebook四万美元奖金
- 日志 log4j.xml配置详解
- Servlet3.1 新增的非阻塞式IO
- 使用 commander inquirer 构建专业的node cli
- Leetcode 1. 两数之和 (Python版)
- 代码自解释不是不写注释的理由
- 自定义滚动条(Custom ScrollBar)
- 圣诞抽奖 | 2018年的开发者,经历了裁员、加班种种不堪,2019年的你如何获得升职加薪的机会?...
- Qt的信号槽机制介绍(含Qt5与Qt4的差异对比)
- Javascript调试之console对象,它的一些小技巧你都知道吗?
- Elasticsearch】Elasticsearch 25 个必知必会的默认值
- C++ 中的sort()排序函数用法
- 优班图linux 命令,Linux 常用命令
- 2021-05-14
- [Redis实战]单文件夹启动多实例,redis哨兵+主从复制完整demo样例[windows环境]
- 三种编程规则:驼峰命名法、帕斯卡命名法、匈牙利名
- Facade in Java
- command-codes