ps2键盘测试软件,51单片机驱动PS2键盘完整程序

这是一个使用51单片机实现的PS2键盘测试程序,能够显示PS2键盘第1类按键的键值以及pageup、pagedown、方向键的按下次数,并实时更新capslock和numlock的状态。程序通过中断方式接收键盘数据,并能向键盘发送命令改变指示灯状态。
摘要由CSDN通过智能技术生成

// PS2键盘测试程序5(完整程序)

// 功能:1602显示PS2键盘第1类按键的键值,可以显示大小写,显示在第2行

// 显示pageup、pagedown、方向键(上、下、左、右)的按下次数,显示在第1行

// 显示capslock、numlock的状态,显示在第1行

// 指示灯: 接收按键值 P30(run) 取反。 键盘上电P31亮,接收按键值,P31灭。

// Caps 对大写字母起作用 , 收到非字母,caps不起作用

// 按下capslock 和 numlock 键,键盘指示灯做出相应变化。即实现了单片机向键盘发送命令

// 中断接收采用电平触发,如果用下降沿触发,单片机向键盘发送命令正常,但发完命令再接收数据出错,

// 接收到所有数据都是正常值的两倍。

#include

sbit PS2CLK=P3^3; // PS2时钟

sbit PS2DATA=P3^4; // PS2数据

sbit RUN=P3^0; // 运行标志

sbit P31=P3^1; // 运行标志

#define lcd_bus P0 // 数据总线

sbit rs =P2^0; //数据&指令选择,H:写数据,L:写指令

sbit rw =P2^1; //读&写选择,H:read,L:write

sbit e =P2^2; //读写使能

sbit bf =P0^7; //忙闲状态标志位,H:内部正执行操作,L:空闲

void chk_busy(void);//检测LCD忙闲

void init_lcd(void);//LCD初始化

void wr_comm(unsigned char comm); //写指令

void wr_comm_no(unsigned char comm);//写指令,不检测忙闲

void wr_data(unsigned char dat); // 写数据

void wr_str(unsigned char *p); //显示字符串

unsigned char rd_lcd(void);//读LCD数据

void delayus(unsigned char us);//延时子程序 us

void delayms(unsigned int ms); //延时子程序 ms

unsigned char bitnum=0; // 中断次数,即接收键盘数据位的个数

unsigned char keyval=0; // 存放按键值

unsigned char lcdbuf[17]={'C','a','p',' ','0',' ','N','u','m',' ','0',' ','U','P',' ','0',0}; // 1602第1行

unsigned char lcdbuf2[17]={'0',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // 1602第2行

bit E0_flag=0,F0_flag=0,Shift_flag=0,Caps_flag=0,Num_flag=0,BF=0,Flag=0; // 标志位

unsigned char up='0',down='0',left='0',right='0',pgup='0',pgdown='0'; // 存放方向键按下的次数

unsigned char LED_status=0; // 键盘指示灯状态

unsigned char code unshifted[][2]= //shift键未按下译码表

{

0x0e,'`',

0x15,'q',

0x16,'1',

0x1a,'z',

0x1b,'s',

0x1c,'a',

0x1d,'w',

0x1e,'2',

0x21,'c',

0x22,'x',

0x23,'d',

0x24,'e',

0x25,'4',

0x26,'3',

0x29,' ',

0x2a,'v',

0x2b,'f',

0x2c,'t',

0x2d,'r',

0x2e,'5',

0x31,'n',

0x32,'b',

0x33,'h',

0x34,'g',

0x35,'y',

0x36,'6',

0x39,',',

0x3a,'m',

0x3b,'j',

0x3c,'u',

0x3d,'7',

0x3e,'8',

0x41,',',

0x42,'k',

0x43,'i',

0x44,'o',

0x45,'0',

0x46,'9',

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值