📄 time.c.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 + -