AD转换之外部输入AD值软件设计
主函数
/*
实验现象:下载程序后数码管前4位显示外部输入AIN3通道检测的AD值,模拟信号电压范围在0-5V
1,单片机-->AD/DAC模块 管脚释义
P34-->DI DIN 串行数据输入端,当CS为低电平时,数据在 DCLK上升沿锁存进来
P35-->CS CS 片选信号,控制转换时序和使能串行输入输出寄存器,高电平时ADC掉电
P36-->CL DCLK 时钟,外部时钟信号输入
P37-->DO DOUT 串行数据输出端口。数据在DCLK的下降沿移出,当cs为高电平时为高阻态。
BUSY 忙时信号,当cs为高电平时为高阻态
LOVDD 数字电源输入端
AUX ADC辅助输入通道
2,单片机-->动态数码管模块
J22-->J6
P22-->J9(A)
P23-->J9(B)
P24-->J9(C)
*/
#include "reg52.h" // 此文件中定义了单片机的一些特殊功能寄存器
#include "XPT2046.h"
typedef unsigned int u16;
typedef unsigned char u8; // 数据类型的定义
sbit LSA = P2^2; //这三个端口共同控制数码管的位选
sbit LSB = P2^3;
sbit LSC = P2^4;
u8 disp[4]; // 字符型数组用来,存储点亮数码管前四位的数据
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 0~9的数字显示
/*延时函数
i=1时,大约延时10us
*/
void delay(u16 i)
{
while(i--);
}
/*数据处理模块*/
void datapros()
{
u16 temp; // 整型变量
/*static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。
static修饰全局变量的时,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以
static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存放在全局数据区的静态变量区。*/
static u8 i;
if(i==50)
{
i=0;
/*
AIN0电位器:如果要检测转换电位器模拟信号,控制字命令寄存器值为0X94或者0XB4.
如果要检测转换热敏电阻模拟信号,控制字命令寄存器值为0XD4.
AIN2光敏电阻:如果要检测转换光敏电阻模拟信号,控制字命令寄存器值为0XA4.
如果要检测转换AIN3通道上模拟信号,控制字命令寄存器值为0XE4.
*/
temp = Read_AD_Data(0xE4); // AIN2光敏电阻
}
i++;
disp[0] = smgduan[temp/1000]; // 千位
disp[1] = smgduan[temp%1000/100]; // 百位
disp[2] = smgduan[temp%1000%100/10]; //十位
disp[3] = smgduan[temp%1000%100%10]; // 个位
}
/*数码管显示模块*/
void DigDisplay()
{
u8 i;
for(i=0;i<4;i++)
{
switch(i) // 位选
{
case(0):
LSA=1;LSB=1;LSC=1; break;//显示第0位
case(1):
LSA=0;LSB=1;LSC=1; break;//显示第1位
case(2):
LSA=1;LSB=0;LSC=1; break;//显示第2位
case(3):
LSA=0;LSB=0;LSC=1; break;//显示第3位
}
P0=disp[i]; // 发送数据
delay(100); // 延时一段时间
P0 =0x00; // 消影
}
}
/* 主函数*/
void main()
{
while(1)
{
datapros(); // 数据处理函数
DigDisplay(); // 数码管显示函数
}
}
XPT2046芯片控制头文件
#ifndef __XPT2046_H_
#define __XPT2046_H_
//---包含头文件---//
#include #include //---重定义关键词---// #ifndef uchar #define uchar unsigned char #endif #ifndef uint #define uint unsigned int #endif #ifndef ulong #define ulong unsigned long #endif //---定义使用的IO口---// sbit DOUT = P3^7; //输出 sbit CLK = P3^6; //时钟 sbit DIN = P3^4; //输入 sbit CS = P3^5; //片选 uint Read_AD_Data(uchar cmd); uint SPI_Read(void); void SPI_Write(uchar dat); #endif XPT芯片控制文件 #include"XPT2046.h" // 初始化触摸函数 void SPI_Start(void) { CLK=0; // 时钟,外部时钟信号输入 CS=1; // 片选信号,控制转换时序和使能串行输入输出寄存器,高电平时ADC掉电 DIN=1; // 串行数据输入端,当CS为低电平时,数据在 DCLK上升沿锁存进来 CLK=1; CS=0; } /*写数据 模块 CLK外部时钟 上升沿时 由DIN端口输入数据并锁存 */ void SPI_Write(uchar dat) { uchar i; // 字符型变量 CLK=0; // 外部时钟 低电平 for(i=0;i<8;i++) { /* 逐次逼近式AD转换原理 逐次逼近式AD转换器与计数式A/D转换类似,只是数字量由“逐次逼近寄存器SAR”产生。 SAR使用“对分搜索法”产生数字量,以8位数字量为例,SAR首先产生8位数字量的一半, 即10000000B,试探模拟量Vi的大小,若Vn>Vi,清除最高位,若Vn 在bit6确定后,SAR以对分搜索法确定bit5位,即以低6位的一半yy100000B(y为已确定位)试探模拟量的大小。 重复这一过程,直到最低位bit0被确定,转换结束 */ DIN = dat >> 7; // 右移7位 将dat的最高位赋给DIN dat<<=1; // dat=dat<<1 将保存在dat中的最高位移出 进行下次循环 CLK = 0; // 上升沿放置数据,如将数据传输至数据线 CLK = 1; } } /*读数据 模块 CLK 时钟信号输入端口 下降沿时(CLK=1 变为 CLK=0) 数据移出 */ uint SPI_Read(void) { uint i, dat = 0; // 定义整型变量 CLK = 0; for(i=0;i<12;i++) { dat <<=1; // dat = dat << 1; 左移1位 CLK=1; // 下降沿数据移出 CLK =0; /* 与&& and a && b a and b 或|| or a || b a or b 非! !1=0 按位与(&) a & b a and b 按位或(|) a | b a or b */ dat |= DOUT; // dat = dat | DOUT } return dat; } /* 数据转换模块 cmd:读取的X或Y */ uint Read_AD_Data(uchar cmd) { uchar i; // 无符号的字符型变量 uint AD_Value; // 整型变量 CLK =0; // 外部时钟信号输入 CS = 0; //片选信号,控制转换时序和使能串行输入输出寄存器,高电平时ADC掉电(高电平不工作,低电平工作) SPI_Write(cmd); for(i=6;i>0;i--); // 发送一个时钟周期,清除BUSY CLK = 1; // 下降沿移出数据 _nop_(); // 延时1us _nop_(); // 延时1us CLK = 0; _nop_(); // 延时1us _nop_(); // 延时1us AD_Value = SPI_Read(); CS =1; return AD_Value; }
上一篇:STC89C52概念 ----- 自学笔记
下一篇:AD模数转换之热敏电阻
推荐阅读
史海拾趣
关于电蚊拍的基本电路,网友可能提出的问题及回答如下:
问题一:电蚊拍的基本电路由哪些部分组成?
回答:电蚊拍的基本电路主要由三个核心部分组成:阻容降压电路(或称为高频振荡电路)、倍压整流电路以及高压电击网。
-
阻容降压电路(高频振荡电路):这部分电路主要负责将直流电源(如电池提供的3V直流电)转换为高频交流电,通常频率在18kHz左右。这一转换过程由三极管和变压器等元件共同完成,通过变压器的升压作用,将电压提升到数百伏。
-
倍压整流电路:高频交流电经过升压后,进入倍压整流电路。这个电路通过多个二极管和电容的组合,将电压进一步升高到足以电击蚊虫的水平,通常可达到1500V左右。常见的倍压整流电路有三倍压、四倍压等多种连接方式。
-
高压电击网:高压电击网是电蚊拍的输出部分,由细密的金属网格构成。当蚊虫接触到金属网格时,会形成电路通路,导致蚊虫被高压电击死。
问题二:为什么电蚊拍使用一段时间后,电击效果会变差?
回答:电蚊拍使用一段时间后电击效果变差的原因可能包括以下几点:
-
电容老化:电蚊拍中的倍压电容(如CBB电容)在频繁充放电过程中会逐渐老化,其容量会逐渐下降,导致储能能力降低,从而影响电击效果。
-
元件损坏:电蚊拍中的二极管、三极管等元件在长时间使用后可能出现损坏或性能下降,导致电路无法正常工作或电压无法升到足够高的水平。
-
电池电量不足:电池是电蚊拍的能量来源,如果电池电量不足,将直接影响电蚊拍的电击效果。
-
金属网格污染或变形:金属网格在使用过程中可能会受到污染或变形,导致接触不良或短路,从而影响电击效果。
问题三:如何判断电蚊拍是否需要维修?
回答:可以通过以下几种方法来判断电蚊拍是否需要维修:
-
观察指示灯:如果电蚊拍的指示灯不亮或亮度明显降低,可能是电池电量不足或电路存在故障。
-
检查电击效果:如果电蚊拍在使用时电击效果变差或无法电击蚊虫,可能是电路中的元件损坏或老化。
-
测量电压:使用万用表等工具测量电蚊拍输出端的电压,如果电压明显低于正常值(如1500V左右),则说明电路存在问题。
-
检查金属网格:观察金属网格是否干净、平整、无变形或短路现象。
问题四:如何维修电蚊拍?
回答:维修电蚊拍需要一定的电子知识和技能,以下是一些基本的维修步骤:
-
检查电池:首先检查电池是否电量充足且接触良好。如果电池电量不足,应及时更换新电池。
-
清洁金属网格:使用软布或棉签等工具清洁金属网格上的污垢和灰尘。
-
检查并更换元件:如果确定是电路中的元件损坏导致的问题,应使用万用表等工具检测并更换损坏的元件。常见的损坏元件包括二极管、三极管、电容等。
-
调整电路:在更换元件后,可能需要调整电路中的某些参数(如电阻值、电容容量等)以确保电路能够正常工作。
-
测试电击效果:在维修完成后,应使用万用表等工具测试电蚊拍的电击效果是否恢复正常。
请注意,由于电蚊拍内部涉及高压电路,因此在维修过程中应确保安全操作,避免触电等危险情况的发生。如果不具备相关知识和技能,建议将电蚊拍送至专业维修机构进行维修。
随着电子行业的快速发展,Able Systems公司不断引进新技术,对产品进行升级改进。公司在打印机的设计和制造方面结合独家采购的领先技术,确保产品能够满足最苛刻的要求。这种对技术创新的执着追求,使得Able Systems的产品在行业中始终保持领先地位。
Able Systems公司成立于1982年,初创时期面临着资金短缺、市场竞争激烈等诸多挑战。然而,公司凭借对微型打印机技术的深刻理解和独特见解,成功开发出了具有竞争力的产品。通过不懈的努力和持续的技术创新,Able Systems逐渐在市场中站稳了脚跟,并赢得了客户的信任。
随着国内市场的逐渐饱和,Able Systems公司开始将目光投向国际市场。通过参加国际展览、建立海外销售渠道等方式,公司成功将产品推向了全球范围。同时,公司还积极与国际知名企业合作,共同开发新产品,进一步提升了公司在国际市场的竞争力。
DBM Optix公司成立之初,便致力于在光学通信领域取得技术突破。在初创阶段,公司面临着资金紧张、人才匮乏等多重挑战。然而,凭借对技术的执着追求和对市场的敏锐洞察,DBM Optix成功研发出了一款具有高性能、高可靠性的光学模块,这一技术突破迅速获得了市场的认可,为公司的发展奠定了坚实的基础。
随着产品质量的不断提升,远阳开始将目光投向更广阔的市场。公司制定了详细的市场拓展计划,并加大了品牌营销力度。2010年前后,远阳成功进军国际市场,与多家国际知名企业建立了长期合作关系。同时,公司也注重在国内市场的布局,通过参加各类行业展会、举办技术研讨会等方式,不断提升品牌知名度和影响力。这一时期,远阳的产品线不断丰富,涵盖了HDMI、光纤线、DP线等多个系列,成为了数据工程电缆领域的佼佼者。
:介绍了以电压驱动型脉宽调制控制集成电路TL494为核心元件并加上简单滤波电路及RC放电回路所构成的回路控制器。它能把脉冲宽度变化的信号转换成与脉冲宽度成正比变化的直流信号,进而实现闭环单回路控制。 关键词:脉宽调制 回 ...… 查看全部问答∨ |
型号 器件名称 厂牌 备注CD4000 双3输入端或非门+单非门 TICD4001 四2输入端或非门 HIT/NSC/TI/GOL CD4002 双4输入端或非门 NSC CD4006 18位串入/串出移位寄存器 NSC CD4007 双互补对加反相器 NSCCD4008 4位超前进位全加器 NSC  ...… 查看全部问答∨ |
摘要:介绍采用声纹识别技术、在凌阳SPCE061A单片机上实现的一种语音电子门锁身份认证系统。实验结果表明,系统性能稳定,识别效果好,可以推广使用。 关键词:声纹识别 基于周期 线性预测 模式匹配 DTW 生物识别技术是利用人体生物特征进行 ...… 查看全部问答∨ |
最近,拉上一个工程项目,因为项目较大,而且利润明眼人就知道客观.就近的安防行业商都出尽了自家的看家本领.大拿这个项目,我已经基本上口头上签了多项项目合作.但我知道我的劣势比其他人大很多,也很明显.这个时候,应该出点什么招?… 查看全部问答∨ |
建议零售价为499美元的16GB款(不支持3G)iPad,其部件成本为250.60美元,包含制造成本在内为259.60美元。 将近一半的利润。 显示屏和触摸屏等用户界面相关部件的合计成本为109.50美元,占所有部件比例的43.7%。iSuppli指出,“iPad的部件构成 ...… 查看全部问答∨ |
|
大家好,以前我一直用VC++在2000和xp下开发应用程序,最近突然有个部门要我去写EVC的程序,还有点不知所措,感觉很多函数和MFC里的一样,可是就是不知道如何把握他们的相同和区别,得大家指引一下,哪怕告诉我看什么书比较好也行,或者写写你们的心 ...… 查看全部问答∨ |
我正在WINCE下写一PING程序,原以用ICMPCreateFile(),ICMPSendEcho()实现。 但根据项目最新要求,需要程序可对发送PING命令的网卡进行绑定,现打算建立SOCK_RAW套接字,但是上网查找资料,发现在WINCE下必须用 WSCInstallProvider()进行声明。 ...… 查看全部问答∨ |
CAN报文通过中断接收和发送,CAN_RX , CAN_TX也分别重映射到 PA11和PA12脚上,AFIO时钟和CAN时钟也都使能了,就是不能进中断,求助啊,急。。。。。 程序中的部分如下: GPIO_InitTypeDef GPIO_InitStructure; RCC_APB1PeriphClockCm ...… 查看全部问答∨ |