www.pudn.com > cytd0328.rar > cytd0328.c


#include  
#include  
#include  
#include  
 
/*adc0809*/ 
sbit P3_3_EOC	= P3^3; 
sbit P3_4_STR	= P3^4; 
sbit P3_5_OE	= P3^5; 
sbit P3_6_ALE	= P3^6; 
sbit P3_7_ADDR	= P3^7; 
 
/*状态开关*/ 
sbit P3_2_STAT	= P3^2; 
 
/*看门狗*/ 
sbit	P1_6_DOG = P1^6; 
 
/*报警控制*/ 
sbit P1_7_POWER	= P1^7; 
 
unsigned char count=0; 
unsigned char count_but=1; 
unsigned char flag=0;		/*按钮标志*/ 
unsigned char flag_alarm=0; 
unsigned char step_dis=1;	/*显示步聚*/ 
unsigned char temp,power; 
unsigned char disp_buff[6]; 
unsigned int  power_val,temp_val; 
unsigned char delay_time; 
unsigned char count_alarm=0; 
unsigned char 	value; 
code unsigned char CGTAB[11]={0x39,0x6e,0x6e,0x76,0x40,0x7d,0x71,0x06,0x4f,0x06,0x3f};/*CYYH-6F1310*/ 
code unsigned char POW[3]={0x73,0x40,0x40};/*P--*/ 
code unsigned char TEM[3]={0x78,0x40,0x40};/*T--*/ 
code unsigned char ALARM[6]={0x00,0x40,0x77,0x38,0x40,0x00};/*-AL-*/ 
code unsigned char NUMB[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f}; 
 
/*喂狗*/ 
void dog(void) 
{ 
  unsigned char i; 
  P1_6_DOG=1; 
  for (i=0;i<100;i++) 
  { 
  } 
  P1_6_DOG=0; 
   
} 
 
/***********/ 
void delay(m) 
{ 
	while(m--); 
} 
 
/*0809 操作*/ 
void adc0809(void) 
{ 
 unsigned i; 
 P3_7_ADDR=0; /*选择通道0*/ 
 P3_6_ALE = 1; /*地址锁存*/ 
 P3_6_ALE=0; 
 P3_4_STR = 1; /*AD转换启动*/ 
 P3_4_STR=0; 
 for(i=0;i<50;i++) /*延时8个周期*/ 
 { 
 } 
 while (!P3_3_EOC)	/*等待AD转换完成*/ 
 { 
  
 } 
 P3_5_OE=1;/*允许输出*/ 
 power=P0;/*保存功率值*/ 
 P3_5_OE=0; 
 P3_7_ADDR=1;/*选择通道1*/ 
 P3_6_ALE=1;/*地址锁存*/ 
 P3_6_ALE=0; 
 P3_4_STR=1;/*AD转换启动*/ 
 P3_4_STR=0; 
 for(i=0;i<50;i++) {};/*延时8个周期*/ 
 while (!P3_3_EOC) { }; /*等待AD转换完成*/ 
 P3_5_OE=1;/*允许输出*/ 
 temp=P0;/*保存温度值*/ 
 P3_5_OE=0; 
} 
 
/*VFD显示扫描*/ 
void display(void) 
{ 
	//unsigned int i; 
  	P2=disp_buff[0]; 
  	P1_0=1; 
  	delay(20); 
  	P1_0=0; 
  	delay(20); 
  	P2=disp_buff[1]; 
  	P1_1=1; 
  	delay(20); 
  	P1_1=0; 
  	delay(20); 
	P2=disp_buff[2]; 
  	P1_2=1; 
  	delay(20); 
  	P1_2=0; 
  	delay(20); 
    	P2=disp_buff[3]; 
  	P1_3=1; 
  	delay(20); 
  	P1_3=0; 
  	delay(20); 
  	P2=disp_buff[4]; 
  	P1_4=1; 
  	delay(20); 
  	P1_4=0; 
  	delay(20); 
  	P2=disp_buff[5]; 
  	P1_5=1; 
  	delay(20); 
  	P1_5=0; 
  	delay(20); 
} 
void system_int(void) 
{ 
  unsigned int i; 
 P3     =       0x0f; 
 P2	=	0xff; 
 P0	=	0xff; 
 P1	=	0x80;/*声音提示*/ 
 		for (i=0;i<120;i++) 
  	   	{ 
  	   		dog(); 
  	   		delay(10); 
  	   	} 
  	   	P1_7_POWER=0; 
  	   	for (i=0;i<500;i++) 
  	   	{ 
  	   		dog(); 
  	   		delay(10); 
  	   	} 
 IT0 = 1;   // Configure interrupt 0 for falling edge on /INT0 (P3.2) 
 EX0 = 1;   // Enable EX0 Interrupt 
 TMOD = 0x11; 
 TH0   = 0xec;	/* 15ms */ 
 TL0	=0x77; 
 TR0   = 1; 
 ET0 = 1; 
 TH1 = 0x3c;              /* 0.1s */ 
 TL1 = 0xb0; 
 TR1 = 1;                      /* Start Timer 1 Running */ 
 ET1 = 1;                      /* Enable Timer 1 Interrupts */ 
 		 
 EA = 1;                       /* Global Interrupt Enable */ 
  
} 
 
