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

📄 cytd0328.c

📁 光发射机源码单片机程序,实现光功率检测,光块温度检测,超限关断报警功能
💻 C
字号:
#include <AT89X51.h>
#include <math.h>
#include <absacc.h>
#include <string.h>

/*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;
  	}
  }
}

⌨️ 快捷键说明

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