原创 【转】数模转换ADC0804的应用实验

2010-11-8 23:51 2344 3 4 分类: 模拟

[实验任务]
   从ADC0804的通道IN+输入0-5V之间的模拟量,通过ADC0804转换成数字量在数码管上以十进制形成显示出来。


[实验原理]
   ADC0804是8位全MOS 中速A/D转换器、它是逐次逼近式A/D转换器,片内有三态数据输出锁存器,可以和单片机直接接口。单通道输入,转换时间大约为100us。ADC0804转换时序是:当CS=0许可进行A/D转换。WR由低到高时,A/D开始转换,一次转换一共需要66-73个时钟周期。CS与WR同时有效时启动A/D转换,转换结束产生INTR信号(低电平有效),可供查询或者中断信号。在CS和RD的控制下可以读取数据结果。


[C语言源程序]
/*注意:程序下载到DPY-1实验板单片机后一定要使SW DIP1的开关脱离ON档。或者直接将下载线从实验板上拔下。因为下载线接在I/O口P1.5,P1.6,P1.7上,下载线的电平将会影响测量结果*/
#include <reg52.h>
code unsigned char seg7code[10]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f}; //显示段码
sbit int1=P3^3;  //定义管脚功能
sbit cs=P3^2; 
sbit wr=P3^6; 
sbit rd=P3^7; 
void Delay(unsigned int tc)     //显示延时程序
{while( tc != 0 ) 
 {unsigned int i; 
  for(i=0; i<100; i++);
  tc--;}
}
unsigned char adc0804( void )     //读AD0804子程序
{   unsigned char addata,i;
 rd=1;wr=1;int1=1; //读ADC0804前准备
 P1=0xff;         //P1全部置一准备
 cs=0;wr=0;wr=1; //启动ADC0804开始测电压
 while(int1==1); //查询等待A/D转换完毕产生的INT(低电平有效)信号
 rd=0;     //开始读转换后数据
 i=i; i=i;    //无意义语句,用于延时等待ADC0804读数完毕
 addata=P1;//读出的数据赋与addate
 rd=1;cs=1;//读数完毕
return(addata);//返回最后读出的数据
}
unsigned int datpro(void)//ADC0804读出的数据处理
{ unsigned char x;  
unsigned int dianyah,dianyal; //用于存储读出数据的高字节和低字节
unsigned int dianya=0;        //存储最后处理完的结果 注意数据类型
for(x=0;x<10;x++)             //将10次测得的结果存储在dianya中
{dianya=adc0804()+dianya; }
dianya=dianya/10; //求平均值
dianyah=dianya&0xf0; //屏蔽低四位
dianyah=dianyah>>4;  //右移四位 取出高四位
dianyal=dianya&0x0f; //屏蔽高四位 取出低四位
dianya=dianyal*20+dianyah*320; //最后的结果是一个四位数,便于显示
return(dianya);//返回最后处理结果
}
void Led()
{  unsigned int date;
   date=datpro();  //调用数据处理最后结果
   P2=P2&0xef;
   P0=seg7code[date/1000]|0x80; //输出个位数和小数点
   Delay(8); P2=P2|0xf0; P2=P2&0xdf; 
   P0=seg7code[date%1000/100]; //输出小数点后第一位
Delay(8); P2=P2|0xf0; P2=P2&0xbf;
   P0=seg7code[date%100/10];   //输出小数点后第二位
 Delay(8); P2=P2|0xf0; P2=P2&0x7f;
   P0=seg7code[date%10];       //输出小数点后第三位
   Delay(8); P2=P2|0xf0;
}
main()
{
  while(1)
  {
      Led( ); //只需调用显示函数
  }
}


硬件电路图
 


PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户377235 2013-4-22 15:19

您好!我用了您的程序和电路图后,发现无论怎么改变滑线变阻器的阻值,数码管显示的值永远不改变呀!我不知道哪出现问题了?求高手解答!
相关推荐阅读
huotingtu_505472073 2014-01-12 22:18
嵌入式程序员面试问题集锦
这个测试适于不同水平的应试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了让你能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为你所用,请自行按你的意...
huotingtu_505472073 2011-04-14 23:24
【转】一种实用的步进电机驱动电路
1 引言步进电动机是一种将电脉冲信号转换成角位移或线位移的精密执行元件,由于步进电机具有控制方便、体积小等特点,所以在数控系统、自动生产线、自动化仪表、绘图机和计算机外围设备中得到广泛应用。微电子学的...
huotingtu_505472073 2011-04-14 23:22
【转】几种微型电机驱动电路分析
 以下所述电路用于3V供电的微型直流电机的驱动,这种电机有两根引线,更换两根引线的极性,电机换向。该驱动电路要求能进行正反转和停止控制。 电路一: 如下图所示,这电路是作者最初设计的电路,P1.3、P...
huotingtu_505472073 2011-02-18 19:57
【转】集成运放组成的电压比较器
1. 功能及应用:主要用来判断输入信号电位之间的相对大小,它至少有两个输入端及一个输出端,通常用一个输入端接被比较信号Ui,另一个则接基准电压VR 定门限电压(或称阀值)的UT。输出通常仅且仅有二...
huotingtu_505472073 2011-01-26 08:05
【转】直流无刷电动机工作原理与控制方法12
研究结果表明,在半导体薄片上产生的霍尔电动势E可用下式表示: 式中RH ——霍尔系数(  );IH——控制电流(A);B——磁感应强度(T);d——薄片厚度(m);p——材料电阻率(Ω*s);...
huotingtu_505472073 2011-01-26 07:55
【转】直流无刷电动机工作原理与控制方法1
序言   由于直流无刷电动机既具有交流电动机的结构简单、运行可靠、维护方便等一系列优点,又具备直流电动机的运行效率高、无励磁损耗以及调速性能好等诸多优点,故在当今国民经济各领域应用日益普及。   一个...
我要评论
1
3
关闭 站长推荐上一条 /3 下一条