单片机AT89S51与ADC0809设计数字电压表 本设计利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,并且要求使用的元器件数目最少。 一、单片机AT89S51简介 AT89S51是一个8位微控制器,具有8051微控制器的所有特性,同时增加了一些新的功能,如可编程的ROM、可编程的I/O口、可编程的中断控制器等。AT89S51具有高性能、低功耗、多功能等特点,广泛应用于各种嵌入式系统中。 二、ADC0809简介 ADC0809是一个8位模拟数字转换器,能够将模拟信号转换为数字信号。ADC0809具有高转换速度、低功耗、低噪音等特点,广泛应用于各种模拟信号处理系统中。 三、系统设计 本设计主要由单片机AT89S51、ADC0809、四位数码显示模块、电源模块等部分组成。其中,单片机AT89S51负责控制整个系统的运作,ADC0809负责将模拟电压信号转换为数字信号,四位数码显示模块负责显示测量的电压值,电源模块负责提供系统所需的电源。 四、电路原理图 电路原理图如图所示,主要包括单片机系统、动态数码显示模块、模数转换模块、电源模块等部分。其中,单片机系统区域中的P1.0-P1.7与动态数码显示模块中的ABCDEFGH端口用8芯排线连接,单片机系统区域中的P2.0-P2.7与动态数码显示模块中的S1S2S3S4S5S6S7S8端口用8芯排线连接,单片机系统区域中的P3.0与模数转换模块中的ST端子用导线相连接,单片机系统区域中的P3.1与模数转换模块中的OE端子用导线相连接,单片机系统区域中的P3.2与模数转换模块中的EOC端子用导线相连接,单片机系统区域中的P3.3与模数转换模块中的CLK端子用导线相连接。 五、程序设计内容 由于ADC0809在进行A/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用。因此产生CLK信号的方法就得用软件来产生了;由于ADC0809的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。实际显示的电压值为(D/256*VREF)。 六、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[i]=temp%10; temp=temp/10; i++; } dispbuf[i]=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; } } 七、结论 本设计利用单片机AT89S51与ADC0809设计了一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,并且要求使用的元器件数目最少。该设计可以广泛应用于各种测量领域中。
- 粉丝: 5
- 资源: 903
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助