#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define speed 1
#define flag_a 0x1c //定义按键对应的通码 分别是w\a\s\d\j\k
#define flag_q 0x15
#define flag_t 0x2c
#define flag_d 0x23
#define flag_j 0x3B
#define flag_n 0x31
#define flag_x 0x32
#define flag_y 0x34
sbit KB_CLK=P3^3;
sbit KB_DATA=P3^4;
sbit key_up=P2^0;
sbit key_left=P2^1;
sbit key_down=P2^2;
sbit key_right=P2^3;
sbit key_strike=P2^4;
sbit key_jump=P2^5;
sbit key_leg=P2^6;
sbit key_heavy=P2^7;
bit flag_up;
bit flag_left;
bit flag_down;
bit flag_right;
bit flag_strike;
bit flag_jump;
uint n=0;
/****************************5110 0-9字模******************************/
//*函数原型:无 j
//*函数功能:0-9字模
//*输入参数:无
//*输出参数:无
//*建立时间:2010/8/31
/**********************************************************************/
/*********************************************************************
函数名: void delay(uint32 x)
功能描述:软件延时
入口参数:y
出口参数:无
*********************************************************************/
void Delay_NS() //10us延时
{
_nop_();_nop_();_nop_();
}
void Delay_Ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*********************************************************************
函数名:Send_Key(uchar dat)
功能描述:个PS2键盘发送数据
入口参数:dat
出口参数:无
**********************************************************************/
void EdgGnlt()
{
KB_CLK=0;
Delay_NS();
Delay_NS();
Delay_NS();
Delay_NS();
KB_CLK=1;
}
void InitEdgGnlt()
{
KB_CLK=0;
Delay_NS();
Delay_NS();
Delay_NS();
Delay_NS();
KB_CLK=1;
Delay_NS();
Delay_NS();
Delay_NS();
Delay_NS();
KB_CLK=1;
}
void Send_Key(uchar dat)
{
uint i;
while(KB_CLK==0); //检查时钟线是否为高电平空闲状态
_nop_();
_nop_();
_nop_();
KB_DATA=0;
Delay_NS(); //发送启动低电平信号
Delay_NS();
EdgGnlt();
Delay_NS(); //发送启动低电平信号
Delay_NS();
for(i=0;i< 8;i++)
{
KB_DATA = dat&0x01;
if(KB_DATA) n++; //计算校验
Delay_NS(); //发送启动低电平信号
Delay_NS();
EdgGnlt();
Delay_NS(); //发送启动低电平信号
Delay_NS();
dat>>=1; //待发送数据右移一位
}
switch(n){ //发送奇偶校验位
case 0:
case 2:
case 4:
case 6:KB_DATA =1;break;//奇校验
case 1:
case 3:
case 5:
case 7:KB_DATA =0;break;//奇校验
default:
break;
}
Delay_NS(); //发送启动低电平信号
Delay_NS();
EdgGnlt();
Delay_NS(); //发送启动低电平信号
Delay_NS();
KB_DATA=1;
Delay_NS(); //发送启动低电平信号
Delay_NS();
EdgGnlt();
Delay_NS(); //发送启动低电平信号
Delay_NS();
Delay_NS(); //发送启动低电平信号
Delay_NS();
}
void Send_BreakKey(uchar dat)
{
Send_Key(0xF0);
_nop_();
Send_Key(dat);
_nop_();
}
void main()
{
P1=0x00;
P0=0xff;
KB_DATA=1;
Delay_Ms(4);
// InitEdgGnlt();
// while(KB_CLK==1);
for(;;)
{
if(P2!=0xff)
{
Delay_Ms(5);
if(P2!=0xff)
{
if(key_up==0) //发送键
{
Send_Key(flag_a);
Delay_Ms(speed);
}
if(key_left==0)
{
Send_Key(flag_q);
Delay_Ms(speed);
}
if(key_down==0)
{
Send_Key(flag_t);
Delay_Ms(speed);
}
if(key_right==0)
{
Send_Key(flag_d);
Delay_Ms(speed);
}
if(key_strike==0)
{
Send_Key(flag_j);
Delay_Ms(speed);
}
if(key_jump==0)
{
Send_Key(flag_n);
Delay_Ms(speed);
}
if(key_leg==0)
{
Send_Key(flag_x);
Delay_Ms(speed);
}
if(key_heavy==0)
{
Send_Key(flag_y);
Delay_Ms(speed);
}
P2=0xff;
Delay_Ms(10);
P1=~P1;
}
}
}
}
gorgen
- 粉丝: 3
- 资源: 2
最新资源
- 数据集-目标检测系列- 戒指 检测数据集 ring >> DataBall
- 数据集-目标检测系列- 皇冠 头饰 检测数据集 crown >> DataBall
- 利用哨兵 2 号卫星图像和 GRanD 大坝数据集进行的首次大坝检测迭代.ipynb
- 数据集-目标检测系列- 红色裙子 检测数据集 red-skirt >> DataBall
- DNS服务器搭建-单机部署
- 数据集-目标检测系列- 猫咪 小猫 检测数据集 cat >> DataBall
- matlab写的导弹轨迹代码
- 金融贷款口子超市V2源码 Thinkphp开发的贷款和超市平台源码
- 数据集-目标检测系列- 土拨鼠 检测数据集 marmot >> DataBall
- 数据集-目标检测系列- 婚纱 检测数据集 wedding-dress >> DataBall
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