📄 prosignal.c
字号:
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/signal.h>
#include "MAIN.h"
#include "3310LCD.h"
#include "MISC.h"
SIGNAL(SIG_INPUT_CAPTURE1)
{
static unsigned int cappre,capcur,capfst;
capcur=ICR1;
switch (CAPCNT)
{
case 0:
capfst=capcur;
cappre=capcur;
CAPCNT++;
break;
case 1:
case 2:
if (((capcur-cappre)<26)&&((capcur-cappre)>=23))
CAPCNT++;
else
CAPCNT=0;
cappre=capcur;
break;
case 3:
CAP_ST =OK;
CAPTIME=capfst;
TIMSK &=~(1<<TICIE1); //disenable ICP
break;
}
}
SIGNAL(SIG_OVERFLOW1)
{
CAP_ST=OVER;
RUN_ST=OVER;
TIMSK&=~(1<<TOIE1); //disenable OVF
}
SIGNAL(SIG_UART_RECV)
{
//uart has received a character in UDR
unsigned char c;
c=UDR;
}
SIGNAL(SIG_INTERRUPT0)
{
//external interupt on INT0
MCUCR |= (1<<ISC01); //INT0电平--->降沿
MODE_ST++;
MODE_ST&=0x01;
}
SIGNAL(SIG_INTERRUPT1)
{
//external interupt on INT1
unsigned char Volt,Volt1,key;
ADMUX=(0x60|ADCKEY); //0x60:选择VCC参考电压 左对齐
_delay_loop_2(400*FREQ/4);
ADCSRA|=0x40; //启动AD转换
while ((ADCSRA & 0x10)==0); //等待AD转换结束
ADCSRA|=0x10; //clear
Volt=ADCL; //dumy
Volt=ADCH;
_delay_loop_2(100*FREQ/4);
ADCSRA|=0x40; //启动AD转换
while ((ADCSRA & 0x10)==0); //等待AD转换结束
ADCSRA|=0x10; //clear
Volt1=ADCL; //dumy
Volt1=ADCH;
if (Volt!=Volt1)
return;
//0,23,43,59,73,85,96,105
if (Volt< 10)
key=1;
else if (Volt< 35)
key=2;
else if (Volt< 55)
key=3;
else if (Volt< 65)
key=4;
else if (Volt< 80)
key=5;
else if (Volt< 90)
key=6;
else if (Volt<100)
key=7;
else
key=8;
if (key==3)
GAIN+=10;
if (key==4)
GAIN++;
if (key==5)
BLANK++;
if (key==6)
BLANK--;
if (key==7)
GAIN--;
if (key==8)
GAIN-=10;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -