AD-DA转换带数码管显示

合集下载

AD转换的数码管显示

AD转换的数码管显示

AD转换的数码管显示*本例程采用AD0804 芯片,硬件电路:cs 片选端接P2.3,WR 写数据端写P3.6,RD 读数据端接P3.7,锁存端接P2.6 脚,数码管位选端分别接P3.2,P3.3,P3.4,段选端接P1 口*/#includereg52.h//头文件#define uint unsigned int//宏文件#define uchar unsigned char//宏文件uchar num;//变量void delay3(uint z); //延时定义void dissy();//延时函数定义sbit ge=P3 ;//个位定义sbit shi=P3;//十位定义sbit bai=P3;//百位定义sbit ad_cs=P2;//片选端sbit ad_wr=P3;//写数据端sbit ad_rd=P3;//读数据端sbit pian=P2;//锁存器片选void add();//ad 转换子函数void delay(uint i);//延时子函数申明uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86, 0x8e};//数组/************主函数**********/void main(){while(1){add();//调用AD 转换子函数dissy();//数码管显示子函数} }/************AD 转换子函数**********/void add()//AD 转换子函数{uchar i;ad_cs=1;//将片选关闭ad_cs=0;//将片选打开ad_wr=1;//写数上升沿ad_wr=0;//写数下降沿ad_wr=1;//写数上升沿P1=0xff;//送数到P0 口ad_rd=1;//读数上升沿delay(25);//延时一会儿ad_rd=0;//读数下降沿//////**************因为AD 转换时间周期长,我现在的数码管没有采用锁存器,AD 转换时间大于显示时间,所以显示时会闪烁,解决此问题方法是,连续调用了显示子程序七次,这样显示时就和AD 转换时一至,显示出来的数就不闪了********************//////for(i=0;i7;i++)//调用7 次,相当于delay(255)void dissy();//////**********************************//////num=P1;//将数给计数器num}/************显示子函数**********/void dissy()//显示子函数{P0=table[num/100];//百位显示数据bai=0;//百位打开delay(14);//延时一会bai=1;//。

实验七 DA与AD转换

实验七  DA与AD转换

实验七D/A与A/D转换专业:微电子学姓名:【实验目的】1.学习D/A转换的基本原理和D/A转换芯片DAC0832的性能及编程方法。

2.了解单片机系统中扩展D/A转换芯片的基本方法。

3.学习A/D芯片ADC0809的转换性能及编程方法。

4.了解A/D转换芯片与写单片机的接口方法。

5.通过实验掌握单片机进行数据采集的方法。

【实验原理】1.D/A 转换是把数字量转换成模拟量的变换,从D/A 输出的是模拟信号。

实验程序一是通过在D/A的输入端送入有一定规律的数字量,在输出端产生锯齿波、三角波、正弦波的波形,通过示波器观察来直观地了解D/A的转换功能。

产生锯齿波、三角波只需由A存放的数字量(送入D/A的输入寄存器)的增减来控制;要产生正弦波,较简单的方法是造一张正弦数字量的表,取值范围为一个周期,采样点愈多,精度愈高。

如果电压幅值为M,D/A 转换器的位数是N 位,那么其精度计算公式为:M/(2N-1)。

图6-1 D/A转换逻辑例如,D/A转换器的位数是8位,电压幅值为5V,则转换精度为,5/(28-1)= 0.0196(V)在EL-8051-III实验台上DAC0832与单片机的连接图6-1所示。

由图可以看出,输入寄存器占偶地址端口(A0=0),DAC 寄存器占较高的奇地址端口(A0=1)。

两个寄存器均对数据独立进行锁存。

要把一个数据通过0832输出,要经两次锁存。

典型的程序如下:MOV DPTR, #PORTMOV A , #DATAMOVX @DPTR,AINC DPTRMOVX @DPTR,A其中,第二次写入是一个虚拟写的过程,其目的是产生一个/WR信号,启动D/A。

2.A/D转换是把模拟量转变为数字量的变换。

A/D转换器大致有三类:一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近法A/D转换器,精度、速度、价格适中;三是并行A/D转换器,速度快,价格也昂贵。

本实验用的是ADC0809属逐次逼近法A/D转换器,是八位的A/D转换器。

单片机AD与DA转换实验报告【VIP专享】

单片机AD与DA转换实验报告【VIP专享】

对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,通系电1,力过根保管据护线生高0不产中仅工资2艺料22高试2可中卷以资配解料置决试技吊卷术顶要是层求指配,机置对组不电在规气进范设行高备继中进电资行保料空护试载高卷与中问带资题负料2荷试2,下卷而高总且中体可资配保料置障试时2卷,32调需3各控要类试在管验最路;大习对限题设度到备内位进来。行确在调保管整机路使组敷其高设在中过正资程常料1工试中况卷,下安要与全加过,强度并看工且25作尽52下可22都能护可地1关以缩于正小管常故路工障高作高中;中资对资料于料试继试卷电卷连保破接护坏管进范口行围处整,理核或高对者中定对资值某料,些试审异卷核常弯与高扁校中度对资固图料定纸试盒,卷位编工置写况.复进保杂行护设自层备动防与处腐装理跨置,接高尤地中其线资要弯料避曲试免半卷错径调误标试高方中等案资,,料要编试求5写、卷技重电保术要气护交设设装底备备置。4高调、动管中试电作线资高气,敷料中课并设3试资件且、技卷料中拒管术试试调绝路中验卷试动敷包方技作设含案术,技线以来术槽及避、系免管统不架启必等动要多方高项案中方;资式对料,整试为套卷解启突决动然高过停中程机语中。文高因电中此气资,课料电件试力中卷高管电中壁气资薄设料、备试接进卷口行保不调护严试装等工置问作调题并试,且技合进术理行,利过要用关求管运电线行力敷高保设中护技资装术料置。试做线卷到缆技准敷术确设指灵原导活则。。:对对在于于分调差线试动盒过保处程护,中装当高置不中高同资中电料资压试料回卷试路技卷交术调叉问试时题技,,术应作是采为指用调发金试电属人机隔员一板,变进需压行要器隔在组开事在处前发理掌生;握内同图部一纸故线资障槽料时内、,设需强备要电制进回造行路厂外须家部同出电时具源切高高断中中习资资题料料电试试源卷卷,试切线验除缆报从敷告而设与采完相用毕关高,技中要术资进资料行料试检,卷查并主和且要检了保测解护处现装理场置。设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

用DSP实现AD转换与数码管显示设计(实验四)

用DSP实现AD转换与数码管显示设计(实验四)

如图为 4 位数码管显示原理图,采用共阳极连接方法,即可通过将 GPIO70、 GPIO71、GPIO72、GPIO73 置 1 来控制数码管的位选(1 为选择此位);数码管 的段码输入由串行输入、并行输出的 74HC164 决定。选取 F28335 的 GPIO54SPISOMI 作为 74HC164 的数据输入端,GPIO56-SPICLK 作为 74HC164 的时钟 输入端。SPICLK 每经过一次上升沿跳变,74HC164 锁存数据就右移一位(方向 QA-QH),所以 SPISOMI 数据输出端输出数据时,数据传送采用高位到低位的 方式。 下图为 74HC164 的时序图:
SPI 结合 74HC164 实例: A、设置 SPI 下降沿触发,至少 8 位数据传输以及波特率。 B、设置 SPI 的 FIFO,禁止 SPI 中断。
2、软件设计
主函数:
开始
主循环:
初始化(时钟、GPIO 配置及 初始化、关看门狗、模式初 始化、SPI 初始化、数码管
初始化、ADC 初始化)
主循环
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; //设置采样窗口时间:(15+1)
*ADCCLK
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; //ADC内核时钟分频:
HSPCLK/2=6.25MHZ
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;
#define SET_BIT4 GpioDataRegs.GPCSET.bit.GPIO70 = 1
//与外设板
8_LEDS 端子的 IO70 对应
#define RST_BIT4 GpioDataRegs.GPCCLEAR.bit.GPIO70 = 1

电压采集,AD转换程序,数码管显示

电压采集,AD转换程序,数码管显示

电压采集,AD转换程序,数码管显示#include#includesbit ADC_CS=P3^5; //片选引脚,低电平有效sbit ADC_CLK=P3^4; //ADC0832芯片的时钟输入引脚sbit ADC_DO=P3^3; //数据信号输出引脚,用于将转换的数据输给单片机sbit ADC_DI=P3^3; //数据信号输入引脚,用于通道的选择控制#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换sbit LATCH1=P2^2;//定义锁存使能端口段锁存sbit LATCH2=P2^3;// 位锁存void Delay(unsigned char x);unsigned char ReadADC(viod);unsigned char TempData[8]; //存储显示值的全局变量unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x 7f,0x6f};// 显示段码值0~9unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码void Display(unsigned char FirstBit,unsigned char Num);void main(){unsigned char a;a=ReadADC();while(1){TempData[0]=dofly_DuanMa[a/100];//分解显示信息,如要显示68,则68/10=6 68%10=8TempData[1]=dofly_DuanMa[(a%100)/10];TempData[2]=dofly_DuanMa[(a%100)%10];Display(2,3);}}// 延时函数void Delay(unsigned char x){unsigned char i;for(i=0;i<x;i--);}// 把模拟电压转换成八位二进制数,并返回unsigned char ReadADC(unsigned char b){unsigned char i,ch;ch=0;ADC_CS=0; //片选引脚,低电平有效,ADC_DO=0; //DO为高阻状态for(i=0;i<10;i++); //稍做延时ADC_CLK=0;Delay(2); //以上那个为准备工作ADC_DI=1;ADC_CLK=1;Delay(2); //第一个脉冲,起始位ADC_CLK=0;Delay(2);ADC_DI=1;ADC_CLK=1;Delay(2); //第2个脉冲,DI=1表示双通道单极性输入ADC_CLK=0;Delay(2);ADC_DI=1;ADC_CLK=1;Delay(2); //第3个脉冲,DI=1表示表示选择CH1,马上准备读取转换数据ADC_CLK=1;Delay(2);ADC_CLK=0;Delay(2);for(i=0;i<8;i++){ADC_CLK=1;Delay(2);ADC_CLK=0;Delay(2);ch=(ch<<1)|ADC_DO;}ADC_CS=1; //取消片选,一个转换周期结束return(ch);}void Display(unsigned char FirstBit,unsigned char Num) {unsigned char i;for(i=0;i<num;i++){DataPort=0; //清空数据,防止有交替重影LATCH1=1; //段锁存LATCH1=0;DataPort=dofly_WeiMa[i+FirstBit]; //取位码LATCH2=1; //位锁存LATCH2=0;DataPort=T empData[i]; //取显示数据,段码LATCH1=1; //段锁存LATCH1=0;Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影}}</num;i++)</x;i--);。

杭电微机原理AD转换DA转换实验实验报告

杭电微机原理AD转换DA转换实验实验报告

微型计算机原理与接口技术实验报告班级:学号:姓名:指导老师:朱亚萍实验名称: A/D转换实验D/A转换实验(一)D/A转换实验(二)实验一A/D转换实验一、实验目的了解模/数转换基本原理,掌握ADC0809的使用方法。

二、实验内容利用实验系统上电位器提供的可调电压作为0809模拟信号的输入,编制程序,将模拟量转换为数字量,通过数码管显示出来。

三、实验接线图图 1-1四、编程指南1. ADC0809的START端为A/D转换启动信号,ALE端为通道选择地址的锁存信号,实验电路中将其相连,以便同时锁存通道地址并开始A/D采样转换,其输入控制信号为CS和WR,故启动A/D转换只须如下两条指令:MOV DX, ADPORT OUT DX, AL ;ADC0809端口地址;发CS和WR信号并送通道地址2.用延时方式等待A/D转换结果,使用下述指令读取A/D转换结果:MOV DX, ADPORTIN AL, DX;ADC0809端口地址五、实验程序框图图 1-2六、实验步骤1.断电连接导线, 将0809 CS4插孔连到译码输出FF80H插孔,将通道0模拟量输入端IN0连电位器W1的中心插头AOUT1(0-5V)插孔,8MHZ→T;2. 在PC机和实验系统联机状态下,新建实验程序,编辑完成后进行保存(保存后缀为.asm文件);3. 编译下载;4. 全速运行,运行程序;5. 按RST键退出。

七、实验程序DATA SEGMENTBUF DB 6 DUP(0)DATA1: DB0c0h,0f9h,0a4h,0b0h,99h,DB 92h,82h,0f8h,80h,90h,DB88h,83h,0c6h,0a1h,86h,DB8eh,0ffh,0ch,89h,0deh,DB0c7h,8ch,0f3h,0bfh,8fhDATA ENDSCODE SEGMENTASSUME CS: CODE,DS: DATAADC EQU 0FF80H; ADC0809端口地址PA EQU 0FF20HPB EQU 0FF21HPC EQU 0FF22H MAIN PROC FAR START: MOV AX, DATA MOV DS, AXMOV ES, AX ADC_S:MOV AX, 00HMOV DX, ADCOUT DX, ALMOV CX, 0500H DELAY:LOOP DELAYMOV DX, ADPORT IN AL, DXCALL CONVERS CALL DISPJMP ADC_S MAIN ENDPCONVERS PROC NEARMOV AH, AL3.循环不断采样A/D转换的结果,边采样边显示A/D转换后的数字量。

