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

📄 main.c

📁 基于Keil uVision2平台的C51控制温度老化试验箱的源代码。 1、温度传感器采集温度 2、传感器信号传入 ADC电路 3、经AT89C52单片机的处理分析输出控制 4、通过继电器控制
💻 C
字号:
////////////////////////////////////*/
/*									*/
/*		Hot_Box						*/
/*		Version_2					*/
/*      AHTL_2007_11             	*/
/*									*/
/*		 							*/
/*		MAIN.C 						*/
/*									*/
////////////////////////////////////*/
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#include "lcd.h"
#include "key.h"
#include "ad.h"
#include "main.h"
#include "eep.h"

/*variable definition*/
unsigned char press_l, press_h;
//unsigned int  


/*functions*/ 
void init_system(void);
void operat_mode(void);
void window_operat(void);
unsigned int sample(void);
unsigned int ad2temp(unsigned int);
void t_set(void);
void t_run(void);
/*-------------------------------------------------------------------------*/
void init_system(void)
{	
	ctrl_da=0;
//	TMOD|=0x11;			//T0:16bits Timer 
//	TH0=TH0_20MS;
//	TL0=TL0_20MS;
	ET0=1;
	EA=1;
	run=1;
	stop=0;

	ctrl_da=1;
	_nop_();
	_nop_();
	_nop_();
	ctrl_da=0;
	ctrl_da=1;
	s_clk=0;

    _init_display ();
	_disp_msge(0,0,"Temp. Controller");
    _disp_msge(1,0," AHTL   2006.11 ");
	_delay500us(200);
	_delay500us(200);    
    _delay500us(200);
	_delay500us(200);
	_delay500us(200);
	_delay500us(200);
	_delay500us(200);
	_delay500us(200);    
	_disp_msge(0,0," System Initial ");
    _disp_msge(1,0," AHTL   2006.11 ");
	_delay500us(200);
	_delay500us(200);    
    _delay500us(200);
	_delay500us(200);
	_delay500us(200);
	_delay500us(200);
	_delay500us(200);
	_delay500us(200);    
    _delay500us(200);
	_clear_display();
	if(_read_eep_byte(eep_ready)==0x25)
		{
		press_l=_read_eep_byte(eep_press_l );
		press_h=_read_eep_byte(eep_press_h );
		}
	else
		{
		press_l=40;
		press_h=50;
		_write_eep_byte(eep_press_l,40);
		_write_eep_byte(eep_press_h,50);
		_write_eep_byte(eep_ready,0x25);
		}
}
/*--------------------------------------------------------*/
void window_operat()
{
	_clear_display();
	_disp_msge(0,0,"    Hot  Box    ");
	_disp_msge(1,0,"1:SET      2:RUN");
	_cursor_pos(1,0);
}
/*--------------------------------------------------------*/
void operat_mode(void)
{
	bit exit_flag=0;
	unsigned char r,c,old_r,old_c;
	c=0;
	r=1;
	while(!exit_flag)
	{
 		switch(_scan_key())
		{
			case KP_LEFT:
				switch (c)
				{
					case 0:
						c=11;
						break;
					case 11:
						c=0;
						break;
					default:
						break;
				}
				_cursor_pos(r,c);
				break;
			case KP_RIGHT:
				switch (c)
				{
					case 0:
						c=11;
						break;
					case 11:
						c=0;
						break;
					default:
						break;
				}
				_cursor_pos(r,c);
				break;
			case KP_ENTER:
				switch (c)
				{
					case 0:	  
						t_set();
						old_c=c;
						old_r=r;
						_clear_display();
						_disp_msge(0,0,"    Hot  Box    ");
						_disp_msge(1,0,"1:SET      2:RUN");
						c=old_c;
						r=old_r;
						_cursor_pos(r,c);
						_cursor_sw(1);
						break;
					case 11:
						t_run();
						old_c=c;
						old_r=r;
						_clear_display();
						_disp_msge(0,0,"    Hot  Box    ");
						_disp_msge(1,0,"1:SET      2:RUN");
						c=old_c;
						r=old_r;
						_cursor_pos(r,c);
						_cursor_sw(1);
						break;
					default:
						break;
				}
				break;
			default:
				break;
		}
	}  
}
/*--------------------------------------------------------*/
void main (void)
{
   	init_system();	/*初始化系统*/
	while(1)
		{
		window_operat();
		operat_mode();
		}
}
/*--------------------------------------------------------*/
unsigned int ad2temp(unsigned int val)			//linear simulink in 4 parts
{
    unsigned char temp;
	unsigned long val_long;

	val_long=val;
	val_long=val_long * 5000 / 1023;
	val=(unsigned int) val_long;
	if(val>1835)
		temp=0;
	if(val<255)
		temp=99;
	if((val<=1835)&&(val>=1025))
		temp=(1835-val)/35+20;
    else	if((val<1025)&&(val>=605))
				temp=(1025-val)/25+43;    
	 		else	if((val<605)&&(val>=395))
							temp=(605-val)/15+60;  
    				else	if((val<395)&&(val>=255))
								temp=(395-val)/10+74; 
	return temp;
}
/*--------------------------------------------------------*/
void save_data()
{
    _clear_display();
    _disp_msge(1,0," Save Paramater ");
    _delay500us(200);
    _delay500us(200);
    _delay500us(200);
    _clear_display();
}
/*--------------------------------------------------------*/
void t_set(void)
{
	unsigned char old_r,old_c,r,c;
	unsigned char num_l,num_h;
	bit exit_flag=0;
	
	_clear_display();
	_disp_msge(0,0,"SET             ");
	_disp_msge(1,0,"Low:xxC-High:xxC");
	_cursor_pos(1,4);
	num_l=press_l;
	num_h=press_h;
	_display_bit8(1,4,num_l);
	_display_bit8(1,13,num_h);
	r=1;
	c=4;
	_cursor_pos(r,c);
	_cursor_sw(1);

	while(!exit_flag)
		{
		switch(_scan_key())
			{
			case KP_EXIT:
				exit_flag=1;
				break;
			case KP_MENU:
				exit_flag=1;
				break;
			case KP_SAVE:
				old_r=r;
				old_c=c;
				press_h=num_h;
				press_l=num_l;
				_write_eep_byte(eep_press_l,num_l);
				_write_eep_byte(eep_press_h,num_h);
				save_data();
				_clear_display();
				_disp_msge(0,0,"SET             ");
				_disp_msge(1,0,"Low:xxC-High:xxC");
				_display_bit8(1,4,num_l);
				_display_bit8(1,13,num_h);
				r=old_r;
				c=old_c;
				_cursor_pos(r,c);
				break;
			case KP_LEFT:
				switch (c)
					{
					case 4:
						c=14;
						break;
					case 5:
						c=4;
						break;
					case 13:
						c=5;
						break;
				    case 14:
						c=13;
						break;
					default:
						break;
					}
				_cursor_pos(1,c);
				break;
			case KP_RIGHT:
				switch (c)
					{
					case 4:
						c=5;
						break;
					case 5:
						c=13;
						break;
					case 13:
						c=14;
						break;
				    case 14:
						c=4;
						break;
					default:
						break;
					}
				_cursor_pos(1,c);
				break;
			case KP_INC:
				switch(c)
					{
					case 4:
						if((_hex2tobcd(num_l)&0x0f0) < 0x90)
							num_l +=10;
						_display_bit8(r,4,num_l);
						_cursor_pos (r,4);
						break;
					case 5:
						if((_hex2tobcd(num_l)&0x0f) < 0x9)
							num_l ++;
						_display_bit8(r,4,num_l);
						_cursor_pos (r,5);
						break;
					case 13:
						if((_hex2tobcd(num_h)&0x0f0) < 0x90)
							num_h +=10;
						_display_bit8(r,13,num_h);
						_cursor_pos (r,13);
						break;
					case 14:
						if((_hex2tobcd(num_h)&0x0f) < 0x9)
							num_h ++;
						_display_bit8(r,13,num_h);
						_cursor_pos (r,14);
						break;
					default:
						break;
					}
				break;
			case KP_DEC:
				switch(c)
					{
					case 4:
						if(_hex2tobcd(num_l)&0x0f0) 
							num_l -=10;
						_display_bit8(r,4,num_l);
						_cursor_pos (r,4);
						break;
					case 5:
						if(_hex2tobcd(num_l)&0x0f0)
							num_l --;
						_display_bit8(r,4,num_l);
						_cursor_pos (r,5);
						break;
					case 13:
						if(_hex2tobcd(num_h)&0x0f0)
							num_h -=10;
						_display_bit8(r,13,num_h);
						_cursor_pos (r,13);
						break;
					case 14:
						if(_hex2tobcd(num_h)&0x0f)
							num_h --;
						_display_bit8(r,13,num_h);
						_cursor_pos (r,14);
						break;
					default:
						break;
					}
				break;
			default:
				break;
			}
		}
}
/*-------------------------------------------------*/
void t_run(void)
{
	bit exit_flag=0;
	bit hot_flag=1;
	unsigned char real;

	_clear_display();
	_disp_msge(0,0,"RUN:    xx--xx C");
	_disp_msge(1,0,"            00 C");
	_display_bit8(0, 8,	press_l);
	_display_bit8(0,12,	press_h);
	run=0;
	stop=1;
//	flag_disp=0;
//	tm0_num=0;
	while(!exit_flag)
		{
		switch(_scan_key())
			{
			case KP_EXIT:
				exit_flag=1;
				run=1;
				stop=0;
				break;
			case KP_MENU:
				exit_flag=1;
				run=1;
				stop=0;
				break;
			default:
				break;
			}
//		TR0=0;
		real = (char)sample();   
		if(real>press_h)
        	{
            run=1;
			stop=0;
            hot_flag=0;
        	}
        else 
        	{
            if(real<press_l)
            	{
                run=0;
				stop=1;
                hot_flag=1;
            	}	
            else 
            	{
                if(hot_flag) 
					{
					run=0;
					stop=1;
					}
				else 
					{
					run=1;
					stop=0;
					}
            	}
         	}	
//		TR0=1;
//		if(flag_disp)
//			{
		if(real>88||real<20)
			{
			if(real>88)
				_disp_msge (1, 11, ">88");
			if(real<20)
				_disp_msge (1, 11, "<20");
			_cursor_sw(0);
			}
		else
			{
			_disp_msge(1,0,"            00 C");
			_display_bit8(1,12,	real);
			_cursor_sw(0);
			}
//			flag_disp=0;
//			}
		}
}
/*----------------------------------------------------*/
unsigned int sample(void)
{
//    unsigned char i;
	unsigned char i,j;
    unsigned int t_max,t_min,t_suv_av;
//	unsigned int t_suv_av;
	unsigned int samp[4],t_sum=0;

    for(i=0;i<4;i++)
    	{
//_display_bit8 (0,0,i);
//_delay500us(200);		
		samp[i]=ad2temp(_ad_result());     
        t_sum+=samp[i];
//_clear_display();
//_display_bit8 (0,10,i);
//_display_bit16 (1,10,samp[i]);
//_display_bit16 (0,10,_ad_result());
//_delay500us(200);
    	}
    t_max=samp[3];
    t_min=samp[3];
	for(j=4;j>1;j--)
    	{ 
        if(samp[j-2]>t_max)
            t_max=samp[j-2];    //get t_max;
        if(samp[j-2]<t_min)
            t_min=samp[j-2];    //get t_max;
//		_clear_display();
//		_display_bit8 (0,3,j-2);
//		_display_bit16 (1,3,t_max);
//		_delay500us(200);
    	}
    t_suv_av=(t_sum-t_max-t_min)/2;    //get the average of one survey;

//	t_suv_av=t_sum/8;
    return t_suv_av;
}
/*----------------------------------------------------*/

⌨️ 快捷键说明

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