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

📄 time.c.bak

📁 通讯电缆智能防盗报警器--通讯电缆智能防盗报警器安装在各局的机房内
💻 BAK
字号:



#define  TIME_GLOBALS
#include <includes.h>


/***************************************************************************
函数名称: Delay_Set
函数功能: 以ms为单位延时一定的时间
输入参数: 延时常数
输出参数: 无
***************************************************************************/
void Delay_Set(INT16U i)
{
   INT16U m;
   INT16U k;

   // 时钟为12MHz, 每个指令周期的执行时间为1us

   for(m=0;m<i;m++)
   {
       WDG_CONTR  =0x36;
       k = CN_TIMER;            // 1ms延时设置 
       while(k--);              // 5个指令周期 
   }
}

/***************************************************************************
函数名称: Delay_us
函数功能: 以6us为单位延时一定的时间,每次调用再额外加5us
输入参数: 延时常数
输出参数: 无
***************************************************************************/
void Delay_us(INT16U i)
{
   while (i--);         
}

/***************************************************************************
函数名称: T0_int
函数功能: T0中断服务程序
输入参数: 无
输出参数: 无
***************************************************************************/
void T0_int(void) interrupt INT_T0	//5ms进入中断一次,进行键盘检测与数码LED显示
{
	INT8U i,j;
	INT8U CntKeyBuf[5];             //键盘防抖动缓冲环计数数组.
	INT8U key_temp;
  TH0	= 0xee;
	TL0	= 0x32;
	i=0;
  j=0;
  
  g_CntBuzzer++; 
  
  //---------------------蜂鸣器告警处理------------------------------  
  if(g_BuzzerFlag=CN_BUZZER_STAR)  
  {
    if(g_CntBuzzer>=30)
  	{
  		g_CntSoundDuty++;
 	  	g_CntBuzzer=0;
 	  	if(g_CntSoundDuty<=8)
 	  	{
 	  	 AD_BUZZER=!AD_BUZZER;
 	  	}
 	  	else if(g_CntSoundDuty<=16)
 	  	{
 	  		AD_BUZZER=CN_BUZZER_OFF;
 	  	}
 	  	else 
 	  	{
 	  		g_CntSoundDuty=0;
 	  		AD_BUZZER=CN_BUZZER_OFF;
 	  	}
 	  }	
  }
  
 	else
 	{
 		AD_BUZZER=CN_BUZZER_OFF;
 	}
 	
  //----------------------------1秒定时时间处理---------------------------------
  g_Cnt1s++;   
  g_Cnt1s%=200;
  if(!g_Cnt1s)                
  {
  	if((g_AlmFlag!=0)&&(gb_AllDistflag==CN_AllDist_OK))
    {
  	  if(gb_AlmReview==CN_ALM_REV_ON)
  	  {
  	    g_CntDisAlmCab++;
  	    g_CntDisAlmCab%=6;   //按键浏览时,电缆断线距离显示时间为6秒
  	  }
  	  else
  	  {
  	  	g_CntDisAlmCab++;
  	    g_CntDisAlmCab%=3;   //未按键浏览时,轮流显示断线距离,间隔3秒
  	  }
  	  
  	  if(!CntDisAlmCab)      //告警电缆显示切换时间到
  	  {
  	  	gb_AlmReview==CN_ALM_REV_OFF;  //按键浏览告警标志清零
  	  	gb_AlmCabSwFlag=CN_ALMCABSW_ON;//告警电缆显示切换标志置位
  	  	g_CurDisAlmCab++;    //当前显示告警电缆标号自增
  	  	g_CurDisAlmCab%=g_AlmCabQua;
  	  }
    }
  }
  
  
  //--------------------------数码管和发光二极管显示---------------------------
  g_CntLedFlash++;    //告警闪烁计数器
  g_CntLedFlash%=200;
  
  g_LedNo++;         //本次中断要显示的LED数码管或发光二极管标号
  g_LedNo%=4;
  switch(g_LedNo)    //将显存中的内容送入LED数码管,三个数码管和发光二极管轮流显示
  {
  	case 0:  
  		AD_LED0=g_Led_DisMem[0];
          break;
    case 1:
      AD_LED1=g_Led_DisMem[1];
          break;
  	case 2:  
  		AD_LED2=g_Led_DisMem[2];
          break;
    case 3:
    	if(g_CntLedFlash>150)    //当前数码管显示电缆距离对应的LED指示灯闪烁           
    		AD_ALM_LED=g_AlmLed_DisMem*g_FlashByte;//乘告警LED闪烁位指示字节
      else 
      	AD_ALM_LED=g_AlmLed_DisMem;
          break;
    default :
          break;
  }
   	
//testPin=!testPin;            //定时器时间测试用

//	cntSerOverTime++;                                  //串口通信超时判断
//	if(cntSerOverTime>=5)fSerOverTime=1;
	
  //----------------------------键盘扫描-----------------------------------
  key_temp=0x00;		

  AD_KEY1=1;
  AD_KEY2=1;

	if(!AD_KEY1)key_temp|=0x10;else key_temp&=0xef;
	if(!AD_KEY2)key_temp|=0x20;else key_temp&=0xdf;
	
	g_KeyPoint%=5;
	g_KeyCir[g_KeyPoint]=key_temp;
	g_KeyPoint++;
	key_temp=0x00;
	for(i=0;i<5;i++)                    //键值防抖滤波处理
	{
		g_cntKeyBuf[i]=0;
		for(j=0;j<5;j++)
		{
			if(g_KeyCir[i]==g_KeyCir[j])g_cntKeyBuf[i]++;
		}
		if(g_cntKeyBuf[i]>=3)key_temp=g_KeyCir[i];
	}
	
	if(key_temp==CN_KEY_12)g_cntAdjCfg++;         //检测组合键
	else g_cntAdjCfg=0;
	
	if(g_KeyRptBuf==key_temp)                    //检测是否短时间内键连按
	{
		g_KeyCntRpt1++;
		g_KeyCntRpt2++;
	}
	else
	{
		g_KeyCntRpt1=0;
		g_KeyCntRpt2=0;
	}
	if((g_KeyRptBuf==key_temp)&&(g_KeyCntRpt1<200))return;//忽略同一个键连按的状态
	if((g_KeyRptBuf==key_temp)&&(g_KeyCntRpt2<10))return; //忽略同一个键连按的状态
	g_KeyCntRpt2=0;
	if(g_KeyRptBuf==key_temp)
	{
		g_KeyCntRpt1=201;
	}
	
	if(key_temp!=0x00)                        //将处理后键值写入键值缓冲环
	{
		if(g_KeyRdPoint==((g_KeyWrPoint+1)%10))
		{
			g_KeyBuf[g_KeyWrPoint]=key_temp;     //键盘缓冲环已满,则覆盖当前键值.
		}
		else
		{
			g_KeyBuf[g_KeyWrPoint]=key_temp;
			g_KeyWrPoint++;
			g_KeyWrPoint%=10;
		}
	
	}
	
	g_KeyRptBuf=g_key_temp;
	
}

⌨️ 快捷键说明

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