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

📄 montor.c

📁 监控行业车辆检测器源代码
💻 C
字号:
#include "STC12C5410AD.h"
#include "app.h"
#include <string.h>
#include <stdio.h>
#include <INTRINS.H>
#include <MATH.H>

void delay_n_ms( unsigned int n_milisecond);

unsigned int xdata Fos[125];


 unsigned int  Count =0;
 unsigned int  MainCount =0;
 unsigned int  SaveFos = 0;
unsigned int BigCount =0;
unsigned int SmallCount =0;
unsigned int ArbCount =0;	//计算次数*时间
bit  FLAG = 0;

//延时n_milisecond MS
//供内部调用函数
//可以在延时里面加入按键LED等处理
void delay_n_ms( unsigned int n_milisecond)  /* n mS delay */
{
     unsigned int i;
     while(n_milisecond--)
     {
          i=500;
          while(i--);
		  WDT_CONTR = 0x3c;      //使能看门狗
     }

}

unsigned char getkey()
{
   unsigned char temp;
   temp=0;
	if(!KEY2)  temp |=1;
	  temp <<=1;
	if(!KEY1)  temp |=1;
	  temp <<=1;
	if(!KEY0)  temp |=1;
	  temp <<=1;
	if(!KEY3)  temp |=1;

	return temp;
}

// 10MS 定时
void Timer0(void) interrupt 1
{
    unsigned char i;
	unsigned long int Sum;
	unsigned int Fos1,Fos2;

	TR0 = 0;
// RED_LED = ~	RED_LED;
	MainCount =  Count;
	Count = 0;

  if(MainCount !=0)
    {
	  EX0 = 0;	   //关闭外部中断
	  TR0 = 0;	   //关闭本身中断

      ArbCount++;

	  if(( MainCount>450)&&(ArbCount>40) ) // 说明是连接上了线圈
	  {
	       ArbCount =0;
		   if(MainCount>SaveFos)
		   {
		   		SmallCount = 0;
				Fos[BigCount++] = MainCount;
		   	    if(	BigCount>124)
				{
				   BigCount =0;
				   Sum =0;
				   for(i=0;i<62;i++)
				   {
					   Sum =Fos[i] +Sum; 
				   }
				   Fos1 = Sum/62;

				   Sum =0;
				   for(i=62;i<124;i++)
				   {
					   Sum =Fos[i] +Sum; 
				   }
				   Fos2 = Sum/62;

				   if(abs(Fos1-Fos2)<5)
				   {
					  SaveFos = (Fos1+Fos2)/2;
				   }
				}		   
		   }
		  if(MainCount<SaveFos)
		  {
		  	   BigCount = 0;
			   Fos[SmallCount++] =MainCount;
			   if(SmallCount>124)
			   {
				  SmallCount =0;
				  Sum =0;
				   for(i=0;i<62;i++)
				   {
					   Sum =Fos[i] +Sum; 
				   }
				   Fos1 = Sum/62;

				   Sum =0;
				   for(i=62;i<124;i++)
				   {
					   Sum =Fos[i] +Sum; 
				   }
				   Fos2 = Sum/62;

				   if(abs(Fos1-Fos2)<5)
				   {
					  SaveFos = (Fos1+Fos2)/2;
				   }

			   }		  
		  } 
		  	  
	  }


	  FLAG = 1;
	
	}
  else
    {
	  MainCount =0;
	  EX0 = 1;
	  RED_LED = 1;
	  TR0 = 1;
	}
  WDT_CONTR = 0x3c;      //使能看门狗
  	

}

void Ex0(void) interrupt 0
{
      Count++ ;
	  
}

⌨️ 快捷键说明

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