📄 montor.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 + -