/******************************/ 
 
void main() 
{ 
 
 system_int();	 
  while(1) 
  { 
  	dog(); 
  	adc0809(); 
  	if (power<5) 
  	{ 
  	power_val=0; 
  	} 
  		else if(power>=200) 
  		{ 
  			power_val=405-power; 
  		} 
  			else 
  			{ 
  				power_val=210+(200-power)*12; 
  			} 
  	temp_val=(temp-34)*0.2+247; 
  	dog(); 
  	if ((temp_val>350)||(power_val>=250))  
  	{ 
  	   count_alarm++; 
  	   if (count_alarm>5) 
  	   { 
  	    
  	   P1_7_POWER=1; 
  	   disp_buff[0]=ALARM[0]; 
  	   disp_buff[1]=ALARM[1]; 
  	   disp_buff[2]=ALARM[2]; 
  	   disp_buff[3]=ALARM[3]; 
  	   disp_buff[4]=ALARM[4]; 
  	   disp_buff[5]=ALARM[5]; 
  	   	while(1) 
  	   	{ 
  	   		dog(); 
  	   		delay(10); 
  	   		flag_alarm=1; 
  	   		 
  	   	} 
  	   } 
  	} 
  	else 
  	{ 
  		count_alarm=0; 
  	} 
  	if (flag) 
  	{ 
  	   while(delay_time<100) 
  	   { 
  	   	//adc0809(); 
  		if (power<5) 
  		{ 
  		power_val=0; 
  		} 
  		else if(power>=200) 
  		{ 
  			power_val=405-power; 
  		} 
  		else 
  		{ 
  			power_val=210+(200-power)*12; 
  		} 
  		temp_val=(temp-34)*0.2+247; 
  	   	switch(count_but) 
  	   	{ 
  	   		case 1: 
  	   		{ 
  	   		disp_buff[0]=POW[0]; 
  	   		disp_buff[1]=POW[1]; 
  	   		disp_buff[2]=POW[2]; 
  	   		value=power_val/100; 
  	   		disp_buff[3]=NUMB[value]; 
  	   		power_val%=100; 
  	   		value=power_val/10; 
  	   		disp_buff[4]=NUMB[value]|0x80;  
  	   		power_val%=10; 
  	   		value=power_val; 
  	   		disp_buff[5]=NUMB[value]; 
  	   		} 
  	   		break; 
  	   		case 2: 
  	   		{ 
  	   		disp_buff[0]=TEM[0]; 
  	   		disp_buff[1]=TEM[1]; 
  	   		disp_buff[2]=TEM[2]; 
  	   		value=temp_val/100; 
  	   		disp_buff[3]=NUMB[value];  
  	   		temp_val%=100; 
  	   		value=temp_val/10; 
  	   		disp_buff[4]=NUMB[value]|0x80; 
  	   		temp_val%=10; 
  	   		value=temp_val; 
  	   		disp_buff[5]=NUMB[value]; 
  	   		} 
  	   		break; 
  	   		case 3: 
  	   		{ 
  	   		flag=0; 
  	   		count_but=1; 
  	   		delay_time=101; 
  	   		step_dis=1; 
  	   		} 
  	   		break; 
  	   		default: 
  	   		{ 
  	   		flag=0; 
  	   		count_but=1; 
  	   		delay_time=101; 
  	   		step_dis=1; 
  	   		} 
  	   		break; 
  	   	} 
  	   	dog(); 
  	   } 
  	   flag=0; 
  	   count_but=1; 
  	   step_dis=1; 
  	} 
  } 
} 
 
