?? int.c
字號:
#include <at89s52.h>
#include <stdio.h>
#include <per.h>
#include <intrins.h>
extern unsigned char MS[BUFFNUM+1];//
//extern bit receive_flag;
//extern bit first_receive_b;
//extern bit receive_time_begin_b;
//extern unsigned char receive_time;
//extern unsigned char interrupt_times;
//unsigned char px,sum_temp;
//extern bit send_flag;
extern bit SomeKeyEnableFlag,SomeKeyKeepFlag;
extern unsigned char SomeKeyKeepTime;
extern bit ReadKeyOnceFlag;
extern unsigned char DatTemp1,DatTemp2,DatTemp11,DatTemp22;
unsigned int time;
extern unsigned char KeyWobbleTime;
extern bit NewKeyFlag;
extern unsigned char makecode;
extern unsigned char KeyT;
extern unsigned int testtime;
void INT_S(void) interrupt S_VECTOR
{
//設計思想:當接收第一個數據時,判斷是否是本機的地址數據,如果不是,SM2=1,因主機后來數據的TB8=0,數據再不會接收,除非主機發送新的一楨;//
//如果是本機地址,SM2=0,開始計時,保證6ms內把數據接收完,否則接受數據全部清除//
unsigned char dat_temp;
if(RI)
{
RI=0;
dat_temp=SBUF;
}
else if(TI)
{
TI=0;
}
}
void INT_TO()interrupt TI0_VECTOR//1ms interrupt
{
TL0=T0_L;
TH0=T0_H;
if(KeyT>0)
KeyT--;
// if(testtime>0)
// testtime--;
//===============鍵盤掃描
if(KeyT==0)
{
if(!ReadKeyOnceFlag)
{
P1|=0x3f;//P10,P11,P12,P13,P14,P15口線置高
P2=0;//P2口拉低
DatTemp11=P1&0x3f;//讀取P10,P11,P12,P13,P14,P15口狀態
//if(DatTemp11==0x3f)
// NewKeyFlag=0;//取消上次按鍵標志
P2=0xff;//把P2口拉高
P1&=0xc0;//P10,P11,P12,P13,P14,P15口線拉低
DatTemp22=P2;//讀取P2口狀態
//if(DatTemp22==0xff)
// NewKeyFlag=0;//取消上次按鍵標志
P1|=0x3f;//P10,P11,P12,P13,P14,P15口線置高
//20ms去抖動處理
if((DatTemp1==DatTemp11)&&(DatTemp2==DatTemp22))
{//兩次讀取的值相同
if(KeyWobbleTime<30)
KeyWobbleTime++;
if((!NewKeyFlag)&&(KeyWobbleTime>=20))//20ms
{
ReadKeyOnceFlag=1;//建立一次成功讀取開關標志
NewKeyFlag=1;//本次按鍵標志
}
}
else
{//兩次讀取的值不同,可能是抖動,也可能是新的按鍵出現
DatTemp1=DatTemp11;
DatTemp2=DatTemp22;
KeyWobbleTime=0;//重新開始抖動計時
NewKeyFlag=0;//取消上次按鍵標志
}
}
}
}
void INT_T1()interrupt TI1_VECTOR//20ms interrupt
{
TL1=T1_L;
TH1=T1_H;
if(SomeKeyKeepFlag)
{
SomeKeyKeepTime++;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -