【单片机】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~AIN10为模拟输入端; 15——CS 为片选端; 17——DIN 为串行数据输入端;(控制字输入端,用于选择转换及输出数据格式) 16——…...
誉天HCIE-Cloud_Computing3.0课程简介
课时:60 第一天 1. 华为云 Stack 解决方案及架构介绍 3. 华为云 Stack 的安装流程解析及规划设计 4. 华为云 Stack 的网络平面的规划解析 5. 华为云 Stack Deploy 部署工具的安装,配置,创建工程,下载 LLD 表 6. 华为云 Stack 的 …...
Unity之ShaderGraph 节点介绍 Procedural节点
程序化 噪声Gradient Noise(渐变或柏林噪声)Simple Noise(简单噪声)Voronoi(Voronoi 噪声) 形状Ellipse(椭圆形)Polygon(正多边形)Rectangle(矩形…...
期权定价模型系列【1】—BSM通用式模型
这是期权定价模型专栏的第一篇文章,此专栏旨在分享一些期权定价模型,将会从最基础的BSM模型开始写起,逐步扩散到蒙特卡洛模拟、二叉树等数值法模型,以及跳跃扩散模型、随机波动率模型,神经网络模型等等。 如果你觉得有…...
HA3 SQL样本实验:一种混合计算查询的全新样本解决方案
作者:陆唯一(芜霜) HA3(对外开源代号:Havenask )是阿里智能引擎团队自研的大规模分布式检索系统,广泛应用于阿里内部的搜索业务,是十多年来阿里在电商领域积累下来的核心竞争力产品。Ha3 SQL 是在原有Ha3引…...
Linux(Web与html)
域名 DNS与域名: 网络是基于tcp/ip协议进行通信和连接的 tcp/ip协议是五层协议:应用层–传输层—网络层----数据链路层----物理层每一台主机都有一个唯一的地址标识(固定的ip地址,用于区分用户和计算机。 ip地址:由…...
SpringBoot 底层机制分析[上]
文章目录 分析SpringBoot 底层机制【Tomcat 启动分析Spring 容器初始化Tomcat 如何关联Spring 容器】[上]搭建SpringBoot 底层机制开发环境Configuration Bean 会发生什么,并分析机制提出问题:SpringBoot 是怎么启动Tomcat ,并可以支持访问C…...
电源控制--对数与db分贝
在控制理论中,"db"通常表示分贝(decibel)的缩写。分贝是一种用于度量信号强度、增益或衰减的单位。 在控制系统中,分贝常用于描述信号的增益或衰减。通常,增益以正数的分贝值表示,而衰减以负数的…...
LeetCode 1749. 任意子数组和的绝对值的最大值(前缀和)
题目: 链接:LeetCode 1749. 任意子数组和的绝对值的最大值 难度:中等 给你一个整数数组 nums 。一个子数组 [numsl, numsl1, …, numsr-1, numsr] 的 和的绝对值 为 abs(numsl numsl1 … numsr-1 numsr) 。 请你找出 nums 中 和的绝对…...
python爬虫相关
目录 初识爬虫 爬虫分类 网络爬虫原理 爬虫基本工作流程 搜索引擎获取新网站的url robots.txt HTHP协议 Resquests模块 前言: 安装 普通请求 会话请求 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组件实现(待优化)3. 使用组件4. 我的配置文件 二、springboot 回调代码1. 本地存储 三、效果展示踩坑总结问题1问题2 前言 对接onlyoffice,实现文档的预览和在线编辑功能。 一、vue ts …...
Win10语言设置 - 显示语言和应用语言
前言 Win10的语言设置可以设置显示语言和应用语言。其中,显示语言用于显示系统文字;应用语言用于应用程序显示文字。下文介绍如何设置。 显示语言 打开系统设置,选择时间和语言,如下图: 修改Windows显示语言即可更…...
RxJava的前世【RxJava系列之设计模式】
一. 前言 学习RxJava,少不了介绍它的设计模式。但我看大部分文章,都是先将其用法介绍一通,然后再结合其用法,讲解其设计模式。这样当然有很多好处,但我个人觉得,这种介绍方式,对于没有接触过Rx…...
sql 语句 字段字符串操作
substring_index() 函数 字符串截取 表达式:substring_index(column,str,count) 释义:截取字符串column,str出现从前往后数第count次,之前的所有字符 示例语句:SELECT substring_index(‘www.baidu.com’,‘.’,2) 结…...
【网络工程】网络流量分析工具 Wireshark
文章目录 第一章:WireShark介绍第二章:WireShark应用第三章:Wireshark 实战 第一章:WireShark介绍 Wireshark (前身 Ethereal):它是一个强大的网络封包分析软件工具 ! 此工具使用WinPCAP作为接口,直接与网卡…...
数据库总结
第一章绪论 一、数据库系统概述 1. 数据库的4个基本概念 1.数据:数据库中存储的基本对象,描述事物的符号记录。 2.数据库:长期储存在计算机内、有组织的、可共享的大量数据的集合。较小的冗余度、较高的数据独立性、易扩展性 3.数据库管…...
虹科方案 | 成都大运会进行时,保障大型活动无线电安全需要…
成都大运会 7月28日,备受关注的第31届世界大学生夏季运动会在成都正式开幕。据悉,这是全球首个5G加持的智慧大运会,也是众多成熟信息技术的综合“应用场”。使用基于5G三千兆、云网、8K超高清视频等技术,在比赛现场搭建多路8K摄像…...
【C语言】扫雷 小游戏
文章目录 一、游戏规则二、 代码逻辑三、游戏实现1. 游戏菜单设计2.设计雷区并随机布置雷(1) 设置雷区(2) 布置雷 3.排查雷 四、源码 一、游戏规则 1. 在9*9的小格子中,任意选取一个坐标(格子),选择后发现,如果没点中雷…...
Jmeter(六) - 从入门到精通 - 建立数据库测试计划(详解教程)
1.简介 在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,因此这篇文章主要介绍了jmeter连接和创建数据库测试计划的过程,在文中通过示例和代码非常详细地介绍给大家,希望对各位小伙…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...
