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

📄 main_bak.c

📁 一个使用adc0809进行数据采集,采用1602液晶显示模拟电压的源程序,已经调试通过.
💻 C
字号:
/*ADC0809驱动程序,采用AT89C51与ADC0809芯片进行实现,结果在LCD上显示*/

#include <REG51.H>
#include <stdio.h>
#include <INTRINS.H>				//为调用nop空指令需要
#define DS_NOP()	_nop_();_nop_();_nop_();_nop_()

#define 	REF_Voltage  	5.25  //ADC0809基准电压
#define 	PLUS_CH0		1	  //各个通道增益
#define 	PLUS_CH1		1
#define 	PLUS_CH2		1
#define 	PLUS_CH3		4
#define 	PLUS_CH4		1
#define 	PLUS_CH5		1
#define 	PLUS_CH6		1
#define 	PLUS_CH7		1


	       
/*对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;
/*
sbit   	RW  = P3^6;
sbit   	RS  = P3^5;
sbit   	E   = P3^7;
  */


//unsigned char r1[] = {"pass voltage:"};;
//void	delay();
	
/*ADC0809转换函数,通道3输入模拟信号*/
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_Voltage * plus_ch;
	return(SurveyVoltage);
}   
   
      
 
  
   //延时程序
void delay(unsigned int k)
{
	unsigned int i,j;

	for(i=k; i>0; i--)  
	{
		for(j=255; j>0; j--);	
	} 
}


/*  
  void enable()	 //写指令寄存器
       { 
	     RS = 0;
		 RW = 0;
		 E  = 0;
		 dealy();
		 E  = 1;
	    }

 
    void write_com()	//写命令程序
        {
		P1 = 0x01;
		enable();
		P1 = 0x02;
		enable();
		P1 = 0x07;
		enable();
		P1 = 0X0F;
		enable();
		P1 = 0x1f;
		enable();
		P1 = 0x30;
		enable();  
		}

	void write_data()	//写数据寄存器
	    {
		RS = 1;
		RW = 0;
		E  = 0;
		delay();
		E  = 1;
		}
	

	 void enable();			 //写数地址和数据到LCD 
	      {
		   P1 = 0x80
		   enable();
		   P1 = r1;
		   write_data();
		   P1 = 0xc6;
		   enabke();

		   P1 = adc0809test();	  //是ADC0809的驱动函数*
		   write_data();
		   P1 = 0xc7;
		   enable();
		   P1 = 'V';
		   write_data();
		    }
*/ 

/*主函数程序, LCD驱动函数*/
void main(void)
{
   	float OutVoltage;
	unsigned int Adc0809CHx;

	SCON  = 0x50;		        // SCON: mode 1, 8-bit UART, enable rcvr      
	TMOD |= 0x20;               //TMOD: timer 1, mode 2, 8-bit reload        
	TH1   = 221;                // TH1:  reload value for 1200 baud @ 16MHz   
	TR1   = 1;                  // TR1:  timer 1 run                          
	TI    = 1;                  // TI:   set TI to send first char of UART 

	


   while(1)
   {
		Adc0809CHx = 3;
		OutVoltage = VoltageSurvey(Adc0809CHx);
		printf("the CH%d",Adc0809CHx);
		printf("Voltage is %1.3f\r\n",OutVoltage);
		delay(100);
		/*
		if(Adc0809CHx < 7)
		{
			Adc0809CHx++;
		}
		else
		{
			Adc0809CHx = 0;	
		}
		*/
		
	} 
}

⌨️ 快捷键说明

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