/*外部中断0*/ 
void service_int0() interrupt 0 
{ 
  unsigned int i; 
  for (i=0;i<50;i++) 
  { 
  } 
  if (~P3_2_STAT) 
  { 
    	if (flag) 
    	{ 
    	  count_but++; 
    	  delay_time=0; 
    	  if (count_but>=3) 
    	  { 
    	  	count_but=3; 
    	  } 
    	} 
    	else 
    	{ 
    	flag=1; 
    	count_but=1; 
    	delay_time=0; 
    	} 
  } 
} 
 
/*定时器0中断*/ 
void service_timer0() interrupt 1 
{ 
 TH0   = 0xec;	/* 15ms */ 
 TL0	=0x77; 
 display(); 
} 
 
 
/*定时器1中断*/ 
void timer1_ISR() interrupt 3 
{ 
  TH1 = 0x3c;              /* 0.1s */ 
  TL1 = 0xb0; 
  delay_time++; 
  if (flag==0) 
  { 
  	if (flag_alarm==0) 
  	{ 
    		//ET0 = 0; 
    		count++; 
    		if (count>=10) 
    		{ 
    		count=0; 
    		switch (step_dis) 
    		{ 
    		case 1: 
    		{ 
    		disp_buff[0]=0x00; 
    		disp_buff[1]=0x00; 
    		disp_buff[2]=0x00; 
    		disp_buff[3]=0x00; 
    		disp_buff[4]=0x00; 
    		disp_buff[5]=0x00; 
    		step_dis++; 
    		} 
    		break; 
    		case 2: 
    		{ 
    		disp_buff[0]=0x00; 
    		disp_buff[1]=0x00; 
    		disp_buff[2]=0x00; 
    		disp_buff[3]=0x00; 
    		disp_buff[4]=0x00; 
    		disp_buff[5]=CGTAB[0]; 
    		step_dis++; 
    		} 
    		break; 
    		case 3: 
    		{ 
    		disp_buff[0]=0x00; 
    		disp_buff[1]=0x00; 
    		disp_buff[2]=0x00; 
    		disp_buff[3]=0x00; 
    		disp_buff[4]=CGTAB[0]; 
    		disp_buff[5]=CGTAB[1]; 
    		step_dis++; 
    		} 
    		break; 
    		case 4: 
    		{ 
    		disp_buff[0]=0x00; 
    		disp_buff[1]=0x00; 
    		disp_buff[2]=0x00; 
    		disp_buff[3]=CGTAB[0]; 
    		disp_buff[4]=CGTAB[1]; 
    		disp_buff[5]=CGTAB[2]; 
    		step_dis++; 
    		} 
    		break; 
    		case 5: 
    		{ 
    		disp_buff[0]=0x00; 
    		disp_buff[1]=0x00; 
    		disp_buff[2]=CGTAB[0]; 
    		disp_buff[3]=CGTAB[1]; 
    		disp_buff[4]=CGTAB[2]; 
    		disp_buff[5]=CGTAB[3]; 
    		step_dis++; 
    		} 
    		break; 
    		case 6: 
    		{ 
    		disp_buff[0]=0x00; 
    		disp_buff[1]=CGTAB[0]; 
    		disp_buff[2]=CGTAB[1]; 
    		disp_buff[3]=CGTAB[2]; 
    		disp_buff[4]=CGTAB[3]; 
    		disp_buff[5]=CGTAB[4]; 
    		step_dis++; 
    		} 
    		break; 
    		case 7: 
    		{ 
    		disp_buff[0]=CGTAB[0]; 
    		disp_buff[1]=CGTAB[1]; 
    		disp_buff[2]=CGTAB[2]; 
    		disp_buff[3]=CGTAB[3]; 
    		disp_buff[4]=CGTAB[4]; 
    		disp_buff[5]=CGTAB[5]; 
    		step_dis++; 
    		} 
    		break; 
    		case 8: 
    		{ 
    		disp_buff[0]=CGTAB[1]; 
    		disp_buff[1]=CGTAB[2]; 
    		disp_buff[2]=CGTAB[3]; 
    		disp_buff[3]=CGTAB[4]; 
    		disp_buff[4]=CGTAB[5]; 
    		disp_buff[5]=CGTAB[6]; 
    		step_dis++; 
    		} 
    		break; 
    		case 9: 
    		{ 
    		disp_buff[0]=CGTAB[2]; 
    		disp_buff[1]=CGTAB[3]; 
    		disp_buff[2]=CGTAB[4]; 
    		disp_buff[3]=CGTAB[5]; 
    		disp_buff[4]=CGTAB[6]; 
    		disp_buff[5]=CGTAB[7]; 
    		step_dis++; 
    		} 
    		break; 
    		case 10: 
    		{ 
    		disp_buff[0]=CGTAB[3]; 
    		disp_buff[1]=CGTAB[4]; 
    		disp_buff[2]=CGTAB[5]; 
    		disp_buff[3]=CGTAB[6]; 
    		disp_buff[4]=CGTAB[7]; 
    		disp_buff[5]=CGTAB[8]; 
    		step_dis++; 
    		} 
    		break; 
    		case 11: 
    		{ 
    		disp_buff[0]=CGTAB[4]; 
    		disp_buff[1]=CGTAB[5]; 
    		disp_buff[2]=CGTAB[6]; 
    		disp_buff[3]=CGTAB[7]; 
    		disp_buff[4]=CGTAB[8]; 
    		disp_buff[5]=CGTAB[9]; 
    		step_dis++; 
    		} 
    		break; 
    		case 12: 
    		{ 
    		disp_buff[0]=CGTAB[5]; 
    		disp_buff[1]=CGTAB[6]; 
    		disp_buff[2]=CGTAB[7]; 
    		disp_buff[3]=CGTAB[8]; 
    		disp_buff[4]=CGTAB[9]; 
    		disp_buff[5]=CGTAB[10]; 
    		step_dis++; 
    		} 
    		break; 
    		case 13: 
    		{ 
    		disp_buff[0]=CGTAB[6]; 
    		disp_buff[1]=CGTAB[7]; 
    		disp_buff[2]=CGTAB[8]; 
    		disp_buff[3]=CGTAB[9]; 
    		disp_buff[4]=CGTAB[10]; 
    		disp_buff[5]=0x00; 
    		step_dis++; 
    		} 
    		break; 
    		case 14: 
    		{ 
    		disp_buff[0]=CGTAB[7]; 
    		disp_buff[1]=CGTAB[8]; 
    		disp_buff[2]=CGTAB[9]; 
    		disp_buff[3]=CGTAB[10]; 
    		disp_buff[4]=0x00; 
    		disp_buff[5]=0x00; 
    		step_dis++; 
    		} 
    		break; 
    		case 15: 
    		{ 
    		disp_buff[0]=CGTAB[8]; 
    		disp_buff[1]=CGTAB[9]; 
    		disp_buff[2]=CGTAB[10]; 
    		disp_buff[3]=0x00; 
    		disp_buff[4]=0x00; 
    		disp_buff[5]=0x00; 
    		step_dis++; 
    		} 
    		break; 
    		case 16: 
    		{ 
    		disp_buff[0]=CGTAB[9]; 
    		disp_buff[1]=CGTAB[10]; 
    		disp_buff[2]=0x00; 
    		disp_buff[3]=0x00; 
    		disp_buff[4]=0x00; 
    		disp_buff[5]=0x00; 
    		step_dis++; 
    		} 
    		break; 
    		case 17: 
    		{ 
    		disp_buff[0]=CGTAB[10]; 
    		disp_buff[1]=0x00; 
    		disp_buff[2]=0x00; 
    		disp_buff[3]=0x00; 
    		disp_buff[4]=0x00; 
    		disp_buff[5]=0x00; 
    		step_dis=1; 
    		} 
    		break; 
    		default: 
    		{ 
    		step_dis++; 
    		} 
    		} 
    		} 
    		//ET0 = 1; 
  	} 
  } 
}