基于ATC与TCL的双通道采集电压表格模板的设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

精心整理

基于AT89C51与TCL2543的双通道采集电压表的设计

姓名:

学号:

专业:测控技术与仪器

2014年3月

摘要ti 关键词1.引言转换理。本文介绍了以AT89C51单片机为核心、以TLC2543为转换芯片采样、以四位一体七段数码管显示的具有一定精度电压测量的数字电压表。

2.硬件设计

该系统主要包括以下几个模块:时钟模块、复位模块、控制模块、A/D 转换模块、以及显示模块,其中时钟模块和复位模块是必不可少的部分呢。

时钟模块选择频率为11.0592mhz的晶振,由于是在proteus仿真,则频率大小通过软件设置来完成。复位模块包括上电复位和手动复位两种方式,按钮s1就是用来实现手动复位操作的。控制模块比较简单,主要是以单片机AT89C51为控制核心,但是它要通过软件编写程序再载入单片机中,才能实现处理和控制功能。

A/D转换模块是本系统中最为关键的部分,它要实现将采集到的连续变化的模拟

3.2.1 控制字的格式

控制字为从DATAINPUT端串行输入的8位数据,它规定了TLC2543要转换的模拟量通道、转换后的输出数据长度、输出数据的格式。

3.2.2 转换过程

上电后,片选CS必须从高到低,才能开始一次工作周期,此时EOC为高,输入

数据寄存器被置为0,输出数据寄存器的内容是随机的。开始时,CS片选为高,I/OCLOCK、DATAINPUT被禁止,DATAOUT呈高阻状,EOC为高。

4.软件设计

系统程序的内容一般包括:延时子程序、显示子程序、数据采集子程序、主程序等等。主程序流程图见下图所示。

5.仿真结果如下图

图1系统硬件电路仿真图(通道0采集的数据)

图2系统硬件电路仿真图(通道1采集的数据)

6数据分析

6.1在上图1当中数码管显示的测量电压值是通道0采集的,数值是2.499V,而虚拟电

压表的值是+2.50v;在上图2当中数码管显示的测量电压值是通道1采集的数值是3.399V,而虚拟电压表的值是+3.40v经过多次测验,可以发现所设计的数字电压表的最大误差是0.001v,二者在同一个数码管上交替出现,满足任务要求。

7.结语

本次对数字电压表的软硬件设计,主要是在proteus中硬件仿真,将keil软件编译生成的0~

5v

[1]

[2]

C

sbitSDI=P1^1;

sbitSDO=P1^2;

sbit_cs=P1^3;

sbitEOC=P1^4;

sbitKEY=P3^2;

uchara1,b1,c1,d1; floatsum,sum1; double

sum_final1; double

{

}

{

delay(10);

P2=0xff;

P0=duan[b];

P2=wei[1]; delay(10);

P2=0xff;

P0=duan[c];

P2=wei[2]; delay(10);

P2=0xff;

}

{

CLK=0;

_cs=0;

{

SDI=port&0x80; CLK=1;

CLK=0;

port<<=1;

SDI=0;

for(i=0;i<8;i++) {

CLK=1;

CLK=0;

}

_cs=1;

_cs=0;

{

CLK=1;

CLK=0;

}

{

CLK=1;

al<<=1;

if(SDO)al|=0x01; CLK=0;

_cs=1;

ad=(uint)ah; ad<<=8;

ad|=al;

}

{

CLK=0;

_cs=0;

{

CLK=1;

CLK=0;

port<<=1;

}

SDI=0;

for(i=0;i<8;i++)

CLK=1;

CLK=0;

}

_cs=1;

_cs=0;

{

CLK=1;

CLK=0;

}

{

CLK=1;

if(SDO)bl|=0x01; CLK=0;

}

_cs=1;

ad=(uint)bh;

ad<<=8;

ad|=bl;

return(ad);

}

voidmain()

{

ucharj;

{

{

{

}

sum=sum1/128;

sum1=0;

sum_final1=(sum/4095)*5; sum_final=sum_final1*1000;

a1=(int)sum_final/1000;

b1=(int)sum_final%1000/100;

c1=(int)sum_final%1000%100/10; d1=(int)sum_final%10;

display(a1,b1,c1,d1);

}

else

{

{

}

b1=(int)sum_final%1000/100;

c1=(int)sum_final%1000%100/10; d1=(int)sum_final%10;

display(a1,b1,c1,d1);

}

相关文档
最新文档