当前位置: 首页 > news >正文

【单片机】51单片机,TLC2543,驱动程序,读取adc

在这里插入图片描述
TLC2543 是一款 12 位精密模数转换器 (ADC)。

1~9、11、12——AIN0~AIN10为模拟输入端;

15——CS 为片选端;

17——DIN 为串行数据输入端;(控制字输入端,用于选择转换及输出数据格式)

16——DOUT为A/D转换结果的三态串行输出端;(A/D转换结果的输出端。)

19——EOC为转换结束端;

18——CLK为I/O时钟;(控制输入输出的时钟,由外部输入。)

14——REF+为正基准电压端;

13——REF-为负基准电压端;

20——VCC为电源;

10——GND为地。

/************************************************************************ 说明:摇杆实验。摇动摇杆,查看显示屏上AD值变化。**********************************************************************/#include "STC89C5xRC.h"                 /* 此文件中定义了单片机的一些特殊功能寄存器 */
#include "OLED.h"                       /* OLED头文件 */
/* #include "Codedat.h" */
#define uint	unsigned int            /* 对数据类型进行声明定义 */
#define uchar	unsigned charsbit beep = P2 ^ 4;                     /* 定义蜂鸣器触发脚 *//***************************************      2543控制引脚宏定义*************************************/
sbit	CLOCK	= P3 ^ 5;               /*2543时钟*/
sbit	D_IN	= P4 ^ 0; /*2543输入*/    /* 【注意:此处是口袋实验室连接引脚】 */
sbit	D_OUT	= P0 ^ 2;               /*2543输出*/
sbit	_CS	= P3 ^ 4;               /*2543片选*/sbit	DIG1	= P0 ^ 0;               /* 数码管位选1 */
sbit	DIG2	= P0 ^ 1;               /* 数码管位选2 */
sbit	key1	= P3 ^ 2;               /* 摇杆A按键 */
sbit	key2	= P3 ^ 3;               /* 摇杆B按键 */#define led P1                          /* 将P1口定义为led 后面就可以使用led代替P0口 *//*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,本延时函数延时较短,可以较快刷新屏幕
*					 当然也可以使用OLED.h定义的delay_ms()函数
*******************************************************************************/
void delay( int ms )
{int ii, jj;if ( ms < 1 )ms = 1;for ( ii = 0; ii < ms; ii++ )for ( jj = 0; jj < 500; jj++ );
}/*******************************************************************************
* 函 数 名         : read2543
* 函数功能		   : TLC2543驱动模块
* 输    入         : port		通道号
* 输    出         : ad			转换值
* 说    明         :请结合TLC2543芯片手册和下方注释理解
*******************************************************************************/
uint read2543( uchar port )
{uint ad = 0, i;CLOCK	= 0;_CS	= 0;port	<<= 4;                          /*选通道。高四位代表AD通道,低四位自动补0 *//*这里的for,其实就算_CS变低后,时钟IO_Clock和Data_Input使能,Data_Out脱离高阻状态。* 12个时钟信号依次输入。随着时钟信号的输入,控制字从Data_Input一位一位地在时钟信号上升沿时* 送入TLC2543(注意:高位先入),这里的控制字是通道选择(port),从A0-A10共11个通道,* (分别对应0000至1010,高四位就是存放模拟通道输入选择的数据)* 同时,上一周期转换的AD数据,即输出数据寄存器中的数据从Data_Out一位一位地移出(下降沿时)* (第一次_CS=0时输出第一位,其他的跟着for内的下降沿输出)*/for ( i = 0; i < 12; i++ )              /* 进行12次(12位)的数据推送 */{if ( D_OUT )ad |= 0x01;             /* 相当于每次检出输出1时。最低位就给1,否则给0 */D_IN	= (bit) (port & 0x80);  /* 相当于只取最高位进行与运算 */CLOCK	= 1;                    /* 电平抬高 */delay( 3 );                     /* 延时 */CLOCK = 0;                      /* 给低电平 */delay( 3 );                     /* 延时。这里是给一个完整周期的脉冲 */port	<<= 1;ad	<<= 1;                  /* 左移一位,为下一次for循环做准备 */}_CS	= 1;                            /* 片选端置高,则IO_Clock和Data_Input禁止,Data_Out高阻,EOC置高 */ad	>>= 1;                          /*上面最后一次for循环多移了一次现在移回来 */return(ad);                             /* 返回转换值 */
}/*******************************************************************************
* 函 数 名         : ad_number
* 函数功能		   : AD值数值拆分函数
* 输    入         : i	通道   y 显示行坐标
* 输    出         : 无
*******************************************************************************/
void ad_number( uchar i, uchar y )
{uint ad;ad = read2543( i ); /* 这里得到的是AD值(0~4095) */OLED_ShowNum( 63, y, ad, 4, 16 );
}/*******************************************************************************
* 函 数 名         : Int1Init()
* 函数功能		   : 设置外部中断1    [P3.3]
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Int0Init()
{/* 设置INT0 */IT0	= 1;    /* 跳变沿出发方式(下降沿) */EX0	= 1;    /* 打开INT0的中断允许。 */EA	= 1;    /* 打开总中断 */
}/*******************************************************************************
* 函 数 名         : Int1Init()
* 函数功能		   : 设置外部中断1    [P3.3]
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Int1Init()
{/* 设置INT1 */IT1	= 1;    /* 跳变沿出发方式(下降沿) */EX1	= 1;    /* 打开INT1的中断允许。 */EA	= 1;    /* 打开总中断 */
}/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main( void )
{Int0Init();     /* 外部中断0初始化 */Int1Init();     /* 外部中断1初始化 */beep	= 0;    /* 蜂鸣器不响 */DIG1	= 0;    /* 禁止数码管十位亮 */DIG2	= 0;    /* 禁止数码管个位亮 */delay( 300 );   /*上电后等待系统稳定 */OLED_Init();    /* OLED初始化 */OLED_ShowString( 24, 0, "A-X:", 16 );OLED_ShowString( 24, 2, "A-Y:", 16 );OLED_ShowString( 24, 4, "B-X:", 16 );OLED_ShowString( 24, 6, "B-Y:", 16 );led = 0xff;     /* LED全灭 */while ( 1 ){ad_number( 7, 4 );ad_number( 8, 2 );ad_number( 9, 0 );ad_number( 10, 6 );}
}/*******************************************************************************
* 函 数 名         : Int0()	interrupt 0
* 函数功能		   : 外部中断1的中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/void Int0()interrupt 0                     /* 外部中断1的中断函数 */
{
delay( 40 );            /* 延时消抖 */
if ( key1 == 0 )        /* 如果按键按下 */
{
beep = ~beep;   /* 蜂鸣器响/不响 */
}
}/*******************************************************************************
* 函 数 名         : Int1()	interrupt 2
* 函数功能		   : 外部中断1的中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Int1() interrupt 2         /* 外部中断1的中断函数 */
{
delay( 40 );            /* 延时消抖 */
if ( key2 == 0 )        /* 如果按键按下 */
{
led = ~led;     /* LED全亮/灭 */
}
}

