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

📄 user_jiekou.c

📁 这里有很多我自己做的凌阳单片机源程序
💻 C
字号:
#include<spce061a_chf.h>
#include"bit.h"
#include"V20celiang.h"
//////////////////////////////////////////
//定义相应的标号
//////////////////////////////////////////
#define ALE P0_3
#define START P0_0
#define EOC P0_1
#define OE P0_2
#define ADDA P0_4
#define ADDB P0_5
#define ADDC P0_6
int fu_flag=0;
//////////////////////////////////////////
//函数:void init_IO_AD(void)
//描述:AD采集时候用到的IO口初始化
//参数:无
//返回:无
//////////////////////////////////////////
void init_IO_AD(void)
{
	*P_IOA_Dir=0x00ff;
	*P_IOA_Attrib=0x00ff;
	*P_IOA_Data=0x0000;//高8位为数字量输入,低8位为控制线端口
}
///////////////////////////////////////////
//函数:float read_AD_zheng(void)
//描述:读取0通道的正电压值
//参数:Line_num相应的通道号
//返回:返回相应的电压值
///////////////////////////////////////////
float read_AD_zheng(void)
{
	float AD_fvloatge=0.0;
	unsigned int jj=0;
	unsigned int AD_uiData=0;
	unsigned int kk=0;	
	for(;jj<30;jj++)
	{
	ADDA=0;
	ADDB=0;
	ADDC=0;	
	ALE=1;
	asm("nop");
	asm("nop");
	ALE=0;	
	START=1;
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");	
	START=0;//启动AD转换
	PA_Dir->bit.bit1=0;//改成输入方式
	delay();
	while(EOC==0);		
	OE=1;
	asm("nop");
	asm("nop");
	AD_uiData=PA->byte.byteh;
	kk=AD_uiData;
	if(kk&0x01)
	{
		AD_uiData=AD_uiData|0x08;
	}
	else
	{
		AD_uiData&=0xf7;
	}
	if(kk&0x08)
	{
		AD_uiData|=01;
	}
	else
	{
		AD_uiData&=0xfe;
	}
	AD_fvloatge+=AD_uiData*5.0/255;
	}
	return (AD_fvloatge/30);
}
///////////////////////////////////////////
//函数:float read_AD_fu(void)
//描述:读取1通道的负电压值
//参数:无
//返回:返回相应的电压值
///////////////////////////////////////////
float read_AD_fu(void)
{	
	float AD_fvloatge=0.0;
	unsigned int AD_uiData=0;
	unsigned int kk=0;
	unsigned int jj=0;
	for(jj=0;jj<30;jj++)
	{
	ADDA=1;
	ADDB=0;
	ADDC=0;	
	ALE=1;
	asm("nop");
	asm("nop");
	ALE=0;	
	START=1;
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");	
	START=0;//启动AD转换
	PA_Dir->bit.bit1=0;//改成输入方式
	delay();
	while(EOC==0);		
	OE=1;
	asm("nop");
	asm("nop");
	AD_uiData=PA->byte.byteh;//读取数据????????可以多加几句测试读数是否一样
	kk=AD_uiData;
	if(kk&0x01)
	{
		AD_uiData=AD_uiData|0x08;
	}
	else
	{
		AD_uiData&=0xf7;
	}
	if(kk&0x08)
	{
		AD_uiData|=01;
	}
	else
	{
		AD_uiData&=0xfe;
	}
	AD_fvloatge+=AD_uiData*5.0/255;
	}
	return (AD_fvloatge/30);
}
///////////////////////////////////////////
//函数:float read_AD_zhijie(void)
//描述:读取2通道的0-5V电压值
//参数:无
//返回:返回相应的电压值
///////////////////////////////////////////
float read_AD_zhijie(void)
{
	float AD_fvloatge=0.0;
	unsigned int AD_uiData=0;
	unsigned int kk=0;
	unsigned int jj=0;
	for(jj=0;jj<30;jj++)
	{
	ADDA=0;
	ADDB=1;
	ADDC=0;	
	ALE=1;
	asm("nop");
	asm("nop");
	ALE=0;	
	START=1;
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");	
	START=0;//启动AD转换
	PA_Dir->bit.bit1=0;//改成输入方式
	delay();
	while(EOC==0);		
	OE=1;
	asm("nop");
	asm("nop");
	AD_uiData=PA->byte.byteh;//读取数据????????可以多加几句测试读数是否一样
	kk=AD_uiData;
	if(kk&0x01)
	{
		AD_uiData=AD_uiData|0x08;
	}
	else
	{
		AD_uiData&=0xf7;
	}
	if(kk&0x08)
	{
		AD_uiData|=01;
	}
	else
	{
		AD_uiData&=0xfe;
	}
	AD_fvloatge==AD_uiData*5.0/255;
	}
	return (AD_fvloatge/30);
}
///////////////////////////////////////////
//函数:void do_fu(void)
//描述:负电压的采集和显示
//参数:无
//返回:无
///////////////////////////////////////////
void do_fu(void)
{
	unsigned char a[]="error";
	float volatge2=0.0;
	unsigned int temp;
	unsigned int jiyi_value;
	fu_flag=1;
	volatge2=read_AD_fu();
	temp=volatge2*100;
	jiyi_value=temp/10;
	if((temp>374)&(temp<501))
	{
		volatge2=volatge2*4;
		v_data_to(volatge2);//-20---15就显示
		goto lab;
	}
	else
	{
		lcd_display(a,sizeof(a));
		do
		{					
			volatge2=read_AD_fu();
			temp=volatge2*100;
		}while((temp/10)==jiyi_value);//说明没有换挡					
	}
	volatge2=read_AD_fu();//换挡后再读		
	temp=volatge2*100;
	jiyi_value=temp/10;
	if((temp>332)&(temp<501))	
	{				
		volatge2=volatge2*3;
		v_data_to(volatge2);//-20---15就显示
		goto lab;
	}
	else
	{
		lcd_display(a,sizeof(a));
		do
		{					
			volatge2=read_AD_fu();
			temp=volatge2*100;
		}while((temp/10)==jiyi_value);//说明没有换挡					
	}
	volatge2=read_AD_fu();//换挡后再读??????负电压没有-5~0档	
	v_data_to(volatge2);
lab:asm("nop");		

}
///////////////////////////////////////////
//函数:void do_zheng(void)
//描述:正电压的采集和显示
//参数:无
//返回:无
///////////////////////////////////////////
void do_zheng(void)
{
	unsigned char a[]="error";
	unsigned temp;
	float volatge2=0.0;
	unsigned int jiyi_value;
	fu_flag=0;
	volatge2=read_AD_zheng();
	temp=volatge2*100;
	jiyi_value=temp/10;
	if((temp>374)&(temp<501))
	{
		volatge2=volatge2*4;
		v_data_to(volatge2);//-20---15就显示
		goto lab1;
	}
	else
	{
		lcd_display(a,sizeof(a));
		do
		{					
			volatge2=read_AD_zheng();
			temp=volatge2*100;
		}while((temp/10)==jiyi_value);//说明没有换挡					
	}
	volatge2=read_AD_zheng();//换挡后再读		
	temp=volatge2*100;
	jiyi_value=temp/10;
	if((temp>332)&(temp<501))	
	{				
		volatge2=volatge2*3;
		v_data_to(volatge2);//-20---15就显示
		goto lab1;
	}
	else
	{
		lcd_display(a,sizeof(a));
		do
		{					
			volatge2=read_AD_zheng();
			temp=volatge2*100;
		}while((temp/10)==jiyi_value);//说明没有换挡					
	}
	volatge2=read_AD_zheng();//换挡后再读	
	v_data_to(volatge2);	
	temp=volatge2*100;
	jiyi_value=temp/10;
	if((temp>199)&(temp<501))
	{		
		volatge2=volatge2*2.5;
		v_data_to(volatge2);//-20---15就显示
		goto lab1;
	}
	else
	{
		lcd_display(a,sizeof(a));
		do
		{						
			volatge2=read_AD_zheng();
			temp=volatge2*100;
		}while((temp/10)==jiyi_value);//说明没有换挡					
	}
	volatge2=read_AD_zhijie();//换挡后再读,已经换到0~5档	
	v_data_to(volatge2);//		
	
lab1:asm("nop");
}
///////////////////////////////////////////
//函数:void delay(void)
//描述:延时函数
//参数:无
//返回:无
///////////////////////////////////////////
void delay(void)
{
	unsigned int i=100;
	while(i--)
	{
		asm("nop");
	}
}	
	
	

⌨️ 快捷键说明

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