esp32 驱动st7735s 显示数字

news2024/9/21 16:46:06

图片

下一步把ascii 8*8点阵输入程序,屏幕就可以显示ascii字符了,最终把此显示程序写成函数,输入参数为要显示字符的数组,这样就是st7735的显示驱动程序了。当然还要加入显示自动换行功能。

至于怎样显示ascii,我想到查表法,比如点阵字库a在数组中的序号为10,如要显示数组遇到a,则.直接去查找显示10号ascii就行了。

f93c125ec6e14fe08d2a93af85d4ae25.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(0b01000000);   //40
	
	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 列
    st7735_send_cmd(0x2A);
    st7735_send_data(0x00);
    st7735_send_data(xs);
    st7735_send_data(0x00);
    st7735_send_data(xe);

    // Set 行
    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 cls(){
       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);
		}
	   }  
	}	
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 初始化后是花屏
	cls();
	
	uint8_t font[][8] ={ 
	    {0x1C, 0x22, 0x26, 0x2A, 0x32, 0x22, 0x1C, 0x00},   // '0'
	    {0x04, 0x0C, 0x04, 0x04, 0x04, 0x04, 0x0E, 0x00}, // 数字 '1'
	     {0x0E, 0x11,  0x01,  0x06,   0x08, 0x10,  0x1F,  0x00 },  // 2 
	     {0x1C, 0x22, 0x02, 0x1C, 0x02, 0x22, 0x1C, 0x00}, // '3'
          {0x08, 0x18, 0x28, 0x48, 0x7E, 0x08, 0x08, 0x00},  // '4'
          {0x3E, 0x20, 0x3E, 0x02, 0x02, 0x22, 0x1C, 0x00},  // '5'
	     {0x1C, 0x22, 0x20, 0x3C, 0x22, 0x22, 0x1C, 0x00},  // '6'
        {0x3E, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x00}, // '7'
         {0x1C, 0x22, 0x22, 0x1C, 0x22, 0x22, 0x1C, 0x00},  // '8'
         {0x1C, 0x22, 0x22, 0x1E, 0x02, 0x22, 0x1C, 0x00},  // '9'
    };
	void xs(uint8_t ls,uint8_t le,uint8_t hs,uint8_t he,uint8_t *ci){
		qp(127-le,127-ls,hs,he);
		for (uint16_t a = 0; a < 8; a++) {
		for(uint8_t b=0;b<8;b++){
			     if((int)(((ci[a]>>b)&0b00000001))==1){   //如果像素点为1
                     st7735_send_data(0xf8);
			         st7735_send_data(0x00);
				 }else{
					   st7735_send_data(0xff);
			           st7735_send_data(0xff); 
		
			 }
	
		}
	  }
	}

    uint8_t  i[]={6,1,8,3,7,3,6,7,8,7,1,7};  
	
	uint16_t len=(int)sizeof(i);
	uint8_t	 lc=0;                  //lcd 显示起始列        
	uint8_t  hc=50;                   // lcd 显示行
	for(uint8_t a=0;a<len;a++){
		uint8_t ls=lc;
		uint8_t le=ls+7;
		uint8_t hs=hc;     
		uint8_t he=hs+7;		
	    xs(ls,le,hs,he,&font[i[a]][0]);
        lc=le;		                    //列自动加7,相当于光标后移一个字符
	
    }
}

 

 

 

 

 

 

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

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

相关文章

美羊羊今天给你讲Python类、对象(包听懂)

在Python中&#xff0c;我们都知道class用于创建类&#xff0c;这都知道吧。有谁不知道&#xff0c;举手&#xff01;&#xff01;&#xff01; 好的&#xff0c;感谢各位的点赞和关注。 一.类是什么东西 类包含两个东西&#xff0c;一个是成员变量&#xff0c;一个是成员方法…

Java、python、php版 美发美甲预约服务平台 美容院管理系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

微信小程序引入unocss

今天刚新建一个微信小程序&#xff0c;之前写过一篇《原子化CSS&#xff1a;Unocss的使用》&#xff0c;想着“偷懒”不想定义各种css样式类&#xff0c;于是准备把unocss引入进来使用。 安装与配置 1.安装依赖 npm add -D unocss unocss-preset-weapp2.配置unocss.config.t…

必看!查快递接口怎么选?

历经十四年的技术沉淀与迭代&#xff0c;百递云API开放平台目前提供四种高效、稳定同时各具特点的快递信息查询API服务&#xff0c;以满足广大B端客户在不同业务场景下的物流信息查询需求。 对于新客户来说&#xff0c;可能会感到困惑&#xff0c;日常销售和运营团队也会遇到客…

数字化转型升级探索(二)

在数字化转型升级的探索中&#xff0c;我们计划通过整合前沿技术如人工智能、物联网和大数据&#xff0c;全面改造传统业务流程&#xff0c;打造智能化、数据驱动的业务架构&#xff0c;实现从数据采集、处理到分析的全链条数字化&#xff0c;以提升决策效率、优化运营管理&…

echarts组件——折线统计图