相关文章:

【单片机】51单片机,TLC2543,驱动程序,读取adc

TLC2543 是一款 12 位精密模数转换器 (ADC)。 1~9、11、12——AIN0&#xff5e;AIN10为模拟输入端&#xff1b; 15——CS 为片选端&#xff1b; 17——DIN 为串行数据输入端&#xff1b;&#xff08;控制字输入端&#xff0c;用于选择转换及输出数据格式&#xff09; 16——…...

誉天HCIE-Cloud_Computing3.0课程简介

课时&#xff1a;60 第一天 1. 华为云 Stack 解决方案及架构介绍 3. 华为云 Stack 的安装流程解析及规划设计 4. 华为云 Stack 的网络平面的规划解析 5. 华为云 Stack Deploy 部署工具的安装&#xff0c;配置&#xff0c;创建工程&#xff0c;下载 LLD 表 6. 华为云 Stack 的 …...

Unity之ShaderGraph 节点介绍 Procedural节点

程序化 噪声Gradient Noise&#xff08;渐变或柏林噪声&#xff09;Simple Noise&#xff08;简单噪声&#xff09;Voronoi&#xff08;Voronoi 噪声&#xff09; 形状Ellipse&#xff08;椭圆形&#xff09;Polygon&#xff08;正多边形&#xff09;Rectangle&#xff08;矩形…...

