esp32 控制 st7735s 显示屏(spi)

news2024/9/20 8:59:55

Lcd初始化后全屏为花屏,必须再把整个屏幕转成全底白色消除花屏后再显示图片,字符。

我理解为什么是花屏,因为只是初始化各个参数,显示内存现在还是为空,还没有执行0x2c命令。

图片

8f56675137e04fc889e4a1e561b6f901.jpg

 

#include "driver/spi_master.h"
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "string.h"

#define PIN_NUM_MOSI 12
#define PIN_NUM_CLK  13
#define PIN_NUM_CS   5
#define PIN_NUM_DC   19
#define PIN_NUM_RST  18

spi_device_handle_t spi;

void spi_init() {
    spi_bus_config_t buscfg = {
        .mosi_io_num = PIN_NUM_MOSI,
        .miso_io_num = -1,
        .sclk_io_num = PIN_NUM_CLK,
        .quadwp_io_num = -1,
        .quadhd_io_num = -1,
        .max_transfer_sz = 4096,
    };

    spi_bus_initialize(HSPI_HOST, &buscfg, 1);

    spi_device_interface_config_t devcfg = {
        .clock_speed_hz = 25 * 1000 * 1000,   // 10 MHz
        .mode = 0,                            // SPI mode 0
        .spics_io_num = PIN_NUM_CS,           // CS pin
        .queue_size = 7,
    };

    spi_bus_add_device(HSPI_HOST, &devcfg, &spi);
}

void st7735_send_cmd(uint8_t cmd) {
    gpio_set_level(PIN_NUM_DC, 0); // Command mode
    spi_transaction_t t;
    memset(&t, 0, sizeof(t));
    t.length = 8;
    t.tx_buffer = &cmd;
    spi_device_transmit(spi, &t);
}

void st7735_send_data(uint8_t data) {
    gpio_set_level(PIN_NUM_DC, 1); // Data mode
    spi_transaction_t t;
    memset(&t, 0, sizeof(t));
    t.length = 8;
    t.tx_buffer = &data;
    spi_device_transmit(spi, &t);
}

void st7735_reset() {
    gpio_set_level(PIN_NUM_RST, 0);
    vTaskDelay(1 / portTICK_PERIOD_MS);
    gpio_set_level(PIN_NUM_RST, 1);
    vTaskDelay(200 / portTICK_PERIOD_MS);
}

void st7735_init() {
    // Reset the display
    st7735_reset();
        // Initialization commands for ST7735S
    st7735_send_cmd(0x01); // Software reset
    vTaskDelay(150 / portTICK_PERIOD_MS);
 
    st7735_send_cmd(0x11); // Sleep out
    vTaskDelay(120 / portTICK_PERIOD_MS);
	
	st7735_send_cmd(0xB1);
	st7735_send_data(0x01);
	st7735_send_data(0x2c);
	st7735_send_data(0x2D);
	
	st7735_send_cmd(0xB2);
	st7735_send_data(0x01);
	st7735_send_data(0x2c);
	st7735_send_data(0x2D);
	
	st7735_send_cmd(0xB3);
	st7735_send_data(0x01);
	st7735_send_data(0x2c);
	st7735_send_data(0x2D);
	st7735_send_data(0x01);
	st7735_send_data(0x2c);
	st7735_send_data(0x2D);
	
	st7735_send_cmd(0xB4);
	st7735_send_data(0x00);
	
	st7735_send_cmd(0xc0);
	st7735_send_data(0xa2);
	st7735_send_data(0x02);
	st7735_send_data(0x84);
	st7735_send_cmd(0xc1);
	st7735_send_data(0xc5);
	
	st7735_send_cmd(0xc2);
	st7735_send_data(0x0d);
	
	st7735_send_cmd(0xc3);
	st7735_send_data(0x8d);
	st7735_send_data(0x2a);
	
	st7735_send_cmd(0xc4);
	st7735_send_data(0x8d);
	st7735_send_data(0xee);
	
	st7735_send_cmd(0xc5);
	st7735_send_data(0x0e);
	
	st7735_send_cmd(0x36);
	st7735_send_data(0x00);
	
	st7735_send_cmd(0xe0);
	st7735_send_data(0x0f);
	st7735_send_data(0x1a);
	st7735_send_data(0x0f);
	st7735_send_data(0x18);
	st7735_send_data(0x2f);
	st7735_send_data(0x28);
	st7735_send_data(0x20);
	st7735_send_data(0x22);
	st7735_send_data(0x1f);
	st7735_send_data(0x1b);
	st7735_send_data(0x23);
	st7735_send_data(0x37);
	st7735_send_data(0x00);
	st7735_send_data(0x07);
	st7735_send_data(0x02);
	st7735_send_data(0x10);
    
	st7735_send_cmd(0xe1);
	st7735_send_data(0x0f);
	st7735_send_data(0x1b);
	st7735_send_data(0x0f);
	st7735_send_data(0x17);
	st7735_send_data(0x33);
	st7735_send_data(0x2c);
	st7735_send_data(0x29);
	st7735_send_data(0x2e);
	st7735_send_data(0x30);
	st7735_send_data(0x30);
	st7735_send_data(0x39);
	st7735_send_data(0x3f);
	st7735_send_data(0x00);
	st7735_send_data(0x07);
	st7735_send_data(0x03);
	st7735_send_data(0x10);
	
	st7735_send_cmd(0x2a);
	st7735_send_data(0x00);
	st7735_send_data(0x00);
	st7735_send_data(0x00);
	st7735_send_data(127);
	
	st7735_send_cmd(0x2b);
	st7735_send_data(0x00);
	st7735_send_data(0x00);
	st7735_send_data(0x00);
	st7735_send_data(160);

	st7735_send_cmd(0xf0);
	st7735_send_data(0x01);
	st7735_send_cmd(0xf6);
	st7735_send_data(0x00);
	
	st7735_send_cmd(0x3a);
	st7735_send_data(0x05);
   
     st7735_send_cmd(0x29); // Display on
     vTaskDelay(100 / portTICK_PERIOD_MS);
}

