原创 单片机AT89S51与ADC0809设计一个数字电压表

2009-9-20 08:26 4028 5 6 分类: MCU/ 嵌入式
作者:    时间:2008-08-15    来源:嵌入式技术网应用论文 
 
      

您可以添加到网摘 让更多人关注此文章:

    


 


1. 实验任务



利用单片机AT89S51ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少。



2. 电路原理图


点击看大图



3. 系统板上硬件连线



a)         把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。



b)        把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。



c)        把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。



d)        把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。



e)         把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。



f)         把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。



g)        把“模数转换模块”区域中的A2A1A0端子用导线连接到“电源模块”区域中的GND端子上。



h)        把“模数转换模块”区域中的IN0端子用导线连接到“三路可调电压模块”区域中的VR1端子上。



i)          把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。



4. 程序设计内容



由于ADC0809在进行A/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用。因此产生CLK信号的方法就得用软件来产生了;由于ADC0809的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。实际显示的电压值 (D/256*VREF)



5. 汇编源程序



(略)



6. C语言源程序



#include <AT89X52.H>



 



unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,



                                  0xef,0xdf,0xbf,0x7f};



unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,



                               0x6d,0x7d,0x07,0x7f,0x6f,0x00};



unsigned char dispbuf[8]={10,10,10,10,0,0,0,0};



unsigned char dispcount;



unsigned char getdata;



unsigned int temp;



unsigned char i;



 



sbit ST="P3"^0;



sbit OE="P3"^1;



sbit EOC="P3"^2;



sbit CLK="P3"^3;



   



void main(void)



{



  ST="0";



  OE="0";



  ET0=1;



  ET1=1;



  EA="1";



  TMOD="0x12";



  TH0=216;



  TL0=216;



  TH1=(65536-4000)/256;



  TL1=(65536-4000)%256;



  TR1=1;



  TR0=1;



  ST="1";



  ST="0";



  while(1)



    {



      if(EOC==1)



        {



          OE="1";



          getdata="P0";



          OE="0";



          temp="getdata"*235;



          temp="temp/128";



          i="5";



          dispbuf[0]=10;



          dispbuf[1]=10;



          dispbuf[2]=10;



          dispbuf[3]=10;



          dispbuf[4]=10;



          dispbuf[5]=0;



          dispbuf[6]=0;



          dispbuf[7]=0;



          while(temp/10)



            {



              dispbuf=temp%10;



              temp="temp/10";



              i++;



            }



          dispbuf=temp;          



          ST="1";



          ST="0";



        }



    }



}



 



void t0(void) interrupt 1 using 0



{



  CLK=~CLK;



}



 



void t1(void) interrupt 3 using 0



{



  TH1=(65536-4000)/256;



  TL1=(65536-4000)%256;



  P1=dispcode[dispbuf[dispcount]];



  P2=dispbitcode[dispcount];



  if(dispcount==7)



    {



      P1=P1 | 0x80;



    }



  dispcount++;



  if(dispcount==8)



    {



      dispcount="0";



    }  



}


 


 


 


 


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1834943 2015-4-14 15:26

怎么改成量程为0~20V的?
相关推荐阅读
用户1414655 2012-11-28 16:09
给你们介绍一些毛骨悚然的骗人技术
星期六下午 2 点多, 我一个人乘70 路至四川路,当中我在和我老公通电话的时候发觉有人拍了下我的肩膀,刚开始我以为是遇到认识的人和我打招呼的,后来一看旁边是40 多岁的...
用户1414655 2009-11-24 23:01
通信电源蓄电池温度监测系统设计
0 引 言    在通信系统的设计和建设中,通信电源被称为通信系统的心脏,电源系统将直接影响通信系统的可靠性和稳定性。美国APC公司的一项调查结果表明,大约有75%以上的通信系统故障都是由于电源设备故...
用户1414655 2009-09-23 08:53
各种白光LED驱动电路特性评比
作者:    时间:2008-12-02    来源:52RD硬件研发         1996年日亚化学的中村氏发表蓝光LED之后,白光LED就被视为次世代照明光源最具发展潜力的元件,因此有关白光L...
用户1414655 2009-09-23 08:52
论机器视觉与图像分析技术
作者:    时间:2008-12-02    来源:52RD硬件研发         也许你仍然希望能得到咨询专家的帮助,不过紧缩包裹型(Shrink-Wrapped)开发工具包现在已经使得缺乏专业...
用户1414655 2009-09-23 08:52
LCD TV视频解码器技术概述
作者:    时间:2008-12-03    来源:52RD硬件研发          CD TV属于高整合性电子产品,它涵盖了演算法、软体、韧体、硬体、晶片、无线射频等领域,且许多专利仍是属于国外...
用户1414655 2009-09-23 08:52
液晶显示器的自动调光技术
作者:    时间:2008-12-03    来源:52RD硬件研发          最近几年大型液晶显示器的应用,从笔记型电脑、PDA、桌上型电脑用监视器,持续扩展至家用液晶电视等领域,液晶电视...
EE直播间
更多
我要评论
1
5
关闭 站长推荐上一条 /3 下一条