期权定价模型系列【1】—BSM通用式模型

这是期权定价模型专栏的第一篇文章&#xff0c;此专栏旨在分享一些期权定价模型&#xff0c;将会从最基础的BSM模型开始写起&#xff0c;逐步扩散到蒙特卡洛模拟、二叉树等数值法模型&#xff0c;以及跳跃扩散模型、随机波动率模型&#xff0c;神经网络模型等等。 如果你觉得有…...

HA3 SQL样本实验:一种混合计算查询的全新样本解决方案

作者&#xff1a;陆唯一(芜霜) HA3&#xff08;对外开源代号&#xff1a;Havenask &#xff09;是阿里智能引擎团队自研的大规模分布式检索系统&#xff0c;广泛应用于阿里内部的搜索业务&#xff0c;是十多年来阿里在电商领域积累下来的核心竞争力产品。Ha3 SQL 是在原有Ha3引…...

Linux(Web与html)

域名 DNS与域名&#xff1a; 网络是基于tcp/ip协议进行通信和连接的 tcp/ip协议是五层协议&#xff1a;应用层–传输层—网络层----数据链路层----物理层每一台主机都有一个唯一的地址标识&#xff08;固定的ip地址&#xff0c;用于区分用户和计算机。 ip地址&#xff1a;由…...

SpringBoot 底层机制分析[上]

文章目录 分析SpringBoot 底层机制【Tomcat 启动分析Spring 容器初始化Tomcat 如何关联Spring 容器】[上]搭建SpringBoot 底层机制开发环境Configuration Bean 会发生什么&#xff0c;并分析机制提出问题&#xff1a;SpringBoot 是怎么启动Tomcat &#xff0c;并可以支持访问C…...

电源控制--对数与db分贝

在控制理论中&#xff0c;"db"通常表示分贝&#xff08;decibel&#xff09;的缩写。分贝是一种用于度量信号强度、增益或衰减的单位。 在控制系统中&#xff0c;分贝常用于描述信号的增益或衰减。通常&#xff0c;增益以正数的分贝值表示&#xff0c;而衰减以负数的…...

LeetCode 1749. 任意子数组和的绝对值的最大值(前缀和)

题目&#xff1a; 链接&#xff1a;LeetCode 1749. 任意子数组和的绝对值的最大值 难度&#xff1a;中等 给你一个整数数组 nums 。一个子数组 [numsl, numsl1, …, numsr-1, numsr] 的 和的绝对值 为 abs(numsl numsl1 … numsr-1 numsr) 。 请你找出 nums 中 和的绝对…...

python爬虫相关

目录 初识爬虫 爬虫分类 网络爬虫原理 爬虫基本工作流程 搜索引擎获取新网站的url robots.txt HTHP协议 Resquests模块 前言&#xff1a; 安装 普通请求 会话请求 response的常用方法 简单案例 aiohttp模块 使用前安装模块 具体案例 数据解析 re解析 bs4…...

PAT(Advanced Level) Practice(with python)——1023 Have Fun with Numbers

