#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
最新资源
- 游泳溺水识别数据集,对25729张图片进行YOLO v5格式的标注,溺水平均识别率在89.9%
- 基于java的动漫商城管理的设计与实现.docx
- 基于java的电子产品销售系统设计与实现.docx
- 基于java的电影订票系统设计与实现.docx
- 基于java的健美操评分系统设计与实现.docx
- 基于java的多媒体素材管理系统设计与实现.docx
- 基于QP的路径规划和ST图速度规划 各场景避障
- 基于java的健身俱乐部网站设计与实现.docx
- 基于java的来访管理系统的设计与实现.docx
- html新年快乐3d烟花代码
- 基于小程序的自助购药小程序源码(小程序毕业设计完整源码+LW).zip
- 基于java的科研管理系统设计与实现.docx
- 基于java的流浪猫狗救助救援网站设计与实现.docx
- 基于java的汽车服务管理系统设计与实现.docx
- 基于java的旅游出行指南设计与实现.docx
- 基于java的企业车辆管理系统设计与实现.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