void qp(uint8_t xs, uint8_t xe,uint8_t ys,uint8_t ye) {
    // Set column address
    st7735_send_cmd(0x2A);
    st7735_send_data(0x00);
    st7735_send_data(xs);
    st7735_send_data(0x00);
    st7735_send_data(xe);

    // Set row address
    st7735_send_cmd(0x2B);
    st7735_send_data(0x00);
    st7735_send_data(ys);
    st7735_send_data(0x00);
    st7735_send_data(ye);
    // Write memory
    st7735_send_cmd(0x2C);       
}

void app_main() {
 
    gpio_set_direction(PIN_NUM_DC, GPIO_MODE_OUTPUT);
    gpio_set_direction(PIN_NUM_RST, GPIO_MODE_OUTPUT);

    spi_init();
    st7735_init();                             //lcd 初始化后是花屏
	
    qp(0,127,0,159);                              // lcd  全屏刷成白屏
    for (uint16_t a = 0; a < 159; a++) {
		for(uint8_t b=0;b<127;b++){
             st7735_send_data(0xff);
			 st7735_send_data(0xff);
		}
	}   
   
     qp(0,10,0,10);                               // 显示10*10 的红色
     for (uint16_t a = 0; a < 10; a++) {
		for(uint8_t b=0;b<10;b++){
             st7735_send_data(0xf8);
			 st7735_send_data(0x00);
		}
	} 	 
}

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2079577.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

统一 transformer 与 diffusion !Meta 融合新方法剑指下一代多模态王者

本文引入了 Transfusion&#xff0c;这是一种可以在离散和连续数据上训练多模态模型的方法。 来源丨机器之心 一般来说&#xff0c;多模态生成模型需要能够感知、处理和生成离散元素&#xff08;如文本或代码&#xff09;和连续元素&#xff08;如图像、音频和视频数据&#xf…

软件测试-Selenium+python自动化测试

目录 一、元素定位 1.1一个简单的模板 1.2单选框radio定位实战 1.3下拉操作 1.4弹窗 1.5文件上传 1.6 iframe(类似于页中页,嵌套进去了) 二、元素定位实战 会用到谷歌浏览器Chrome测试,需要下载一个Chromedriver(Chrome for Testing availability)对应自己的浏览…

力扣面试经典算法150题:除自身以外数组的乘积

除自身以外数组的乘积算法详解 今天的题目是力扣面试经典150题中的数组的中等难度题&#xff1a;除自身以外数组的乘积。 题目链接&#xff1a;https://leetcode.cn/problems/product-of-array-except-self/description/?envTypestudy-plan-v2&envIdtop-interview-150 …

docker基础到进阶

基础 文章目录 基础1.Docker简介2.Docker基础概念3.Docker安装4.Docker命令4.1 镜像命令4.2 容器命令 5. 数据卷5.1具名挂载5.2 匿名挂载 进阶1. 镜像5.2 Dockerfile5.3 网络1.网络模式2.网络操作 DockerCompose1.基本语法 总结 这篇文章记录了以下的内容&#xff1a; 1️⃣ 利…

达梦数据库的系统视图v$object_usage

达梦数据库的系统视图v$object_usage 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$OBJECT_USAGE 视图提供了关于数据库对象的使用情况和统计信息。这些对象可以包括表、索引、视图、存储过程等。通过 V$OBJECT_USAGE 视图&#xff0c;数据库管理员可以监…

如何使用Hive构建网络电视剧收视率分析系统:大数据实战教程

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

什么?入网小助手无法卸载?我来手把手教你

简介 之前装了 XXXXX 公司的入网小助手&#xff0c;卸载的时候发现要验证码&#xff0c;我这小脾气就上来了&#xff0c;对待流氓软件是可忍熟不可忍&#xff01;&#xff01;&#xff01; 这里介绍的只是一种方式&#xff0c;嫌麻烦的可以进入安全模式直接删除安装目录内容&…

操作系统----锁

锁 锁就是一个变量 为什么需要锁&#xff1f;&#xff1a;&#xff1a;需要原子性的执行一系列的操作指令&#xff0c;程序员在源代码中加锁&#xff0c;放在临界区周围&#xff0c;保证临界区能够像单条原子指令一样执行。 举例说明 锁&#xff08;通常是一个互斥量mutex&…

大数据5v特性、集群、分布式

目录 数据分析六部曲 大数据的特点 &#xff08;5v特征&#xff09; 分布式与集群的区别 常用的分布式方案 数据分析六部曲 明确分析目的和思路&#xff1a;确保分析框架的体系化和逻辑性&#xff0c;简单来说就是先分析什么&#xff0c;后分析什么&#xff0c;使得各个分析…

K-means算法原理及应用场景

1. 算法原理 K-means是一种广泛使用的聚类算法&#xff0c;其目标是将数据点划分为K个簇&#xff0c;使得簇内的点尽可能地接近簇中心&#xff08;质心&#xff09;&#xff0c;而簇间的点则尽可能地远离。算法的核心思想是最小化簇内的平方误差。 过程&#xff1a; 初始化&a…

命题的相关知识

一、推论 推论由前提和结论两部分构成。前提和结论部分都是命题。 命题是推论的基本单位 命题特点&#xff1a;1、是陈述句 2、有确定的值&#xff08;不是对就是错&#xff09; 知不知道真假不重要&#xff0c;有真假就行 连接词和简单命题组成了复合命题。 二、…

前端:html+css:伪类画箭头(实心)

一、效果图 二、代码 html <div class"rectangle">AC/DC</div> css /* 图形 */ .rectangle {position: relative;width: 50px;height: 20px;background-color: #3498db;color: white; } .rectangle:before {content: ;position: absolute;top: 0;l…

Python-进阶-Excel基本操作

文章目录 Excel 基本操作1. 概述2. 写入2.1 使用 xlwt2.2 使用 XlsxWriter 3. 读取4. 修改 Excel 基本操作 1. 概述 在数据处理方面&#xff0c;Python 一直扮演着重要的角色&#xff0c;对于 Excel 操作&#xff0c;它有着完整且成熟的第三方库&#xff0c;使用也较为简单。…

用IP代理网速过慢:原因分析与解决方案

使用IP代理时网速过慢的原因及解决方案 在现代互联网环境中&#xff0c;使用IP代理已成为保护隐私的常见手段。然而&#xff0c;许多用户在使用代理时常常会遇到网速过慢的问题&#xff0c;这不仅影响了使用体验&#xff0c;还可能导致工作效率下降。本文将探讨导致IP代理网速…

Cornerstone3D Tools对影像进行交互(上篇)-基础交互工具及同步器

⛳️ 前言 在我们日常需求中&#xff0c;除了需要对影像进行可视化展示外&#xff0c;大多数场景下还需要对影像进行调整、注释、分割等操作。Cornerstone3DTools库则支持大多数需要的交互功能。CornerstoneTools支持的工具类型主要分为以下4类&#xff1a; 基础交互类工具&am…

VS2022 Cmake项目构建 Qt

一.创建文件和配置CMakeLists 1.创建头文件MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>namespace Ui {class MainWindow; }class MainWindow : public QMainWindow {Q_OBJECTpublic:explicit MainWindow(QWidget* parent nullptr)…

使用Dockerfile创建应用镜像及私有仓库

目录 1.Dockerfile介绍 2.Dockerfile应用 1.创建目录 2.跳转目录 3.编辑启动脚本 4.编辑index.html文件 5.编辑 Dockerfile 6.创建镜像 7.查看镜像 8.创建容器测试 9.挂载其他项目测试 3.私有仓库 1.安装仓库镜像---仓库注册器 2.创建目录 3.启动容器、映射端口、…

读书学习笔记 # Datawhale X 李宏毅苹果书 AI夏令营

文章目录 &#x1f6a9;学习目标&#x1f6a9;学习内容&#x1f6a9; Task1.1&#x1f3af;为什么优化会失败&#x1f4cc;因非信息梯度导致的失败 &#x1f3af;局部极小值与鞍点&#x1f3af;临界点及其种类&#x1f3af;如何判断临界值种类&#x1f4cc;更简便的方法来判断 …

ubuntu环境下部署LNMP集成环境超详细图文教程

ubuntu系统下安装LNMP集成环境 一、Nginx安装 二、安装及配置MySQL数据库 修改密码 三、安装PHP 四、配置Nginx服务 ​编辑五、配置PHP 本文使用的Ubuntu版本为20.04。 php开发中集成环境的安装是必不可少的技能。 而LNMP代表的是&#xff1a;Linux系统下NginxMySQLPHP…

李沐--动手学深度学习 ResNet

1.理论 2.残差块 import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2l#ResNet沿用了VGG完整的3*3卷积层设计.残差块的实现如下&#xff1a; #此代码生成两种类型的网络&#xff1a; #一种是当use_1x1convFalse时&#xff0…