Code N int(input()) D_N 2*N # print(Yes)if len(str(D_N))>len(str(N)):print(No) else:for s in str(D_N):if s not in str(N) or str(D_N).count(s)!str(N).count(s):print("No")breakelse:print(Yes) print(D_N)...

springboot vue 初步集成onlyoffice

文章目录 前言一、vue ts1. 安装依赖2. onlyoffice组件实现&#xff08;待优化&#xff09;3. 使用组件4. 我的配置文件 二、springboot 回调代码1. 本地存储 三、效果展示踩坑总结问题1问题2 前言 对接onlyoffice&#xff0c;实现文档的预览和在线编辑功能。 一、vue ts …...

Win10语言设置 - 显示语言和应用语言

前言 Win10的语言设置可以设置显示语言和应用语言。其中&#xff0c;显示语言用于显示系统文字&#xff1b;应用语言用于应用程序显示文字。下文介绍如何设置。 显示语言 打开系统设置&#xff0c;选择时间和语言&#xff0c;如下图&#xff1a; 修改Windows显示语言即可更…...

RxJava的前世【RxJava系列之设计模式】

一. 前言 学习RxJava&#xff0c;少不了介绍它的设计模式。但我看大部分文章&#xff0c;都是先将其用法介绍一通&#xff0c;然后再结合其用法&#xff0c;讲解其设计模式。这样当然有很多好处&#xff0c;但我个人觉得&#xff0c;这种介绍方式&#xff0c;对于没有接触过Rx…...

sql 语句 字段字符串操作

substring_index() 函数 字符串截取 表达式&#xff1a;substring_index(column,str,count) 释义&#xff1a;截取字符串column&#xff0c;str出现从前往后数第count次&#xff0c;之前的所有字符 示例语句&#xff1a;SELECT substring_index(‘www.baidu.com’,‘.’,2) 结…...

【网络工程】网络流量分析工具 Wireshark

文章目录 第一章&#xff1a;WireShark介绍第二章&#xff1a;WireShark应用第三章&#xff1a;Wireshark 实战 第一章&#xff1a;WireShark介绍 Wireshark (前身 Ethereal)&#xff1a;它是一个强大的网络封包分析软件工具 ! 此工具使用WinPCAP作为接口&#xff0c;直接与网卡…...

数据库总结

第一章绪论 一、数据库系统概述 1. 数据库的4个基本概念 1.数据&#xff1a;数据库中存储的基本对象&#xff0c;描述事物的符号记录。 2.数据库&#xff1a;长期储存在计算机内、有组织的、可共享的大量数据的集合。较小的冗余度、较高的数据独立性、易扩展性 3.数据库管…...

虹科方案 | 成都大运会进行时,保障大型活动无线电安全需要…

成都大运会 7月28日&#xff0c;备受关注的第31届世界大学生夏季运动会在成都正式开幕。据悉&#xff0c;这是全球首个5G加持的智慧大运会&#xff0c;也是众多成熟信息技术的综合“应用场”。使用基于5G三千兆、云网、8K超高清视频等技术&#xff0c;在比赛现场搭建多路8K摄像…...

【C语言】扫雷 小游戏

文章目录 一、游戏规则二、 代码逻辑三、游戏实现1. 游戏菜单设计2.设计雷区并随机布置雷(1) 设置雷区(2) 布置雷 3.排查雷 四、源码 一、游戏规则 1. 在9*9的小格子中&#xff0c;任意选取一个坐标&#xff08;格子&#xff09;&#xff0c;选择后发现&#xff0c;如果没点中雷…...

Jmeter(六) - 从入门到精通 - 建立数据库测试计划(详解教程)

1.简介 在实际工作中&#xff0c;我们经常会听到数据库的性能和稳定性等等&#xff0c;这些有时候也需要测试工程师去评估和测试&#xff0c;因此这篇文章主要介绍了jmeter连接和创建数据库测试计划的过程,在文中通过示例和代码非常详细地介绍给大家&#xff0c;希望对各位小伙…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...