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

📄 main.c

📁 0-30v
💻 C
字号:

/******************************
   名字:  main.c
   作者:  春风  
 创建日:  2008.8.15 
   工程:  数控稳压电源  
*******************************/

#include"reg52.h"
#include"delay.h"
#include"Config.h"
#include"IOCfg.c"
#include"AD7705.h"
#include"DACMAX531.h"
#include"KEY.h"
#include"LCD12864.h"
#include"MENU.h"

//#include"stdlib.h"

char  code dx516[3] _at_ 0x003b;//这是为了仿真设置的(大虾仿真器)
idata  uchar GOUT[7];//在片内定义间接寻址的数组  
static idata uchar x[6] = {0,0,0,0,0,0}; //---定义一个数组 按键数值 存放  

static  uchar set_lcd_temp;//  lcd刷新计数     
static  idata float dac_temp; 

uchar aaa;

//idata float key_vol = 0.0000;

/************************************************************************************

                              把浮点数拆开存储指针型数据  

************************************************************************************/
void chai(float x)  
{
	uint i;
	for(i = 0;i < 7;i ++)
	{
		GOUT[i] = 0;
	}

	i = x / 10;
	if(i == 0)	
	{
		GOUT[0] = ' ';
	}
	else
	{
		GOUT[0] = i + '0';
	}

	GOUT[1] = (int)x % 10 + '0';
	x = x * 10;
	GOUT[3] = (int)x % 10 + '0';
	x = x * 10;
	GOUT[4] = (int)x % 10 + '0';
	x = (x * 10);
	GOUT[5] = (unsigned int)x % 10 + '0';

	GOUT[2] =  '.';
	GOUT[6] =  '\0';
}

/************************************************************************************
                              显示设定电压  
************************************************************************************/
void  disp_set(float set_temp1)
{
    lcm_w_word(0x90,0x00,"设定:");
	chai(set_temp1 +0.0003); 
    lcm_w_word(0x90,3,GOUT);
	lcm_w_word(0x90,0x06,"V   ");	
}

/************************************************************************************

                              扫描按键,并根据键值修改DAC的电压 
							  用数字键输入电压值   ,和加减电压1V和0.1V       

************************************************************************************/

void key_dac(uchar key_temp)
{
	uchar j  = 0;
	uchar i;
	static uchar ii = 0;
	//static uchar key_temp;
	set_lcd_temp = 0;
	//key_temp = key_num();
	if(((key_temp <= 0x09) && (key_temp >= 0x00)) || (key_temp == '.'))
	{
		if(ii == 0) 
		{	w_code(0x93);
			for(ii = 0;ii < 6;ii ++)
			{
				w_data(' ');			
			}
			ii = 0;
		}
	  	if(ii > 5)     
	  	{
			for(i = 0;i < 5;i ++)
			{x[i] = 0;}
			w_code(0x93);
			for(j = 0;j < 6;j++) 
			{w_data(' ');}
			ii = 0;	
	    }
	  	x[ii] = key_temp;  
	  	ii ++;       
	  	if(ii != 0)
		{
			w_code(0x93);
			for(j = 0;j < ii;j++)
			{
				if(x[j] == '.')
				{
					w_data('.');
				}
				else
				{
					w_data(x[j] + 0x30);
				}
			}	  
		}
		lcm_w_word(0x90,0x06,"V   ");
		BELL_ONOFF(1); 
		delay(14000);
		BELL_ONOFF(0);
	}
	if(ii != 0)  
	{	
		if(key_temp == key_enter)
		{
			idata float key_vol = 0.0000;
			idata float chu = 10;
			uchar y = 0;
			j = 0;
			while((x[j] != '.') && (j < 6))	
			j ++;
			if(j == 6)
			{
				 x[ii] = '.';	 
			} 
			ii = 0;
		    while((x[y] != '.') && (y < 6))
		    key_vol = key_vol * 10 + x[y ++];
			y ++;
			while(y < 6)
			{
				key_vol = key_vol + x[y ++] / chu;
				chu = chu * 10;
			}
			for(ii = 0;ii < 6;ii ++)
			{
				x[ii] = 0;
			}  
	 		ii = 0;
	       	j  = 0;
			dac_temp = key_vol;

			RS  =  1;			
	   		RW  =  0;	
	   		if((dac_temp < 0) || (dac_temp >= 30.10)) 
			{
				dac_temp = 0;
				lcm_w_word(0x90,0x03,"  无效  ");
				BELL_ONOFF(1);
			    delay(7000);
			    BELL_ONOFF(0);
				delay(10000);
			    BELL_ONOFF(1); 
			    delay(7000);
			    BELL_ONOFF(0);
				delay(10000);
			    BELL_ONOFF(1);
				delay(7000);
			    BELL_ONOFF(0);
				delay(60000);
				disp_set(dac_temp);
	  			dac(conver(dac_temp));
			}
			else
			{	
				disp_set(dac_temp);
	  			dac(conver(dac_temp));
				BELL_ONOFF(1);
				delay(14000);
				BELL_ONOFF(0);
			}
		}
	}
	switch(key_temp)
	{
		case key_shang:dac_temp = dac_temp + 1.0;break;//---按下上键电压加1V 
		case key_xia  :dac_temp = dac_temp - 1.0;break;//---按下下键电压减1 
		case key_zuo  :dac_temp = dac_temp - 0.1;break;//---按下左键电压减0.1
    	case key_you  :dac_temp = dac_temp + 0.1;break;//---按下右键电压加0.1 
		default: key_temp = 0xff;  
	}
	if(key_temp != 0xff) 	  
	{
		uchar i;
		for(i = 0;i < 5;i ++)
		{
			x[i] = 0;
		}
		w_code(0x93);
		for(i = 0;i < 6;i++) 
		{
			w_data(' ');
		}
		ii = 0;	
       	RS  =  1;			
	   	RW  =  0;	
	   	if((dac_temp < 0) || (dac_temp >= 30.10)) 
		{
			dac_temp = 0;
			lcm_w_word(0x90,0x03,"  无效  ");

			BELL_ONOFF(1);
			delay(7000);
			BELL_ONOFF(0);
			delay(10000);
			BELL_ONOFF(1); 
			delay(7000);
			BELL_ONOFF(0);
			delay(10000);
			BELL_ONOFF(1);
			delay(7000);
			BELL_ONOFF(0);
			delay(60000);

			disp_set(dac_temp);
	  		dac(conver(dac_temp));
		}
		else
		{	
			disp_set(dac_temp);
	  		dac(conver(dac_temp));
			BELL_ONOFF(1);
			delay(14000);
			BELL_ONOFF(0);
		}
	}
}

