c语言kbi键盘中断,键盘IO输入中断 初试

/* 键盘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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值