📄 isr.c
字号:
/******************************************************************
本程序只供学习使用,未经作者许可,不得用于其它任何用途
我的邮箱:computer-lov@tom.com
欢迎访问我的blog: http://computer00.21ic.org
ISR.C文件 中断处理函数
Created by Computer-lov
Date: 2004.11.12
Edit date:2006.3.2
Version V1.1
Copyright(C) Computer-lov 2004-2014
All rigths reserved
*******************************************************************/
#include "hardware.h"
#include "ISR.H"
#include "main.h"
void Exterior_0_interrupt(void) interrupt 0
{
TR0=0;
capacity_measure_end=1;
}
void Count_0_interrupt(void) interrupt 1
{
TVH0++;
}
void Exterior_1_interrupt(void) interrupt 2
{
}
void Count_1_interrup(void) interrupt 3
{
TL1=tl1;
TH1=th1;
SQUARE_WAVE_OUT=!SQUARE_WAVE_OUT;
}
void Serial_port_interrupt(void) interrupt 4
{
}
unsigned char key_old=0,key_new=0,key=0,key_pressed_time=0,time_out=0;
/*--------------------------------------------------------------------------
定时-计数器2中断
采用定时方式,10ms中断一次
---------------------------------------------------------------------------*/
void Count_2_interrupt(void) interrupt 5
{
TF2=0;
if(frequency_measure_time){FREQUENCY_IN_ENABLE=1;frequency_measure_time--;}
else {FREQUENCY_IN_ENABLE=0;frequency_measure_end=0;}
if(key)return; //如果上次按键未处理,则返回
KEY_IN=0xFF; //释放IO
KEY_IN_ENABLE=0; //开键盘输入
if((KEY_IN&0x0F)==0x0F) //按键释放
{
if(!key_old) //如果上次无按键按下
{
KEY_IN_ENABLE=1;
return; //返回
}
else //如果上次有按键按下
{
if(key_pressed_time>100) //按键时间超过一秒,长按键码
{
key=key_old+0x80; //长按键码等于普通按键码加0x80
}
else if(key_pressed_time>0)
{
key=key_old;
}
key_old=0;
}
KEY_IN_ENABLE=1;
return;
}
else //按键按下
{
key_new=0;
if(!ENTER)key_new+=KEY_ENTER; //ENTER键按下
if(!DOWN)key_new+=KEY_DOWN; //DOWN键按下
if(!UP)key_new+=KEY_UP; //UP键按下
if(!MENU)key_new+=KEY_MENU; //MENU键按下
if(key_new==key_old) //如果按键按下长于10ms
{
if(key_pressed_time>100) //如果按键按下超过1s
{
KEY_IN_ENABLE=1;
return;
}
else
{
key_pressed_time++;
}
}
else
{
key_pressed_time=0;
}
key_old=key_new; //保存本次按键值
}
KEY_IN_ENABLE=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -