wordpress 代码分享/seo技术中心

wordpress 代码分享,seo技术中心,延安做网站的公司,购物网站首页图片使用买来的 st7789LCD 显示器背面就带着一个 tf 卡槽,可以直接连接 tf 卡。使用 Sdfat 库就可以实现对 sd 卡的读写操作。这里尝试测试 sd 卡的读写功能。 LCD 显示器的初始化 //定义LCD的对象 Adafruit_ST7789 tft Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);tf…

使用买来的 st7789LCD 显示器背面就带着一个 tf 卡槽,可以直接连接 tf 卡。使用 Sdfat 库就可以实现对 sd 卡的读写操作。这里尝试测试 sd 卡的读写功能。

LCD 显示器的初始化

//定义LCD的对象
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);tft.init(240, 320); // 初始化ST7789 240x320
tft.fillScreen(ST77XX_BLACK); // 用黑色填充屏幕
tft.setTextColor(ST77XX_WHITE); // 设置文本颜色为白色
tft.setTextSize(2); // 设置文本大小
tft.setCursor(0, 0); // 设置文本起始位置
tft.println("SD read and write test");

SD 卡初始化

//定义SD卡对象
SdFat sd;if (!sd.begin(SD_CS, SD_SCK_MHZ(10))) {Serial.println("SD卡初始化失败!");tft.setTextColor(ST77XX_RED);tft.println("SDcard init failed");tft.println("Please check the connection and card");while (1); // 失败时停止
}

SD 卡写

SdFile writeFile;if (!writeFile.open(FILENAME, O_WRITE | O_CREAT | O_TRUNC)) {Serial.println("无法创建文件");tft.println("Cannot create file");while (1);
}writeFile.println(message);
writeFile.close();

SD 卡读

这里预留的 buffer 已经假设读取的数据不会超过 99 个字符!

SdFile readFile;if (!readFile.open(FILENAME, O_READ)) {Serial.println("无法打开文件进行读取");tft.println("Cannot open file for reading");while (1);
}char buffer[100]; // 足够大的缓冲区,以容纳消息
int bytesRead = readFile.read(buffer, sizeof(buffer) - 1);if (bytesRead > 0) {buffer[bytesRead] = 0; // 添加字符串结束符Serial.println(buffer);// 在LCD上显示读取的消息tft.setTextColor(ST77XX_GREEN);tft.println(buffer);
} else {Serial.println("读取失败!");tft.println("Read failed!");
}readFile.close();

完整程序

尝试向 sd 卡写入文件,读取文件,并在 lcd 卡上打印。示例程序如下:

#include <SdFat.h>
#include <Adafruit_GFX.h>    // 核心图形库
#include <Adafruit_ST7789.h> // ST7789硬件特定库// 定义引脚
#define SD_CS   7  // SD卡片选引脚
#define TFT_CS  10 // TFT片选引脚
#define TFT_DC  9  // TFT数据/命令引脚
#define TFT_RST 8  // TFT复位引脚// 创建SD卡和LCD对象
SdFat sd;
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);// 文件名定义
#define FILENAME "message.txt"// 要写入的消息
const char* message = "Hello from SD card! hello world!";void setup() {// 初始化串口Serial.begin(115200);delay(1000);Serial.println("初始化SD卡和LCD...");// 初始化LCDtft.init(240, 320); // 初始化ST7789 240x320tft.fillScreen(ST77XX_BLACK); // 用黑色填充屏幕tft.setTextColor(ST77XX_WHITE); // 设置文本颜色为白色tft.setTextSize(2); // 设置文本大小tft.setCursor(0, 0); // 设置文本起始位置tft.println("SD read and write test");delay(1000);// 初始化SD卡if (!sd.begin(SD_CS, SD_SCK_MHZ(10))) {Serial.println("SD卡初始化失败!");tft.setTextColor(ST77XX_RED);tft.println("SDcard init failed");tft.println("Please check the connection and card");while (1); // 失败时停止}Serial.println("SDcard init success!");tft.println("SDcard init success!");delay(1000);// 打开文件进行写入SdFile writeFile;if (!writeFile.open(FILENAME, O_WRITE | O_CREAT | O_TRUNC)) {Serial.println("无法创建文件");tft.println("Cannot create file");while (1);}// 写入消息Serial.print("写入消息: ");Serial.println(message);tft.println("Writing message...");delay(1000);writeFile.println(message);writeFile.close();Serial.println("消息写入成功!");tft.println("Message written successfully!");// 打开文件进行读取SdFile readFile;if (!readFile.open(FILENAME, O_READ)) {Serial.println("无法打开文件进行读取");tft.println("Cannot open file for reading");while (1);}// 读取消息Serial.println("读取消息:");tft.println("Reading message...");delay(1000);char buffer[100]; // 足够大的缓冲区,以容纳消息int bytesRead = readFile.read(buffer, sizeof(buffer) - 1);if (bytesRead > 0) {buffer[bytesRead] = 0; // 添加字符串结束符Serial.println(buffer);// 在LCD上显示读取的消息tft.setTextColor(ST77XX_GREEN);tft.println(buffer);} else {Serial.println("读取失败!");tft.println("Read failed!");}readFile.close();Serial.println("操作完成!");tft.println("Operation completed!");
}void loop() {// 主循环为空
}

当前显示字号为 2,对于Adafruit GFX 默认字体使用的是5x7像素的字体,但行和字符间又会有 1 个像素的间距,因此可以认为默认情况下一个字符占据 6×8 像素的空间。因此对于一个 240×320 的 LCD 来说,字号为 2 的显示方式(12 ×16),一个屏幕最多显示 400 个字符。

并且 adafruit 库对于中文字符支持不友好,当前只能显示英文。

adafruit 的 GFX 库中提供获取光标 XY 坐标的 API:

  • **getCursorX****:**获取光标X坐标
  • **getCursorY****:**获取光标Y坐标

参考链接:

Adafruit GFX Library: Adafruit_GFX Class Reference

参考讨论:

Just a moment…

例如,可以在上面的程序中加入以下代码:

  tft.print("Operation completed");int cursorX = tft.getCursorX();int cursorY = tft.getCursorY();tft.println("(X: " + String(cursorX) + ", Y: " + String(cursorY) + ")");

就可以打印出Operation completed 结束时的光标位置。

注意,这里使用 print 打印,而不是 println,因为 prtinln 会默认另起一行。

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

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

相关文章

【武汉·4月11日】Parasoft联合光庭信息研讨会|邀您共探AI赋能新机遇

Parasoft联合光庭信息Workshop邀您共探AI赋能新机遇 AI浪潮已至&#xff0c;你准备好了吗&#xff1f; 在智能网联汽车飞速发展的今天&#xff0c;AI技术正以前所未有的速度重塑行业生态。如何把握AI机遇&#xff0c;赋能企业创新&#xff1f; 4月11日&#xff0c;自动化软件…

防火墙带宽管理

拓扑 配置 [fw]interface GigabitEthernet 0/0/0 [fw-GigabitEthernet0/0/0]service-manage all permit [fw]interface GigabitEthernet 1/0/0 [fw-GigabitEthernet1/0/0]ip address 12.0.0.1 24 [fw]interface GigabitEthernet 1/0/1 [fw-GigabitEthernet1/0/1]ip ad…

一人系统 之 为什么要做一人系统?

一人系统 之 赚钱认知篇&#xff08;下&#xff09; 本文 2119个字&#xff0c;大概阅读时间 16分钟。 在上一篇文章中&#xff0c;主要讲了以下三个内容&#xff1a; 什么是好的工作&#xff1f;时薪高&#xff0c;并且有能力提升&#xff0c;而且最终可以独立创业的工作&…

基于springboot的电影院管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 互联网技术的成熟和普及&#xff0c;势必会给人们的生活方式带来不同程度的改变。越来越多的经营模式中都少不了线上运营&#xff0c;互联网正强力推动着社会和经济发展。国人对民族文化的自信和不同文化的包容&#xff0c;再加上电影行业的发展&#xff0c;如此繁荣吸引…

Java安全-类的动态加载

类的加载过程 先在方法区找class信息&#xff0c;有的话直接调用&#xff0c;没有的话则使用类加载器加载到方法区(静态成员放在静态区&#xff0c;非静态成功放在非静态区)&#xff0c;静态代码块在类加载时自动执行代码&#xff0c;非静态的不执行;先父类后子类&#xff0c;…

ROS多机通信功能包——Multibotnet

引言 这是之前看到一位大佬做的集群通信中间件&#xff0c;突发奇想&#xff0c;自己也来做一个&#xff0c;实现更多的功能、更清楚的架构和性能更加高效的ROS多机通信的功能包 链接&#xff1a;https://blog.csdn.net/benchuspx/article/details/128576723 Multibotnet Mu…

C++:背包问题习题

1. 货币系统 1371. 货币系统 - AcWing题库 给定 V 种货币&#xff08;单位&#xff1a;元&#xff09;&#xff0c;每种货币使用的次数不限。 不同种类的货币&#xff0c;面值可能是相同的。 现在&#xff0c;要你用这 V 种货币凑出 N 元钱&#xff0c;请问共有多少种不同的…

IT工具 | node.js 进程管理工具 PM2 大升级!支持 Bun.js

P(rocess)M(anager)2 是一个 node.js 下的进程管理器&#xff0c;内置负载均衡&#xff0c;支持应用自动重启&#xff0c;常用于生产环境运行 node.js 应用&#xff0c;非常好用&#x1f44d; &#x1f33c;概述 2025-03-15日&#xff0c;PM2发布最新版本v6.0.5&#xff0c;这…

【数据分享】2014-2024年我国各城市逐年空气质量指数(AQI)数据

空气质量指数&#xff08;AQI&#xff09;是一个衡量空气污染程度的综合指标&#xff0c;它并不直接表示具体污染物的浓度值&#xff0c;而是基于多种污染物的浓度进行的综合评价&#xff0c;具体基于六种主要污染物的浓度&#xff1a;PM2.5、PM10、SO₂、NO₂、O₃和CO。AQI是…

【C++】深入理解list迭代器的设计与实现

深入理解list迭代器的设计与实现 引言1、链表基础结构2、链表迭代器的封装2.1 初步封装迭代器类2.2 引入const迭代器2.2.1 参考STL源代码2.2.2 完善迭代器 3、迭代器实现机制结语 引言 在STL容器中&#xff0c;list作为经典的双向链表容器&#xff0c;其迭代器设计体现了C模板编…

磁盘清理工具-TreeSize Free介绍

TreeSizeFree是一个磁盘空间管理工具&#xff0c;主要用于分析磁盘使用情况&#xff0c;帮助用户找到占用空间大的文件和文件夹: 特点&#xff1a;按大小排序&#xff1a;快速找到占用空间最大的文件或文件夹 一般可以删除: 扫描 C:\Users\XXX\AppData\Local\Temp 或 C:\Window…

OpenCV中距离公式

一、各类距离公式总结 常见距离公式 欧氏距离&#xff1a; 曼哈顿距离&#xff08;L1&#xff09;‌&#xff1a; 切比雪夫距离&#xff08;Chessboard&#xff09;‌&#xff1a; 1、点与点距离(欧氏距离) ‌二维空间‌ 设两点坐标为 P1(x1,y1)、P2(x2,y2)&#xff0c;其距离…

Vue.js 模板语法全解析:从基础到实战应用

引言 在 Vue.js 的开发体系中&#xff0c;模板语法是构建用户界面的核心要素&#xff0c;它让开发者能够高效地将数据与 DOM 进行绑定&#xff0c;实现动态交互效果。通过对《Vue.js 快速入门实战》中关于 Vue 项目部署章节&#xff08;实际围绕 Vue 模板语法展开&#xff09;…

论文笔记(七十三)Gemini Robotics: Bringing AI into the Physical World

Gemini Robotics: Bringing AI into the Physical World 文章概括1. 引言2. Gemini 2.0的具身推理2.1. 具身推理问答&#xff08;ERQA&#xff09;基准测试2.2. Gemini 2.0的具身推理能力2.3. Gemini 2.0支持零样本和少样本机器人控制 3. 使用 Gemini Robotics 执行机器人动作3…

centos7搭建postgresql12主从

主从搭建 192.168.159.101 node1 主库&#xff08;读写&#xff09; 192.168.159.102 node2 备库&#xff08;只读&#xff09; 两台机器首先安装postgrsql 主库 postgres用户操作&#xff1a; 修改postgresql.conf # 在文件中修改(此配置仅用于远程访问, 流复制后续还有额外…

996引擎-接口测试:背包

996引擎-接口测试:背包 背包测试NPC参考资料背包测试NPC CONSTANT = require("Envir/QuestDiary/constant/CONSTANT.lua"); MsgUtil = require("Envir/QuestDiary/utils/996/MsgUtil.lua");

vulnhub靶场之【hack-me-please靶机】

前言 靶机&#xff1a;billu_b0x2靶机&#xff0c;IP地址为192.168.10.8 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.6 靶机和攻击机都采用VMware虚拟机&#xff0c;都采用桥接网卡模式 文章涉及的靶机及工具&#xff0c;都可以自行访问官网或者项目地址进行获取&…

机器学习——KNN模型评价

一、主要函数 sklearn.metrics.accuracy_score() 是 scikit-learn 中用于计算分类模型准确率的函数&#xff0c;适用于评估分类任务的整体性能。 1、核心功能 作用&#xff1a;计算模型预测的准确率&#xff0c;即正确分类的样本数占总样本数的比例。公式&#xff1a;Accurac…

美国国家数据浮标中心(NDBC)

No.大剑师精品GIS教程推荐0地图渲染基础- 【WebGL 教程】 - 【Canvas 教程】 - 【SVG 教程】 1Openlayers 【入门教程】 - 【源代码示例 300】 2Leaflet 【入门教程】 - 【源代码图文示例 150】 3MapboxGL【入门教程】 - 【源代码图文示例150】 4Cesium 【入门教程】…

Qt调用Miniconda的python方法

1、 Win 64环境下载及安装 Miniconda 首先下载Windows 版Miniconda&#xff0c;https://docs.conda.io/en/latest/miniconda.html或 https://repo.anaconda.com/miniconda/ 安装界面及选择如下图所示&#xff1a; 安装完python3.12版报错如下。 说明&#xff1a;python3.11版…