(备份)常用ASCII 8*8 点阵 以及查询显示字符的点阵

news/2024/9/20 2:05:36/ 标签: c语言

图片b7fb10e5cc8840a9ab304b8bbddd0b49.jpg

 

#include "driver/spi_master.h"
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "string.h"
#include "driver/i2c.h"
#include "esp_rom_sys.h"
#include "sdkconfig.h"
#include <stdio.h>
#include "esp_system.h"
#include "esp_log.h"//------------------------------------------
#define I2C_MASTER_SCL_IO           14
#define I2C_MASTER_SDA_IO           26
#define I2C_MASTER_NUM              I2C_NUM_0
#define I2C_MASTER_FREQ_HZ          100000
#define I2C_MASTER_TX_BUF_DISABLE   0
#define I2C_MASTER_RX_BUF_DISABLE   0
#define DS3231_ADDRESS              0x68  // 68
//--------------------------------------
#define PIN_NUM_MOSI 2
#define PIN_NUM_CLK  15
#define PIN_NUM_CS   5
#define PIN_NUM_DC   19
#define PIN_NUM_RST  18//--------------------------------------------------------------------------void i2c_master_init()
{i2c_config_t conf = {.mode = I2C_MODE_MASTER,.sda_io_num = I2C_MASTER_SDA_IO,.sda_pullup_en = GPIO_PULLUP_ENABLE,.scl_io_num = I2C_MASTER_SCL_IO,.scl_pullup_en = GPIO_PULLUP_ENABLE,.master.clk_speed = I2C_MASTER_FREQ_HZ,};ESP_ERROR_CHECK(i2c_param_config(I2C_MASTER_NUM, &conf));ESP_ERROR_CHECK(i2c_driver_install(I2C_MASTER_NUM, conf.mode, 0, 0, 0));
}uint8_t dec_to_bcd(uint8_t val)
{return ((val / 10 * 16) + (val % 10));
}uint8_t bcd_to_dec(uint8_t val)
{return ((val / 16 * 10) + (val % 16));
}esp_err_t ds3231_set_time(uint8_t sec, uint8_t min, uint8_t hour, uint8_t day, uint8_t date, uint8_t month, uint8_t year)
{uint8_t time_data[7] = {dec_to_bcd(sec), dec_to_bcd(min), dec_to_bcd(hour), dec_to_bcd(day), dec_to_bcd(date), dec_to_bcd(month), dec_to_bcd(year)};i2c_cmd_handle_t cmd = i2c_cmd_link_create();i2c_master_start(cmd);i2c_master_write_byte(cmd, (DS3231_ADDRESS << 1) | I2C_MASTER_WRITE, true);i2c_master_write_byte(cmd, 0x00, true);i2c_master_write(cmd, time_data, sizeof(time_data), true);i2c_master_stop(cmd);esp_err_t ret = i2c_master_cmd_begin(I2C_MASTER_NUM, cmd, 1000 / portTICK_PERIOD_MS);i2c_cmd_link_delete(cmd);return ret;
}//---------------------------------------------------------------------------------
//-----------------------------------------------------------
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 modespi_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 modespi_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 displayst7735_reset();// Initialization commands for ST7735Sst7735_send_cmd(0x01); // Software resetvTaskDelay(150 / portTICK_PERIOD_MS);st7735_send_cmd(0x11); // Sleep outvTaskDelay(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);   //40st7735_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 onvTaskDelay(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 memoryst7735_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);}}  }	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'{0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00},  // :{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},         //空格//--------------{0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00},    //中间短横线-{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff},  //下横线_{ 0x00,0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30}, //逗号{    0x3C, 0x42, 0x02, 0x0C, 0x10, 0x10, 0x00,0x10},//问号{  0x10, 0x10, 0x10, 0x10, 0x10,0x00,0x10, 0x00},//感叹号{  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,0x18},//句号{   0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30},// 分号//-------------------{0x00,0x00, 0x3C, 0x02,  0x3E, 0x42, 0x3E, 0x00 },  //a{ 0x40, 0x40, 0x7C,  0x42,  0x42, 0x42,  0x7C,  0x00},//         {0x00, 0x00, 0x3E,  0x40,   0x40,   0x40,  0x3E,   0x00},//         {0x02, 0x02, 0x3E, 0x42, 0x42, 0x42, 0x3E, 0x00},//         {0x00, 0x00, 0x3C, 0x42, 0x7E, 0x40, 0x3C,  0x00},//         {0x1C, 0x22, 0x20, 0x7C, 0x20, 0x20, 0x20,  0x00},//         {0x00, 0x00, 0x3E, 0x42, 0x3E, 0x02, 0x3C, 0x00},//         {0x40, 0x40,  0x7C,  0x42, 0x42, 0x42, 0x42, 0x00},//         {0x00, 0x10,  0x00, 0x30, 0x10, 0x10,0x10, 0x00},//         {0x00, 0x08, 0x00, 0x08, 0x08, 0x48, 0x30, 0x00},//         {0x40, 0x44, 0x48,0x70,  0x48, 0x44,  0x42,  0x00},         {0x30, 0x10, 0x10, 0x10,   0x10, 0x10, 0x10, 0x00},//         {0x00, 0x00, 0x66, 0x5A,  0x42, 0x42, 0x42, 0x00},//         { 0x00,0x00, 0x7C, 0x42, 0x42, 0x42, 0x42, 0x00},//         {0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x3C,  0x00},//         {0x00, 0x00, 0x7C, 0x42, 0x42, 0x7C, 0x40, 0x40},//  *      {0x00, 0x00, 0x3E, 0x42, 0x42, 0x3E, 0x02, 0x02},//       * {0x00, 0x00,  0x7C, 0x42, 0x40, 0x40, 0x40,  0x00},//       {0x00, 0x00, 0x3C, 0x40, 0x3C,0x02, 0x7C,  0x00},//         {0x00,   0x10,0x7C, 0x10, 0x10, 0x12,  0x0C, 0x00},//       {0x00, 0x00,  0x42, 0x42, 0x42, 0x42, 0x3E,   0x00},//         { 0x00, 0x00,0x42, 0x42,   0x24, 0x24, 0x18, 0x00},//         {0x00, 0x00, 0x42, 0x42, 0x5A, 0x5A, 0x24,  0x00},//         {0x00, 0x00, 0x42, 0x24, 0x18, 0x24, 0x42, 0x00},//         {0x00, 0x00, 0x42, 0x42, 0x3E, 0x02, 0x3C, 0x00},//         {0x00, 0x00, 0x7E, 0x04, 0x18, 0x20, 0x7E, 0x00},//      z   
};char asc[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,':',0x20,'-','_',',','?','!','.',';','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',			 };void xs(uint8_t ls,uint8_t le,uint8_t hs,uint8_t he,uint8_t *ci,uint8_t ys){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){   //如果像素点为1st7735_send_data(ys);st7735_send_data(0x00);}else{st7735_send_data(0xff);st7735_send_data(0xff); }}}}void  hxs(uint8_t lc,uint8_t hc,char *i,size_t cd,uint8_t ys){    //在一行中显示字符uint16_t len=(int)cd;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;	int asc_len=(int)sizeof(asc);for(int n=0;n<asc_len;n++){if(memcmp(&i[a],&asc[n],1)==0){        //查表xs(ls,le,hs,he,&font[n][0],ys);lc=le;		                    //列自动加7,相当于光标后移一个字符break;}}					     }	  }
//=========================================================================================================	void app_main() {i2c_master_init();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 data[7];              // 0-255 无符号数组char i[8];                    //字符串数组for(;;){//  uint8_t  i[]={6,1,8,3,7,3,6,7,8,7,1,7};  i2c_cmd_handle_t cmd = i2c_cmd_link_create();i2c_master_start(cmd);i2c_master_write_byte(cmd, (DS3231_ADDRESS << 1) | I2C_MASTER_WRITE, true);i2c_master_write_byte(cmd, 0x00, true);i2c_master_start(cmd);i2c_master_write_byte(cmd, (DS3231_ADDRESS << 1) | I2C_MASTER_READ, true);i2c_master_read(cmd,data, sizeof(data), I2C_MASTER_LAST_NACK);i2c_master_stop(cmd);esp_err_t ret = i2c_master_cmd_begin(I2C_MASTER_NUM, cmd, 1000 / portTICK_PERIOD_MS);i2c_cmd_link_delete(cmd);if (ret == ESP_OK) {uint8_t so=data[2];                      //时uint8_t soh=(so>>4)&0b00001111;i[0]=soh+0x30;                       //转为ascii 字符uint8_t sol=so&0b00001111;i[1]=sol+0x30;                         //转为ascii 字符i[2]=':';uint8_t fo=data[1];                   //分uint8_t foh=(fo>>4)&0b00001111;i[3]=foh+0x30;uint8_t fol=fo&0b00001111;i[4]=fol+0x30;i[5]=':';uint8_t mo=data[0];                      //秒uint8_t moh=(mo>>4)&0b00001111;i[6]=moh+0x30;uint8_t mol=mo&0b00001111;i[7]=mol+0x30;hxs(65,2,i,sizeof(i),0xf8);char i2[]="1;42,5:7_8.?!7a bcde";hxs(0,50,i2,sizeof(i2),0xf8);vTaskDelay(pdMS_TO_TICKS(100));}}
}

 

 


http://www.ppmy.cn/news/1518927.html

相关文章

Java分布式架构知识体系及知识体系图

Java分布式架构整体知识体系是一个庞大而复杂的领域&#xff0c;它涵盖了多个方面&#xff0c;旨在帮助开发者构建高性能、高可用、可扩展的分布式系统。以下是对Java分布式架构整体知识体系的概述&#xff1a; 一、分布式理论基础 CAP理论&#xff1a; 一致性&#xff08;Con…

Java算法之Gnome 排序

简介 Gnome 排序&#xff0c;又称为双向插入排序或鸡尾酒排序&#xff0c;是一种改进的插入排序算法。它在每次迭代中不仅将最小的元素移动到前面&#xff0c;同时也将最大的元素移动到后面。这种排序算法在每次迭代中同时向两个方向进行移动&#xff0c;因此得名。 算法步骤…

如何开发针对不平衡分类的成本敏感神经网络 python

如何开发针对不平衡分类的成本敏感神经网络 深度学习神经网络是一类灵活的机器学习算法&#xff0c;可以在各种问题上表现良好。 神经网络使用误差反向传播算法进行训练&#xff0c;该算法涉及计算模型在训练数据集上产生的误差&#xff0c;并根据这些误差的比例更新模型权重…

240831-Qwen2-VL-7B/2B部署测试

A. 运行效果 B. 配置部署 如果可以执行下面就执行下面&#xff1a; pip install githttps://github.com/huggingface/transformers accelerate否则分开执行 git clone https://github.com/huggingface/transformers cd transformers pip install . accelerate随后&#xff0…

k8s-pod 实战一 (创建pod,启动命令,参数,pod故障排除,拉取命令)

1. 创建一个Pod Pod 是 Kubernetes 中最小的部署单元。它可以包含一个或多个容器。下面是一个简单的 YAML 文件,用于创建一个包含 Nginx 容器的 Pod。 示例 YAML 文件 (nginx-pod.yaml) apiVersion: v1 kind: Pod metadata:name: nginx-pod spec:containers:- name: nginx-…

STM32(八):定时器——输入捕获实验

目录 输入捕获模式测频率&#xff1a; 结构图&#xff1a; 步骤&#xff1a; 部分函数详解&#xff1a; 源码&#xff1a; PWMI模式测频率占空比&#xff1a; 结构图&#xff1a; ​编辑 举例说明 源码&#xff1a; 输入捕获模式测频率&#xff1a; 结构图&#xf…

C#中List集合使用Remove方法详解——List使用Remove方法需要注意的坑?

目录 一、基本使用 1、简单类型的例子 2、复杂类型的例子 二、思考 三、深度解析 四、正确的使用方式 1、重写 Equals 和 GetHashCode 2、使用 LINQ 的 FirstOrDefault 方法 五、性能考虑 六、注意事项 总结 在C#中&#xff0c;List<T> 是一个常用的数据结构&…

第四章 Java核心类库 第三节 集合框架

1. 集合框架概述与结构 首先&#xff0c;我们来简单了解一下Java集合框架的概述和结构。 集合框架的定义&#xff1a;Java集合框架是一组用来存储和操作数据集合的接口和类。它提供了一种统一的标准方法来操作不同的数据集合&#xff0c;极大简化了编程任务。 集合框架的结构…

我的电脑/资源管理器里无法显示新硬盘?

