网站注册系统用什么做,免费隐私网站推广app,涉县移动网站建设价格,成都建设企业网站1.AD/DA介绍 AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号 DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号 AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理…1.AD/DA介绍
· AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号 · DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号 · AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理提供了可能
2.硬件电路模型 · AD转换通常有多个输入通道,用多路选择开关连接至AD转换器,以实现AD多路复用的目的,提高硬件利用率 · AD/DA与单片机数据传送可使用并口(速度快、原理简单),也可使用串口(一位一位发送、接线少、使用方便) · 可将AD/DA模块直接集成在单片机内,这样直接写入/读出寄存器就可进行AD/DA转换,单片机的IO口可直接复用为AD/DA的通道 PWM在一定程度上可以代替DA
3.硬件电路 4.XPT2046
XPT2046是一个A/D转换器用的时候直接用时序将A/D的值读出即可 XPT2046时序 DCLK、DIN、DOUT三根线共用而每个芯片有一个单独的CS片选在同一时间只选中一片然后三根线与芯片进行通信不会产生冲突 CS开始输入时拉低结束时拉高 DCLK上升沿输入下降沿输出
5.AD模数转换
现象:LCD显示可调电阻、热敏电阻和光敏电阻的值 定义引脚 读AD值 命令码宏定义
S必须为1,A2-A0地址位,MODE为1(8位模式),SER/DFR为1(单端模式),PD1为0(外部电压),PD0为0(低功率模式) 测量X,根据单端模式输入配置图,A2-A0可以为001,也可以为011,以001为例,故命令码为1001 1100即0x9C,011为0xBC 测量Y,A2-A0为101,命令码为1101 1100即0xDC 测量VBAT,A2-A0为010,命令码为1010 1100即0xAC 测量AUX,A2-A0为110,命令码为1110 1100即0xEC XPT2046.c
#include REGX52.H
#include INTRINS.H//引脚定义
sbit XPY2046_DINP3^4;
sbit XPY2046_CSP3^5;
sbit XPY2046_DCLKP3^6;
sbit XPY2046_DOUTP3^7;/*** brief ZPT2046读取AD值* param Command 命令字范围头文件内定义的宏结尾的数字表示转换的位数* retval AD转换后的数字量范围8位为0~25512位为0~4095*/
unsigned int XPT2046_ReadAD(unsigned char Command)
{unsigned char i;unsigned int Data0;XPY2046_DCLK0;XPY2046_CS0;for(i0;i8;i){XPY2046_DINCommand(0x80i);XPY2046_DCLK1;XPY2046_DCLK0;}for(i0;i16;i){XPY2046_DCLK1;XPY2046_DCLK0;if(XPY2046_DOUT){Data|(0x8000i);}}XPY2046_CS1;return Data8;
}XPT2046.h
#ifndef __XPT2046_H__
#define __XPT2046_H__#define XPT2046_VBAT 0xAC
#define XPT2046_AUX 0xEC
#define XPT2046_XP 0x9C //0xBC
#define XPT2046_YP 0xDCunsigned int XPT2046_ReadAD(unsigned char Command);#endifmain.c
#include REGX52.H
#include Delay.h
#include LCD1602.h
#include XPT2046.hunsigned int ADValue;void main(void)
{LCD_Init();LCD_ShowString(1,1,ADJ NTC GR);while(1){ADValueXPT2046_ReadAD(XPT2046_XP); //读取AIN0可调电阻LCD_ShowNum(2,1,ADValue,3); //显示AIN0ADValueXPT2046_ReadAD(XPT2046_YP); //读取AIN1热敏电阻LCD_ShowNum(2,6,ADValue,3); //显示AIN1ADValueXPT2046_ReadAD(XPT2046_VBAT); //读取AIN2光敏电阻LCD_ShowNum(2,11,ADValue,3); //显示AIN2Delay(100);}
}6.DA数模转换
现象LED呈呼吸灯状态 在PWM控制直流电机速度的基础上修改main.c即可 原理就是改变PWM占空比,与之前的原理一样
#include REGX52.H
#include Delay.h
#include Timer0.hsbit DAP2^1;unsigned char Counter,Compare; //计数值和比较值用于输出PWM
unsigned char i;void main()
{Timer0_Init();while(1){for(i0;i100;i){Comparei; //设置比较值改变PWM占空比Delay(10);}for(i100;i0;i--){Comparei; //设置比较值改变PWM占空比Delay(10);}}
}void Timer0_Routine() interrupt 1
{TL0 0x9C; //设置定时初值TH0 0xFF; //设置定时初值Counter;Counter%100; //计数值变化范围限制在0~99if(CounterCompare) //计数值小于比较值{DA1; //输出1}else //计数值大于比较值{DA0; //输出0}
}