/************************************************************************************

                                    上电初始屏显示  
									  
************************************************************************************/
void disp_start()
{
	lcd_rst();
	set_zifu();	
	lcm_w_word(0x80,0x02,"稳压电源"); 
	lcm_w_word(0x90,0x00,"设定:");		  
	lcm_w_word(0x88,0x00,"电压:");   
	lcm_w_word(0x98,0x00,"电流:"); 

	chai(0);  
    lcm_w_word(0x90,3,GOUT);	 
	lcm_w_word(0x90,0x06,"V   "); 	

	chai(0);  
    lcm_w_word(0x88,3,GOUT);
	lcm_w_word(0x8e,0x00,"V   ");  

	chai(0);  
    lcm_w_word(0x98,3,GOUT);   
	lcm_w_word(0x9e,0x00,"A   "); 
}

/************************************************************************************
                                   读AD计算并送显示     
************************************************************************************/
void read_ad_disp(void)
{
	static bit U_or_I;
	if(U_or_I == 1)	    
	{
		if(AD_DRDY == 0) 
		{
			chai(adjisuan_U(readAD_data()));  
           	lcm_w_word(0x88,3,GOUT); 
		   	lcm_w_word(0x8e,0x00,"V   ");	

			U_or_I = 0;					   
			write_ad(0x11);
	       	write_ad(0x14);
			write_ad(0x39); 
		}
	}
	else			     
	{
		if(AD_DRDY == 0)  
		{
			chai(adjisuan_I(readAD_data()));  
           	lcm_w_word(0x98,3,GOUT); 
		   	lcm_w_word(0x9e,0x00,"A   ");	

			U_or_I = 1;					  
			write_ad(0x10);
	       	write_ad(0x04);
			write_ad(0x38); 
		}
	}
}


void main(void)
{

   uchar key_linshi;

 		   
			LED_ONOFF(1);
			BELL_ONOFF(0); 
			dac_temp = 0 ;
			dac(conver(dac_temp));
			BELL_ONOFF(0);	

			lcd_rst();	
			lcd_clr();      
			set_huitu();
			delay(6000);
			BELL_ONOFF(0);		
	  	   	
			disp_start();  

	       	rst_ad();

			BELL_ONOFF(1);
				 
		  	set_7705_ch(0);
			write_ad(0x38); 	    	 
			delayms(100);	
		    readAD_data();

		    set_7705_ch(1);
			write_ad(0x39); 
			delayms(100);
			readAD_data();
				
			BELL_ONOFF(0);
		   disp_set(0); 

		   while(1)
		   {
				
		   		lcm_w_word(0x80,0x00,"    稳压电源    "); 
		   		lcm_w_word(0x90,0x00,"设定:");		  
		   		lcm_w_word(0x88,0x00,"电压:");   
		   		lcm_w_word(0x98,0x00,"电流:"); 
		  
		   		

		   		read_ad_disp();	

				key_linshi = key_num();	 
				Menu(key_linshi);   	 
				key_dac(key_linshi);	 
			   
		   }


}

⌨️ 快捷键说明

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