前情提要 我新&#xff01;买了一个京东京造的SATA3硬盘&#xff0c;一个绿联的SATA3转USB读取 现在我的电脑里只能显示我本地的C盘和D盘&#xff0c;不能显示这个接入的SATA盘。 系统环境&#xff1a;windows11 问题描述 在我的电脑里&#xff0c;只能看到我原本的C和D&…

互联网平台大模型网络架构设计

字节跳动&#xff1a;大模型网络实践分享 自2019年起&#xff0c;字节跳动公司便开始着手白盒项目。2020年&#xff0c;推出了首款接入交换机——25G型号&#xff0c;随后逐步实现软硬件的自主研发。在当前一代产品中&#xff0c;已经实现了100G接入、25.6T400G互联&#xff0c…

扩展——双向搜索

1. 基本概念 单向搜索&#xff1a;传统的搜索算法&#xff08;如广度优先搜索 BFS、深度优先搜索 DFS&#xff09;通常从起点开始&#xff0c;逐步扩展搜索到目标节点。搜索的时间复杂度与图的大小和结构有关。 双向搜索&#xff1a;双向搜索则同时从起点和终点进行搜索&#…

分享8个Python自动化实战脚本!

1. Python自动化实战脚本 1.1 网络自动化 网络上有丰富的信息资源&#xff0c;Python可以帮我们自动化获取这些信息。 爬虫简介&#xff1a;爬虫是一种自动提取网页信息的程序。Python有许多优秀的爬虫库&#xff0c;如requests和BeautifulSoup。 案例&#xff1a;使用Pytho…

软件测试学习笔记丨静态测试与代码审计 SonarQube

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32049 一&#xff0c;SonarQube 平台搭建 1.1&#xff0c; 介绍 Sonar 是一个用于代码质量管理的开放平台。通过插件机制&#xff0c;Sonar 可以集成不同的测试工具、代码分析工具&#xff…

Having trouble using OpenAI API

题意&#xff1a;"使用OpenAI API遇到困难" 问题背景&#xff1a; I am having trouble with this code. I want to implement AI using OpenAI API in my React.js project but I cannot seem to get what the issue is. I ask it a question in the search bar in…

大语言模型数据增强与模型蒸馏解决方案

背景 在人工智能和自然语言处理领域&#xff0c;大语言模型通过训练数百亿甚至上千亿参数&#xff0c;实现了出色的文本生成、翻译、总结等任务。然而&#xff0c;这些模型的训练和推理过程需要大量的计算资源&#xff0c;使得它们的实际开发应用成本非常高&#xff1b;其次&a…

线程间数据传递之ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal

线程间数据传递之ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal 1、ThreadLocal介绍 spring 中基于 ThreadLocal 来实现事务。 多线程 访问同一个共享变量的时候容易出现并发问题&#xff0c;ThreadLocal是除了加锁这种同步方式之外的一种保证 规避多线程…

【bug记录7】导入Lottie的json格式动画,获取不到相对路径下的图片

一、问题背景 在vue3项目中&#xff0c;想把Lottie依赖的图片放在其相对路径下&#xff0c;但是发现即使修改其中的u参数&#xff0c;也无法拿到其相对路径中的图片。因为json解析绝对路径&#xff0c;只能将图片放在项目根目录下的public文件夹应急。 二、解决方法 将Lottie…

Lua 代码编码规范

lua代码格式 vscode stylua 插件 配置文件stylua.toml column_width 240 line_endings “Unix” indent_type “Spaces” --使用空格 很重要&#xff0c;保证不同编辑器打开是一样的 indent_width 4 quote_style “AutoPreferDouble” --字符串引号样式双引号 call_paren…

c++关于字符串的练习

提示并输入一个字符串&#xff0c;统计该字符串中字母个数、数字个数、空格个数、其他字符的个数 #include <iostream> #include<string> using namespace std;int main() {string s1;int letter0,digit0,space0,other0;cout<<"请输入一个字符串:"…

ISO C++ 和 GNU C++ 的区别

C 的 ios 标准和 gnu 标准是两种编译器标准或模式&#xff0c;主要由编译器在编译 C 代码时所遵循的规范决定。它们之间的区别主要在于是否包含标准之外的扩展以及对特定功能的支持。 1. ISO C 标准 (-stdc11, -stdc14, -stdc17, 等) 定义: ISO C 标准是由国际标准化组织 (IS…