⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc574.c

📁 AD574单极性,双极性测量电压,C51编程
💻 C
字号:

#include <reg51.h>
#include    <absacc.h> 
#define uint unsigned int
#define uchar unsigned char
sbit CS = P2^0;
sbit A0 = P2^1;
sbit RC = P2^2;
sbit STS = P3^2;

#define addr XBYTE[0x0000]//AD574地址
#define outh8 XBYTE[0x0400]  //读高8位转换结果地址  
#define outl4 XBYTE[0x0600]  //读低4位转换结果地址

code char  jtled[18]=     //静态显示表
{ 
        0x09,/*0*/
        0x7D,/*1*/
        0x07,/*2*/
        0x15,/*3*/
        0x71,/*4*/
        0x91,/*5*/
        0x81,/*6*/
        0x3D,/*7*/
        0x01,/*8*/
        0x11,/*9*/
        0x21,/*A*/
        0xC1,/*b*/
        0x8B,/*C*/
        0x45,/*d*/
        0x83,/*E*/
        0xA3,/*F*/
        0xf7,/*-*/
};

void delay(uchar i)
{
     while(--i);
}

/*SBUF串行静态显示, 送形参一个一个显示,如要多位显示,
把数据存一数组中, 传送首地址和显示次数,程序循环即可*/

void NByte_jDisp(uchar i,uchar org)
{
     if(org == 1)
         SBUF = jtled[i]-1;
     else
	     SBUF = jtled[i];
     while(!TI)
     ;
     TI = 0;
     delay(10);//延迟时间少一点。可以提高显示的清晰度
}

/******************************************************************** 
函 数 名:adc574()
功    能:AD转换
入口参数:无
返 回 值:无
调用函数:静态显示子程序,延时子程序
***********************************************************************/  

void adc574(uchar a)
{
     uint h,l,out;
	 float fout;
     addr = 1;
	 delay(10);
	 while(STS);
     delay(10);
	 h = outh8; 
	 l = outl4;
	 delay(10);
	 out = (h << 4) + (l >> 4);
if(a == 1)//双极性测量结果处理
{
	 if(out > 2047)  //读数为0-4095,2048为0V电压处,4095为+5V电压处
	 {
	      out = out - 2048;
	      fout = out; 
	      fout = fout * 500 / 2048;
	      out = fout;
	      NByte_jDisp(out/1000,0);
	 }
	 else //负电压处理程序 读数2047为0V电压处,读数0为-5V电压处
	 {
	      out = 4095 - out; //若用4096去减,会产生一个最大值为-5V电压的读数
	      out = out - 2048;
		  fout = out;
	      fout = fout * 500 / 2048;
	      out = fout;
	      NByte_jDisp(16,0);	 
	 }
}
else//单极性测量结果处理
{
	      fout = out; 
	      fout = fout * 1000 / 4096;//10/4096 为AD574的转换精度,*100用于提高运算精度,也是为了方便显示
	      out = fout;
	      NByte_jDisp(out/1000,0);     
}
     NByte_jDisp(out%1000/100,1);
     NByte_jDisp(out%1000%100/10,0);
     NByte_jDisp(out%1000%100%10,0);
}


main()
{
     adc574(0);//0为单极性测量,1为双极性测量
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -