📄 adc0809.c
字号:
#include "system.h"
#include <INTRINS.H> //为调用nop空指令需要
/****************宏定义********************/
#define DS_NOP() _nop_();_nop_();_nop_();_nop_()
#define REF_Voltage1 5.03 //ADC0809基准电压
#define REF_Voltage2 -5.02 //ADC0809基准电压
#define PLUS_CH0 1 //各个通道增益
#define PLUS_CH1 1
#define PLUS_CH2 1
#define PLUS_CH3 1
#define PLUS_CH4 1
#define PLUS_CH5 1
#define PLUS_CH6 1
#define PLUS_CH7 5
/**************ADC0809引脚定义**********/
sbit ST = P2^5;
sbit OE = P2^4;
sbit EOC = P2^3;
sbit ADC0809_C = P2^2;
sbit ADC0809_B = P2^1;
sbit ADC0809_A = P2^0;
/*****************************************************
ADC0809转换函数
输入: 通道号(0-7)
返回: 测量到的模拟电压所对应的数字量
*****************************************************/
unsigned char ADC0809test(unsigned char ch0)
{
unsigned char ADCdata; //AD转换后得到的数字量
ST = 0;
EOC = 1;
OE = 0;
switch(ch0)
{
case 0:
{
ADC0809_A = 0;
ADC0809_B = 0;
ADC0809_C = 0;
break;
}
case 1:
{
ADC0809_A = 1;
ADC0809_B = 0;
ADC0809_C = 0;
break;
}
case 2:
{
ADC0809_A = 0;
ADC0809_B = 1;
ADC0809_C = 0;
break;
}
case 3:
{
ADC0809_A = 1;
ADC0809_B = 1;
ADC0809_C = 0;
break;
}
case 4:
{
ADC0809_A = 0;
ADC0809_B = 0;
ADC0809_C = 1;
break;
}
case 5:
{
ADC0809_A = 1;
ADC0809_B = 0;
ADC0809_C = 1;
break;
}
case 6:
{
ADC0809_A = 0;
ADC0809_B = 1;
ADC0809_C = 1;
break;
}
case 7:
{
ADC0809_A = 1;
ADC0809_B = 1;
ADC0809_C = 1;
break;
}
default:break;
}
ST = 1;
ST = 0;
DS_NOP();
while(EOC == 0)
{
;
}
if(EOC == 1)
{
OE = 1;
ADCdata = P0;
return (ADCdata);
}
}
/*******************************************************
电压测量并装换成实际的电压值
入口参数: AD_ChannelNumber 输入通道号:在0-7之间选择
出口参数: 转换后的电压值,实际的值
********************************************************/
float VoltageSurvey(unsigned char AD_ChannelNumber)
{
float SurveyVoltage; //测量到的电压值
float plus_ch; //通道增益
switch(AD_ChannelNumber)
{
case 0: plus_ch = PLUS_CH0;break;
case 1: plus_ch = PLUS_CH1;break;
case 2: plus_ch = PLUS_CH2;break;
case 3: plus_ch = PLUS_CH3;break;
case 4: plus_ch = PLUS_CH4;break;
case 5: plus_ch = PLUS_CH5;break;
case 6: plus_ch = PLUS_CH6;break;
case 7: plus_ch = PLUS_CH7;break;
default:break;
}
SurveyVoltage = ADC0809test(AD_ChannelNumber);
SurveyVoltage = (SurveyVoltage / 256) * REF_Voltage1 * plus_ch;
return(SurveyVoltage);
}
/*******************************************************
负5V电压测量并装换成实际的电压值
入口参数: AD_ChannelNumber 输入通道号:在3
出口参数: 转换后的电压值,实际的值
********************************************************
unsigned char fuvoltage(void)
{
float fudianya;
float fudianya1;
fudianya = VoltageSurvey(5);
fudianya1 = (fudianya + 5) - 2*fudianya;
return(fudianya1);
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -