AD/DA介绍
硬件电路模型
运算放大器
运算放大电路
DA原理
AD原理
AD/DA性能指标
XPT2016芯片时序
AD采集可调电阻、热敏电阻、光敏电阻
main.c
#include #include "Delay.h"
#include "LCD1602.h"
#include "XPT2046.h"
unsigned int ADValue;
void main(void)
{
LCD_Init();
LCD_ShowString(1,1,"ADJ NTC GR");
while(1)
{
ADValue=XPT2046_ReadAD(XPT2046_XP); //读取AIN0,可调电阻
LCD_ShowNum(2,1,ADValue,3); //显示AIN0
ADValue=XPT2046_ReadAD(XPT2046_YP); //读取AIN1,热敏电阻
LCD_ShowNum(2,6,ADValue,3); //显示AIN1
ADValue=XPT2046_ReadAD(XPT2046_VBAT); //读取AIN2,光敏电阻
LCD_ShowNum(2,11,ADValue,3); //显示AIN2
Delay(100);
}
}
XPT2016.c
#include #include
//引脚定义
sbit XPY2046_DIN=P3^4;
sbit XPY2046_CS=P3^5;
sbit XPY2046_DCLK=P3^6;
sbit XPY2046_DOUT=P3^7;
/**
* @brief ZPT2046读取AD值
* @param Command 命令字,范围:头文件内定义的宏,结尾的数字表示转换的位数
* @retval AD转换后的数字量,范围:8位为0~255,12位为0~4095
*/
unsigned int XPT2046_ReadAD(unsigned char Command)
{
unsigned char i;
unsigned int Data=0;
XPY2046_DCLK=0;
XPY2046_CS=0;
for(i=0;i<8;i++)
{
XPY2046_DIN=Command&(0x80>>i);
XPY2046_DCLK=1;
XPY2046_DCLK=0;
}
for(i=0;i<16;i++)
{
XPY2046_DCLK=1;
XPY2046_DCLK=0;
if(XPY2046_DOUT){Data|=(0x8000>>i);}
}
XPY2046_CS=1;
return Data>>8;
}
XPT2046.h
#ifndef __XPT2046_H__
#define __XPT2046_H__
#define XPT2046_VBAT 0xAC
#define XPT2046_AUX 0xEC
#define XPT2046_XP 0x9C //0xBC
#define XPT2046_YP 0xDC
unsigned int XPT2046_ReadAD(unsigned char Command);
#endif
实验结果
关键字:C51
引用地址:
C51---16 AD/DA 模拟数字转换
推荐阅读最新更新时间:2024-11-13 11:40
MSP430 AD转换12864液晶显示代码
#include msp430g2553.h #include 12864.h unsigned int i,Vo; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT ADC10CTL0 = SREF_0 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE + REF2_5V; //__enable_interrupt(); // Enable interrupts. //TACCR0 = 30; // Delay to allow Ref to settle //TACCTL0 |=
[单片机]
深入理解ARM体系架构(S3C6410)---ad转化实例
本实例是把采集的ad数据转化后显示在lcd屏上,在这直接把自己调试好的源码贴出来 ad转化器相关代码: view plain copy print ? void adc_init() { char preScaler = 66500000/2500000 - 1; //PCLK=66M rADCCON = (1 14)|(preScaler 6)|(0 3)|(0 2);//通道AIN0 // rADCCON =0x44c1;//通道AIN0 } int read_adc() { rAD
[单片机]
C51程序设计中的数组和指针关系
一、指针是地址 各种类型的数据被分配合适的内存。比如整形数据通常被分配两个连续的存储单元(字节)存放。对数据的访问是通过分配给数据的内存首地址来实现的。我们称这些内存地址为指针。 二、指针变量是存放地址的变量 如果我们定义了一些变量来存放数据的地址(指针),这样的变量就是指针变量。也就是说,指针变量有两个特征:首先它作为变量会分配内存空间;其次,它存放的内容应该是内存地址。 比如,当我们声明了一个整形变量i并且赋予初始值10;同时我们声明了一个整形的指针变量p,将它指向变量i。当我们运行代码时,内存中可能是这样的: i - |0AH| FFF0H |00H|FFF1H |...| p - |0F0H | FFFAH |0FFH
[单片机]
用AD827/OPA2604/NE5532制作的负反
用AD827/OPA2604/NE5532制作的负反馈高中低音调电路 音调控制电路的作用是用于适时调整音色,使之符合各种不同的听音要求,用来补偿音源的录音缺陷或音箱的频响等,由于其结构和使用方法比较简单,负作用少,因而对一般条件的用户来说,使用音调控制器简单可靠,它的用途在音响系统中占有重要的地位,在一些网友的观点是音响系统特别是音频功率放大电路中以简洁为上的原则为上,减少信号通道中多余功能电路,以达到原汁原味的听音效果,笔者也赞成这种说法,问题是如果你已拥有够发烧级的高档音箱单元,它的高低频响应达到一个理想的较为平坦曲线,这种说法是对的,而多数人拥用的箱体单元是普通的低价市面货,加上音调电路来改善它的高低频延伸,在听音
[模拟电子]
C51,RAM 用C51操作片内扩展RAM
很多工程师都遇到过的 怪现象 问 标准80C51、52内核的单片机片内最多只有256字节的RAM,少得可怜,很多情况下会出现不够用的问题。如果在片外扩展RAM,则会增加成本,并可能减少多达18条I/O口线。现在许多新型8051内核的单片机为了解决上述问题,会在片内另外扩展有一定容量的RAM,一般安排在XDATA地址空间。Philips半导体的P89C668更是在片内扩展有8KB的XRAM,与其它型号相比,堪称 海量 。为了保持与标准80C51的兼容性,一般这些扩展的片内RAM在复位时默认是无效的,如果要使用,则需要先修改相关SFR寄存器里的使能位(但也有少数型号的规定与此恰恰相反,复位时默认是有效的,如果片外已经扩展有X
[单片机]
C51定时器计数器
C51定时器计数器 电路图 定时/计数器的结构和工作原理 1,定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器TH1,TH2组成 TH1+TL0的模是65536,可表达范围0~65535,65535+1时就会溢出产生相关中断 2,TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能; 3,TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志 定时计数器相关寄存器 TCON寄存器(中断的请求与外部中断的选择) IT0和IT1是设置外部中断的触发方式 当其为0时,为低电平触发方式 当其为1时,为负跳变触发方式 IE0和IE1是外部中断标志位 下面是定时/计数器的控制 TF0和
[单片机]
interrupt 和 using 在C51中断中的使用
8051 系列 MCU 的基本结构包括:32 个 I/O 口(4 组8 bit 端口);两个16 位定时计数器;全双工串行通信;6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个串口输入/输出中断),两级中断优先级;128 字节内置RAM;独立的 64K 字节可寻址数据和代码区。中断发生后,MCU 转到 5 个中断入口处之一,然后执行相应的中断服务 处理程序。中断程序的入口地址被编译器放在中断向量中,中断向量位于程序代码段的最低地址处,注意这里的串口输入/输出中断共用一个中断向量。8051的中断向量表如下: 中断源 中断向量 --------------------------- 上电复位 0000H 外部中断0 000
[单片机]
编写一个简单的C51程序
简 介: 对于嵌入式系统,如果没有运行RTOS,那么程序开发中的 主函数(main())需要通过某种机制使其永远愉快的运行下去,它没有终点。如果想从main函数中退出,具体干什么是由所使用的C语言编译器决定的。 01 问题提出 今天在CSDN的 单片机led模块定义函数的问题 中看到一个有趣的问题。提问者在进行基本的C51编程实验,编写了一个简单的C51程序如下: #includevoidtest(num){switch(num){case1:P2_0=0;P2_1=0;break; } }voidmain(void){ test(1); } 程序执行完之后,可以看到实验板上的有两个LED被点亮,另外六个居然微微发亮。 如
[单片机]