51单片机 键盘 PS2

#include"reg51.h"

#define uchar unsigned char

sbit PS_CLK = P3^2;//ps2的时钟线
sbit PS_DATE = P3^6;//这个地方该为P3^7就不能识别为什么

/***************************************
************全局变量********************
***************************************/
uchar key_num;//按键的值
uchar key_tongma;//按键的通码
uchar count;//标志接受一帧的位
bit flag = 0;//标志是否按下按键

/***************************************
************键盘解码********************
***************************************/
void jiema(uchar temp)
{
switch(temp)
{
case 0x70:key_num = 0;break;
case 0x69:key_num = 1;break;
case 0x72:key_num = 2;break;
case 0x7a:key_num = 3;break;
case 0x6b:key_num = 4;break;
case 0x73:key_num = 5;break;
case 0x74:key_num = 6;break;
case 0x6c:key_num = 7;break;
case 0x75:key_num = 8;break;
case 0x7d:key_num = 9;break;

}
flag = 0;
key_tongma = 0;
}
/***************************************
************外部中断0********************
***************************************/
void waibuzhongdaun() interrupt 0
{

if ((count > 0) && (count < 9))
{
key_tongma = key_tongma >> 1; //因键盘数据是低>>高,结合上一句所以右移一位
if (PS_DATE)
key_tongma = key_tongma | 0x80; //当键盘数据线为1时到最高位
}
count++;
while (!PS_CLK); //等待PS/2CLK拉高

if (count > 10)
{
count = 0; //当中断11次后表示一帧数据收完,清变量准备下一次接收
flag = 1; //标识有字符输入完了
EA = 0; //关中断等显示完后再开中断
}

}

void main()
{

IT0 = 0;
EA = 1;
EX0 = 1;
while(1)
{
if(flag)
{

jiema(key_tongma);

}
else
{
EA = 1;
}
comd(0x80);
date(key_num + 48);
P1 = key_num;

}

}
sbit PS_DATE = P3^6;//这个地方该为P3^7就不能识别键盘的0,6,7请大侠给指点一下我弄了一天了不知道为什么下面是原理图

我就谈谈自己的感想.我也做过,全键盘的.也是有些按键不能识别.我估计就是是别的时候有问题,可能就是因为定时器的原因吧!?
我的理解是:芯片不能区分你定时器返回的时间是哪个按键的.
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-06
改了后相应电路也要改动才行,还有要保证电路没有问题.
第2个回答  2010-08-06
硬件接法问题啊 这是很显然的啊

我好晕 你怎么不问3。5怎么不行? 那是因为你的pcb版就那么画的!
第3个回答  2010-08-07
单片机论坛上有。proteus

51单片机最小系统如何外接键盘?
你好,键盘是ps2的接口。ps2设备的clock和data都是集电极开路的,平时都是高电平。当ps2设备等待发送数据时,它首先检查clock是否为高。如果为低,则认为PC抑制了通讯,此时它缓冲数据直到获得总线的控制权。如果clock为高电平,ps2则开始向PC发送数据。一般都是由ps2设备产生时钟信号。发送按帧格式。数据位...

51单片机模拟PS2键盘时怎样进入中断的,
PS2的时钟对产生它的单片机来说就是一个普通的输出而已。假设时钟输出定义在P1端口的0脚上那么产生一个低电平就是P1^0=0;产生一个高电平就是P1^0=1;这就是你要的01变换方法。

我想用51单片机模拟PS\/2或USB键盘来向计算机发送数据,做自动化用?_百 ...
USB接口免了吧,51单片机硬件不支持usB功能,通信协议又很复杂,PS\/2接口比较简单,网上一搜可以找到例程,很多51单片机开发板上都带有PS或PS\/2接口。当然你既然用单片机了,为什么还要用那么大的键盘,有专门的键盘了,为什么还要通过单片机。单片机可以和上位机用串口通信,编程序接收串口数据就行了。

51单片机模拟PS2键盘,实现“A”键的连打功能!
得发送一连串的通码PS2key_sendto_host(0x1c);delay_50ms();PS2key_sendto_host(0x1c);delay_50ms();PS2key_sendto_host(0x1c);delay_50ms();PS2key_sendto_host(0x1c);delay_50ms();PS2key_sendto_host(0x1c);delay_50ms();PS2key_sendto_host(0x1c);delay_50ms();PS2key...

51单片机4×4矩阵键盘,下载程序后LED全亮怎么回事
如果键盘灯亮时,按键无反应这种情况:是接口插错了,一盘键盘的PS2接口是紫色,鼠标是绿色的,检查你插对了吗;是断针,PS2接口有6根针,中间是定位点,其中2根是电源,其他4根是数据,你看一下是丌是断针了。

谁会用51单片机模拟PS2键盘向上位机发送键值
5 CLK---P3.3 接在51的外部中断,触发方式为低电平 [注:AT89x51使用12M或11.0592M晶振,实测使用11.059M [Keil uV2 7.01编译运行通过 程序中没有做键盘数据的奇偶校验]===*\/ include <at89x51.h> include "scancodes.h"define LCM_RW P2_1 \/\/定义LCD引脚 define LCM_RS P2_0 d...

51单片机如何与电脑键盘相接,USB的
需要上千行的代码以及大量的单片机资源,总之虽然可以实现,但并不是明智的选择。使用单片机来读取键盘、鼠标,建议使用PS\/2接口。51单片机本身也不支持PS\/2协议,但PS\/2协议相对于USB协议要简单得多,在程序上构建PS\/2协议并不是很复杂的事情,也不会过多的占用单片机资源。

谁做过51单片机模拟PS2键盘向电脑发送信息的项目,我写的程序无法运行成...
JB PS3CK,PS3F1 ;PS2\/时钟为1转 LCALL TFF50US ;PS3F1:JNB PS3CK,PS3F0 ;PS2\/时钟为0转 PC 可能有数据发来 JB PS3DD,PS3F2 ;PS2\/数据为1转 PS3F0:LCALL PCPS3 ;PS2\/接收程序 从PC接收数据 片内 RET PS3F2:CLR PS3DD ;发送开始位 LCALL TFF100US ...

51单片机 键盘 PS2
我就谈谈自己的感想.我也做过,全键盘的.也是有些按键不能识别.我估计就是是别的时候有问题,可能就是因为定时器的原因吧!?我的理解是:芯片不能区分你定时器返回的时间是哪个按键的.

怎么用单片机做USB电脑键?
要使用单片机实现USB电脑键盘,首先需要了解USB协议,协议的复杂程度要求开发者具备一定的专业知识。对于一般的51单片机而言,由于其处理速度可能无法满足USB协议的高要求,因此,需要使用专门的USB芯片,如南京沁恒的CH375。在进行设计时,单片机作为主机,而USB键盘作为从机。此配置确保了在USB环境中高效且准确...

相似回答