echarts组件——折线统计图 折线图&折线渐变图 组件代码 <template><div :class"classname" :style"{height:height,width:width}" /> </template><script> // 折线图&折线渐变图 import * as echarts from echarts re…

2024最全网络安全工程师面试题(附答案),金九银十找工作必看!

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s…

版本控制工具git

版本控制工具 git 数据库 > 有代码历史版本 > 仓库 每个文件都是不同的历史版本&#xff0c;以便恢复 集中式版本控制系统 例如&#xff1a;SVN 缺陷&#xff1a; 1.依赖于中心服务器 分布式的版本管理系统 只有程序员用 git 只有需要在同步代码的时候需要联网 程…

Python运行时环境

1.1概念 程序运行只有栈帧不够&#xff0c;还要有进程与线程 Python在初始化时会创建一个主线程&#xff0c;所以其运行时环境中存在一个主线程&#xff0c;可以有多个线程 Python实现了对多线程的支持&#xff0c;而且一个线程就是操作系统上的一个原生线程 Python中所有线…

#Datawhale X 李宏毅苹果书 AI夏令营#1.2了解线性模型

1.2线性模型 什么是线性模型&#xff1f; 初始模型&#xff1a;, 其中y表示观看人数&#xff0c;x1表示前一天的观看人数&#xff0c;这个模型就是在用前一天的观看人数来预测当前的观看人数。 模型改进&#xff1a; 然而真实的数据是有周期性的&#xff0c;每隔7天&#…

向量数据库Milvus源码开发贡献实践

Milvus 是一款云原生的开源向量数据库&#xff0c;广泛应用于高维向量数据的管理和人工智能驱动的相似性搜索。无论是在构建智能搜索引擎还是开发数据驱动的应用&#xff0c;Milvus 都能提供强大的支持。我们将一起从头开始实践 Milvus 的标准开发流程&#xff0c;包括如何搭建…

企业画册在线版是怎么制作的?

随着互联网技术的飞速发展&#xff0c;传统的纸质企业画册已经逐渐无法满足现代企业的需求。为了让画册更加环保、便捷&#xff0c;同时提升企业形象和品牌影响力&#xff0c;企业画册在线版应运而生。那么&#xff0c;企业画册在线版究竟是如何制作出来的呢&#xff1f;今天&a…

嵌入式学习(数据库)

数据库的定义&#xff1a; 可以理解为数据库是用来存放数据的一个容器。有了数据库后&#xff0c;我们可以直接查找数据。或者可以对数据库进行读写删除等操作。 Sqlite 小型数据库 . Sqlite特点: 可以实现大数据量的管理 读写速度慢 最常见的数据库类型是关系型数据库管理…

QLU-AI助手初次微调Qwen2-7B-Instruct总结

一、微调代码 from datasets import Dataset import pandas as pd from transformers import (AutoTokenizer,AutoModelForCausalLM,DataCollatorForSeq2Seq,TrainingArguments,Trainer,GenerationConfig) import torch from peft import LoraConfig, TaskType, get_peft_mode…

探索待办事项管理新世界:10款工具带你告别杂乱无章

国内外主流的10款免费待办事项app对比&#xff1a;1.PingCode&#xff1b;2.Worktile&#xff1b;3.Todoist&#xff1b;4.Trello&#xff1b;5.Habitica&#xff1b;6.Forest&#xff1b;7.Teambition&#xff1b;8.Asana&#xff1b;9.嘀嗒清单&#xff08;TickTick&#xff…

poe供电原理以及应用

1,根据IEEE802.3af标准,一个完整的PoE系统包括供电端设备PSE和受电端设备PD两部分; 供电设备PSE是整个系统的电源提供者,为PD设备提供直流电源,其可分为M

[动态规划]---背包问题

前言 作者&#xff1a;小蜗牛向前冲 专栏&#xff1a;小蜗牛算法之路 专栏介绍&#xff1a;"蜗牛之道&#xff0c;攀登大厂高峰&#xff0c;让我们携手学习算法。在这个专栏中&#xff0c;将涵盖动态规划、贪心算法、回溯等高阶技巧&#xff0c;不定期为你奉上基础数据结构…

如何让ChatGPT说话更像人类

ChatGPT在多个领域展现了卓越的能力&#xff0c;但对话中仍不可避免地带有一定的机械感。幸运的是&#xff0c;OpenAI推出的GPTs功能可以让用户自定义prompt。最近&#xff0c;我发现了其中一个GPTs&#xff0c;它能让ChatGPT的对话更加贴近真人&#xff0c;现在就来与大家分享…

【生日视频制作】农村文化墙广告标语AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程农村文化墙广告标语AE模板修改文字软件生成器 怎么如何做的【生日视频制作】农村文化墙广告标语AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件 下载AE模板 把AE模板导入AE软件 修改图片或文字 渲染出视频

复杂网络|节点重要性评价指标

author: xiao黄 time: 2024-08-28 公众号: 复杂网络与网络科学 CSDN: https://blog.csdn.net/Python_Matlab评价节点重要性算法的指标有多种&#xff0c;如基于信息传播方面的动力学模型、单调性、Distinct Metric以及基于网络脆弱性和鲁棒性的方法等。不同的评价指标所考虑的角…