/* 键盘IO输入中断 */
/*******头文件*********/
#include /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
/****变量和函数定义*******/
void send_string(byte * ) ;
void send_char(byte) ;
void ccc(void);
void delay(long );
void SCIInit(void);
/********主函数**********/
void main(){
ICGC1 = 0xF8;
ICGC2 = 0x00; //8*4 32M 总线16MHz
SOPT_COPE=0;
PTEDD_PTEDD7=1;
SCIInit();
KBIPE_KBIPE0=1;//使能键盘 G0
KBIPE_KBIPE1=1;//使能键盘 G1
KBIPE_KBIPE2=1;//使能键盘 G2
KBISC_KBIE=1;//打开键盘中断
EnableInterrupts; /* enable interrupts */
for(;;)
{
}
}
/********串口设置------波特率为9600 ******/
void SCIInit(void)
{
SCI1BDL=104;//0x68=104 19.584M/16/9600=104 波特率设置
SCI1C2 =0x2c;
SCI1C2_RIE=1;//打开接收中断
}
/****************/
/************************延时函数********************************/
void delay(long i)
{
while(i--) ;
}
/************************按键中断********************************/
interrupt VectorNumber_Vkeyboard1 void ccc(void)
{
delay(100) ;//通过延迟来防止不是外界干扰引起的按键中断
if(PTGD_PTGD0==0)//通过检测IO的电平来确定是哪个键盘被按下.
{
send_string("OK");
}
if(PTGD_PTGD1==0)
{
send_string("ESC");
}
if(PTGD_PTGD2==0)
{
send_string("LEFT1");
}
delay(7000) ;//通过延迟来消抖
KBISC_KBACK=1;//清中断.
}
/************************串口接受中断********************************/
interrupt VectorNumber_Vsci1rx void receive(void)
{
byte r_data;
if(SCI1S1_RDRF) //读SCI1S1_RDRF 接收满标志,再读数据寄存器可以清此标记
{
;
}
}
/************************发送字符串函数********************************/
void send_string(byte * data)
{
while(*(data) != '\0' )//当字符串还没未到结尾符'\0'时发送数据
{
while(!SCI1S1_TDRE); //当发送缓存为空时
SCI1D=*(data);
data++;
}
}
/************************发送字符函数********************************/
void send_char(byte data)
{
while(!SCI1S1_TDRE);//当发送缓存为空时
SCI1D=data;
}