数电 AD DA转换.ppt

数电 AD DA转换.ppt
补充 数—模和模—数转换 9.1 概 述
模拟电路:处理连续变化信号的电路 数字电路:处理数字信号的电路
模数转换(A/D转换):将模拟信号转换为数字信号 数模转换(D/A转换):将数字信号转换为模拟信号
模数转换举例:
模拟 信号
模数 转换
数字 信号
数字显 示电路
数字电压表
数模转换举例:
控制器
开/关 播放/暂停
例:把0~1V的模拟电压转换成3位二进 输入 制代码,即用000~111表示0~1V的电压 信号
解:方法一
1V 7/8V
取最小量化单位为1/8 V,即△ =1/8 V 6/8V
并规定:0~1/8V为0 △, 1/8~2/8V为1 △,…
5/8V 4/8V 3/8V
则最大量化误差为1 △=1/8V。 2/8V
VV+
+A
vO
I0 I1 I2 I3
模拟开关 S0 S1 S2 S3
求和放大器
VREF
d0 d1 d2 d3
LSB
MSB
模拟开关受每各位数码控制
权电阻网络确定每条支路电流的大小
求和放大电路把各支路电流求和并转换成电压
放大器原理
Rf
A为运算放大器
i
与电阻配合构成反相比例运算电路 R
Vii+
A
+
vo
V+
I 4
I3

I 3

I 2
I 2
2R
I VREF
LSB
MSB
d0 d1 d2 d3
S0 S1 S2 S3 I0 I1 I2 I3
2R 2R 2R 2R RRR
I'0 I'1 I'2 I'3 I

5AD转换结果送数码管显示

5AD转换结果送数码管显示
ADC0809是8位8通道A/D转换器,芯片内包括一个8位的逐次逼近型的ADC部分,并提供一个8通道的模拟多路开关和联合寻址逻辑。用该电路可直接采样8个单端的模拟信号,分时进行A./D转换,在多点巡回检测,过程控制等应用领域使用非常广泛。ADC0809的主要技术指标为:
(1)分辨率:8位;
(2)单电源:+5V;
SHR AH,1
INC BX
DEC CL
JNZ DLOOP
MOV DX,OUTBIT
MOV AL,0
OUT DX,AL
RET
DISPLAYLED ENDP
START PROC NEAR
MOV AX,DATA
MOV DS,AX
AGAIN:
MOV AL,0
MOV DX,CS0809
OUT DX,AL
MOV CX,40H
OUT DX,AL
MOV CX,40H
LOOP $
IN AL,DX
MOV DX,PA
OUT DX,AL
JMP AGAIN
CODE ENDS
ENDS START
5、程序设计
(1)编写程序,通过查询EOC转换结束信号实现A/D转换,调试并验证结果。程序如下:
MODE EQU 082H
PA EQU 9000H
CS0809 EQU 09000H
OUTBIT EQU 08002H
OUTSEG EQU 08004H
DATA SEGMENT
LEDBUF DB 2 DUP (?)
NUM DB 1 DUP (?)
DELAYT DB 1 DUP (?)
LEDMAP:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
此状态位进行操作.(不应答或非应答都使ack=0)
发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
********************************************************************/
void SendByte(unsigned char c)
switch(AD_CHANNEL)
{
case 0: ISendByte(PCF8591,0x41);
D[0]=IRcvByte(PCF8591)*2; //ADC0模数转换1
break;
case 1: ISendByte(PCF8591,0x42);
D[1]=IRcvByte(PCF8591)*2; //ADC1模数转换2
bit ISendByte(unsigned char sla,unsigned char c)
{
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址
if(ack==0)return(0);
SendByte(c); //发送数据
if(ack==0)return(0);
Stop_I2c(); //结束总线
return(1);
}
/*******************************************************************
ADC读字节数据函数
*******************************************************************/
* 2.了解掌握I2C总线接口的工作原理及一般编程方法。*
**
*连接方法:JP8(P1)与J12用跳线连接*
**
*通过改变学习板上的2个电位器对应的2段模拟输入,实现模拟输入,学员观察数码管的数字变化情况
*通过改D[4]的值,实现模拟输出,学员观察学习板上DA处LED的亮度变化*
**
*请学员认真消化本例程,懂得AD-DA在C语言中的操作应用*
}
P1 = 0XFF;
}
}
/*************************此部分为I2C总线的驱动程序*************************************/
#include<reg52.h>
#include <intrins.h>
#include <I2C.H>
#define NOP() _nop_() /*定义空指令*/
***********************************************************************************/
#include<reg52.h>
#include <I2C.H>
#define PCF8591 0x90 //PCF8591地址
//else IO
case 5:LS138A=1; LS138B=0; LS138C=1; break;
case 6:LS138A=0; LS138B=1; LS138C=1; break;
case 7:LS138A=1; LS138B=1; LS138C=1; break;
}
for (j = 0 ; j<90 ;j++) { ;}
_Nop();
_Nop();
}
/*******************************************************************
结束总线函数
函数原型: void Stop_I2c();
功能:结束I2C总线,即发送I2C结束条件.
********************************************************************/
SendByte(sla); //发送器件地址
if(ack==0)return(0);
SendByte(c); //发送控制字节
if(ack==0)return(0);
SendByte(Val); //发送DAC的数值
if(ack==0)return(0);
Stop_I2c(); //结束总线
return(1);
void Stop_I2c()
{
SDA=0; /*发送结束条件的数据信号*/
_Nop(); /*发送结束条件的时钟信号*/
SCL=1; /*结束条件建立时间大于4μs*/
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=1; /*发送I2C总线结束信号*/
_Nop();
_Nop();
起动总线函数
函数原型: void Start_I2c();
功能:启动I2C总线,即发送I2C起始条件.
********************************************************************/
void Start_I2c()
{
SDA=1; /*发送起始条件的数据信号*/
_Nop();
_Nop(); /*保证时钟高电平周期大于4μs*/
_Nop();
_Nop();
_Nop();
SCL=0;
}
_Nop();
_Nop();
SDA=1; /*8位发送完后释放数据线,准备接收应答位*/
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop();_Nop来自);if(SDA==1)ack=0;
/**********************************************************************************
*标题: ************* DA-AD试验******************* *
**
* 1.通过本例程了解并掌握AD-DA转换芯片的基本原理和使用*
unsigned char IRcvByte(unsigned char sla)
{ unsigned char c;
Start_I2c(); //启动总线
SendByte(sla+1); //发送器件地址
if(ack==0)return(0);
c=RcvByte(); //读取数据0
Ack_I2c(1); //发送非就答位
Stop_I2c(); //结束总线
return(c);
}
//******************************************************************/
main()
{ char i,j;
while(1)
{/********以下AD-DA处理*************/
case 1:LS138A=1; LS138B=0; LS138C=0; break;
case 2:LS138A=0; LS138B=1; LS138C=0; break;
case 3:LS138A=1; LS138B=1; LS138C=0; break;
case 4:LS138A=0; LS138B=0; LS138C=1; break;
#define _Nop() _nop_() /*定义空指令*/
sbit SCL=P2^0; //I2C时钟
sbit SDA=P2^1; //I2C数据
bit ack; /*应答标志位*/
/*******************************************************************
_Nop();
SCL=1;
_Nop(); /*起始条件建立时间大于4.7us,延时*/
_Nop();
_Nop();
_Nop();
_Nop();
SDA=0; /*发送起始信号*/
_Nop(); /*起始条件锁定时间大于4μs*/
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0; /*钳住I2C总线,准备发送或接收数据*/
break;
case 2: ISendByte(PCF8591,0x43);
D[2]=IRcvByte(PCF8591)*2; //ADC2模数转换3
break;
case 3: ISendByte(PCF8591,0x40);
D[3]=IRcvByte(PCF8591)*2; //ADC3模数转换4
else ack=1; /*判断是否接收到应答信号*/
SCL=0;
_Nop();
_Nop();
}
/*******************************************************************
字节数据接收函数
函数原型: UCHAR RcvByte();
功能:用来接收从器件传来的数据,并判断总线错误(不发应答信号),
*******************************************************************/
bit DACconversion(unsigned char sla,unsigned char c, unsigned char Val)
{
Start_I2c(); //启动总线
}
/*******************************************************************
相关文档
最新文档