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

📄 adc0809.c

📁 一个集合DS18B20的多路温度测量系统,加上adc0809数据采集,加上1602液晶显示的综合数据处理系统,有较高学习价值.
💻 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 + -