51单片机PS2键盘程序

更新时间:2023-04-28 23:34:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

/*中断程序,帮助了解中断事件*/

#include

51.h>

#include

sbit key_data=P3^0;

sbit key_clk=P3^2;//定义键盘接口的时钟脚

sbit RELAY=P1^0;

bit BF=0;

//code unsigned char tmpdate[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//定义常量做为输出

unsigned char keyv=0;

unsigned int intNum=0;

unsigned char key_up=1;//变量为常量的索引

//计数接收个数

//检测按键按下否

//继电器

void ldedata(unsigned char scandata);//数据处理

void main(void)//入口函数{}EA=1;//首先开启总中断

EX0=1;//开启外部中断0

IT0=1;//设置成下降沿触发方式

P2=0;

1/ 4

do{

}//循环

if(BF)

ldedata(keyv);

else

EA=1;

while

(1);

void key_scan()interrupt 0

{//外部中断0

if((intNum>0)&&(intNum<9)){

keyv=keyv>>1;

if(key_data)

keyv=keyv|0x80;}intNum++;

while(!key_clk)

}if(intNum>10){

}intNum=0;

BF=1;

EA=0;//等待处理完键值再开启

void ldedata(unsigned char scandata){//unsigned char Tempdata; if(!key_up)

2/ 4

{//键盘松开时

switch(scandata){

case 0xf0:

key_up=1;

break;

case 0x12://左SHIFT,可以下面写相应处理RELAY=0;

//shift=1;

break;

case 0x59://右SHIFT,可以下面写相应处理RELAY=1;

//shitf=1;}else{

key_up=0;

switch(scandata){

case 0x12:

//shift=0;

break;

case 0x59:break;

default:

}P0=scandata;

if(scandata==0x76)

3/ 4

RELAY=0;

if(scandata==0x52){

}RELAY=1;//当按下键盘上的J键时,继电器响//当按下键盘上的空格键时,断开继电器break; }//shift=0;

break;}}

BF=0;//标识字符处理完了

4/ 4

本文来源:https://www.bwwdw.com/article/4o6q.html

Top