STC89C52驱动XPT2046AD转换

目录

    • 简介
    • 封装
    • 接线(单端)
    • 时序以及命令字
      • SPI时序
      • 命令字
    • 程序
      • XPT2046.C
      • XPT2046.h
      • main.c
      • 测试

简介

XPT2046是一款4线电阻式触摸屏控制器,采用12位125 kHz采样SAR类型A / D转换器。XPT2046工作电压低至2.2V,支持1.5V至VCC的数字I/O接口电压以便连接低电压uP。XPT2046可以通过进行两次A/D转换来检测按下的屏幕位置。XPT2046还可以量触摸屏压力。片上VREF可用于模拟辅助输入;温度测量和电池监测,能够测量从0V到5V的电压。XPT2046也有一个片上温度传感器,XPT2046采用16引脚QFN薄封装(0.75mm高),具有工作温度范围-40°C至+85°C

XPT2046多用于触摸屏,这里只作为AD模块采集模拟电压

在这里插入图片描述

封装

在这里插入图片描述

接线(单端)

XPT2046STC
VCCVCC
XNGND
YNGND
GNDGND
VREFVCC
IOVDDVCC
DCLKP20
CSP21
DINP22
DOUTP23

在这里插入图片描述

时序以及命令字

SPI时序

在这里插入图片描述

命令字

在这里插入图片描述
在这里插入图片描述

程序

XPT2046.C

#include <STC89C5xRC.H>

sbit XPT2046_DCLK = P2^0;
sbit XPT2046_CS = P2^1;
sbit XPT2046_DIN = P2^2;
sbit XPT2046_DOUT = P2^3;

unsigned int XPT2046_ReadAD(unsigned char command)//command 命令字
{
	unsigned char i=0;
	unsigned int AD=0x00;//返回的数据 8位是0-255  12位是0-4096
	XPT2046_DCLK = 0;
	XPT2046_CS = 0;
	for(;i<8;i++)
	{
		XPT2046_DIN = command&(0x80>>i);
	  XPT2046_DCLK = 1;
		XPT2046_DCLK = 0;
	}
	for(i=0;i<16;i++)
	{
		XPT2046_DCLK = 1;
	  XPT2046_DCLK = 0;
		if(XPT2046_DOUT){AD |= (0x8000>>i);}
	}
	XPT2046_CS = 1;
	if(command&0x08)
  {
		return AD>>8;//8位
	}else
	{
		return AD>>4;//12位
	}
}

XPT2046.h

#ifndef __XPT2046_H__
#define __XPT2046_H__
//8位命令字
#define XPT2046_XP 0x9C
#define XPT2046_YP 0xDC
#define XPT2046_VBAT 0xAC
#define XPT2046_AUX 0xEC
//12位命令字 = 8位命令字-8
unsigned int XPT2046_ReadAD(unsigned char command);
#endif

main.c

#include <STC89C5xRC.H>
#include <delay.h>
#include <uart.h>
#include <XPT2046.H>

//int数据转字符数组
void IntToString_X(unsigned char Bit,unsigned char *str,unsigned int dat)//Bit:几位ad     str:字符数组地址    dat:int数据
{
	unsigned char i = 0;
	unsigned int buf[8];
	//简略取最小分辨单位  因此有一定误差 
	if(Bit == 8){dat *= 196;}//0-5V 8位 
	else if(Bit == 12){dat *= 12;}//0-5V 12位
	do { //先转换成 低位在前的十进制数组 将低位高位互换
		buf[i++] = dat % 10;
		dat /= 10;
	} while (dat > 0);
	while (i-- > 0) //将数组值转换为 ASCII 码反向拷贝到接收指针上
	{
			*str++ = buf[i] + '0';
	}
	*str = '\0';
}	

void main()
{
	unsigned char arr[8];
	char * P = arr;
	uart_init();
	while(1)
	{
		IntToString_X(8,P,XPT2046_ReadAD(XPT2046_XP));
		UART_Send(P);
		Delay_x_ms(1000);
	}
}

测试

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

休斯《公共管理导论》第5版/考研真题解析/章节题库

第一部分 考研真题精选 一、概念题二、简答题三、论述题四、案例分析题第二部分 章节题库 第1章 一个变革的时代第2章 政府的角色第3章 传统的公共行政模式第4章 公共管理第5章 公共政策第6章 治 理第7章 问 责第8章 利害关系人和外部环境第9章 管制、外包和公共企…

jenkins目录下的vue3项目——pnpm install后运行报错——奇葩问题解决

昨天到今天&#xff0c;同事那边遇到一个问题&#xff0c;就是关于vue3vite的项目&#xff0c;在执行了自动打包后&#xff0c;运行代码会提示报错的问题。 报错信息如下&#xff1a; 具体错误信息如下&#xff1a; ERROR 11:28:14 [vite] Pre-transform error: Cannot find …

Xshell连接提示“SSH服务器拒绝了密码”

原因1&#xff1a;数字锁没有打开 没有打开NumLock&#xff08;数字小键盘上面有一个【Num】按键&#xff09;&#xff0c;需要按键开启。 注意要检查NumLock灯是否亮起。 或者改成用字母键上面的数字键输入就好了。 原因2&#xff1a;root密码设置错误&#xff08;这个是比较常…

frp内网穿透服务搭建与使用

frp内网穿透服务搭建与使用 1、frp简介 frp 是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议。 可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。frp工作原理 服务端运行&#xff0c;监听一个主端口…

深入Django:用户认证与权限控制实战指南

title: 深入Django&#xff1a;用户认证与权限控制实战指南 date: 2024/5/7 18:50:33 updated: 2024/5/7 18:50:33 categories: 后端开发 tags: AuthDecoratorsPermissionsGuardianRESTAuthSessionMgmtMFA 第1章&#xff1a;入门Django与设置 1.1 Django安装与环境配置 在…

netty 高性能架构设计--零拷贝

文章目录 前言一、直接内存1.1 什么是直接内存1.2 代码实现1.3 使用直接内存的优缺点 二、netty 零拷贝设计2.1 netty 直接内存2.2 netty 内存池 三、零拷贝的两种方式 前言 本篇从源码层面剖析 netty 高性能架构设计之零拷贝&#xff0c;并且扩展讲述零拷贝的两种实现方式。 …

并发编程之阻塞队列BlockingQueue实战及其原理分析

1. 阻塞队列介绍 1.1 队列 是限定在一端进行插入&#xff0c;另一端进行删除的特殊线性表。 先进先出(FIFO)线性表。 允许出队的一端称为队头&#xff0c;允许入队的一端称为队尾。

机器学习第二天(监督学习,无监督学习,强化学习,混合学习)

1.是什么 基于数据寻找规律从而建立关系&#xff0c;进行升级&#xff0c;如果是以前的固定算式那就是符号学习了 2.基本框架 3.监督学习和无监督式学习&#xff1a; 监督学习&#xff1a;根据正确结果进行数据的训练&#xff1b; 在监督式学习中&#xff0c;训练数据包括输…

简易录制视频做3D高斯

系统环境 ubuntu20 &#xff0c;cuda11.8&#xff0c;anaconda配置好了3D高斯的环境。 具体参考3D高斯环境配置&#xff1a;https://blog.csdn.net/Son_of_the_Bronx/article/details/138527329?spm1001.2014.3001.5501 colmap安装&#xff1a;https://blog.csdn.net/Son_of…

W801学习笔记二十一:英语背单词学习应用——上

英语背单词是比较常见的学习APP&#xff0c;参考唐诗宋词应用&#xff0c;本章做一个类似的应用。 一、单词数据清洗及格式转换 诗词数据的获取渠道很多&#xff0c;一般可以按照年级来分文件。如一到九年级&#xff0c;四六级&#xff0c;雅思等等。 1、先从网上某某地方下载…

硬件设计细节1-缓冲驱动器使用注意事项

目录 一、缓冲驱动器二、实例分析1.硬件结构2.问题描述3.原因分析4.原因定位 三、结论 一、缓冲驱动器 缓冲驱动器通常用于隔离、电平转换等应用场景。在使用时&#xff0c;需要关注的点较多&#xff0c;如电平范围、频率范围、延时、控制方式、方向以及输入输出状态。通常&am…

JavaScript异步编程——03-Ajax传输json和XML

Ajax 传输 JSON JSON 的语法 JSON(JavaScript Object Notation)&#xff1a;是 ECMAScript 的子集。作用是进行数据的交换。语法更为简洁&#xff0c;网络传输、机器解析都更为迅速。 语法规则&#xff1a; 数据在键值对中 数据由逗号分隔 花括号保存对象 方括号保存数组…

弹性云服务器是什么,为何如此受欢迎

云计算作为当下炙手可热的技术领域&#xff0c;已然成为现代企业不可或缺的核心能力。云服务器作为云计算的基石之一&#xff0c;在这个数字化时代发挥着至关重要的作用。而弹性云服务器&#xff0c;作为云服务器的一种演进形式&#xff0c;更是备受瞩目。 弹性云服务器&#…

使用 GPT-4-turbo+Streamlit+wiki+calculator构建Math Agents应用【Step by Step】

&#x1f496; Brief&#xff1a;大家好&#xff0c;我是Zeeland。Tags: 大模型创业、LangChain Top Contributor、算法工程师、Promptulate founder、Python开发者。&#x1f4dd; CSDN主页&#xff1a;Zeeland&#x1f525;&#x1f4e3; 个人说明书&#xff1a;Zeeland&…

自动化运维管理工具 Ansible-----【inventory 主机清单和playbook剧本】

目录 一、inventory 主机清单 1.1inventory 中的变量 1.1.1主机变量 1.1.2组变量 1.1.3组嵌套 二、Ansible 的脚本 ------ playbook&#xff08;剧本&#xff09; 2.1 playbook介绍 2.2playbook格式 2.3playbooks 的组成 2.4playbook编写 2.5运行playbook 2.5.1ans…

学习笔记:【QC】Android Q qmi扩展nvReadItem/nvWriteItem

一、qmi初始化 流程图 初始化流程: 1、主入口&#xff1a; vendor/qcom/proprietary/qcril-hal/qcrild/qcrild/rild.c int main(int argc, char **argv) { const RIL_RadioFunctions *(*rilInit)(const struct RIL_Env *, int, char **); rilInit RIL_Init; funcs rilInit…

【Linux】Linux线程

一、Linux线程的概念 1.什么是线程 1.一个进程的一个执行线路叫做线程&#xff0c;线程的一个进程内部的控制序列。 2.一个进程至少有一个执行线程 3.线程在进程内部&#xff0c;本质是在进程地址空间内运行 4.操作系统将进程虚拟地址空间的资源分配给每个执行流&#xff0…

基于51单片机的闭环反馈直流电机PWM控制电机转速测量( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机的闭环反馈直流电机PWM控制转速测量( proteus仿真程序设计报告原理图讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0086 1. 主要功能&#xff1a; 基于51单片机的闭环…

js宏任务微任务输出解析

第一种情况 setTimeout(function () {console.log(setTimeout 1) //11 宏任务new Promise(function (resolve) {console.log(promise 1) //12 同步函数resolve()}).then(function () {console.log(promise then) //13 微任务})})async function async1() {console.log(async1 s…

语音识别--使用YAMNet识别环境音

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…