📄 adc574.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 + -