📄 ps2_driver.h
字号:
#ifndef __PS2_Driver_H__
#define __PS2_Driver_H__
unsigned char PS2_X_row; // PS2_X_row为列值
unsigned char PS2_Y_row; // PS2_Y_row为行值
sbit Key_Data =P3^2; // 定义Keyboard数据端口引脚
sbit Key_CLK=P3^3; // 中断端口,时钟线
static unsigned char KeyV=0X00; // 键值
static unsigned char BF = 0; // 标识是否有字符被收到
static unsigned char IntNum = 0; // 中断次数计数
bit dx=0; // 大小写标志 dx==1时大写状态
/************************************************************************************************************
** Function name: Keyboard_out( )
** Descriptions: 处理键盘按键产生的中断,按照中断次数收集键码值
** Input: 无
** Output: 无
** Created by: 王 斌
** Created Date: 2008-11-20
**----------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**----------------------------------------------------------------------------------------------------------
************************************************************************************************************/
void Keyboard_out(void) interrupt 2 //键盘中断处理 键值存储在 KeyV 中
{
IntNum++; // 先进行中断次数记录,否则第一个按键显示错误
if ((IntNum>0) && (IntNum <9))
{
KeyV = KeyV >> 1; //因键盘数据是低>>高,结合上一句所以右移一位
if (Key_Data==1) //当键盘数据线为1时
{
KeyV = KeyV | 0x80;
} //存储一位
}
//中断次数加一(中断一次接收一位数据)
if (IntNum > 11) //中断11次后数据发送完毕
{
IntNum = 0; //当中断11次后表示一帧数据收完,清变量准备下一次接收
BF = 1; //标识有字符输入完了
EA = 0; //关中断等显示完后再开中
}
}
/************************************************************************************************************
** Function name: Decode( )
** Descriptions: 键盘键值解码处理
** Input: 无
** Output: 无
** Created by: 王 斌
** Created Date: 2008-11-20
**----------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**----------------------------------------------------------------------------------------------------------
************************************************************************************************************/
void Decode() //键值处理
{
unsigned char data TempCyc;
signed char data k;
TempCyc=KeyV;
if(BF==1) //接收完一个有效数据时
{
BF=0; //准备下一次接收
switch ( TempCyc ) //键值与显示字符的对应关系
{ //键值// //对应字符//
case 0x8A: k=0; break; // 0
case 0x2C: k=1; break; // 1
case 0x3C: k=2; break; // 2
case 0x4C: k=3; break; // 3
case 0x4A: k=4; break; // 4
case 0x5C: k=5; break; // 5
case 0x6C: k=6; break; // 6
case 0x7A: k=7; break; // 7
case 0x7C: k=8; break; // 8
case 0x8C: k=9; break; // 9
case 0x38: k=10; break; // a
case 0x64: k=11; break; // b
case 0x42: k=12; break; // c
case 0x46: k=13; break; // d
case 0x48: k=14; break; // e
case 0x56: k=15; break; // f
case 0x68: k=16; break; // g
case 0x66: k=17; break; // h
case 0x86: k=18; break; // i
case 0x76: k=19; break; // j
case 0x84: k=20; break; // k
case 0x96: k=21; break; // l
case 0x74: k=22; break; // m
case 0x62: k=23; break; // n
case 0x88: k=24; break; // o
case 0x9A: k=25; break; // p
case 0x2A: k=26; break; // q
case 0x5A: k=27; break; // r
case 0x36: k=28; break; // s
case 0x58: k=29; break; // t
case 0x78: k=30; break; // u
case 0x54: k=31; break; // v
case 0x3A: k=32; break; // w
case 0x44: k=33; break; // x
case 0x6A: k=34; break; // y
case 0x34: k=35; break; // z
case 0x98: k=63; break; // ;
case 0xAA: k=65; break; // =
case 0xF2: k=68; break; // +
case 0x52: k=-16;break; // 空格键
case 0xB0: k=101;break; // 大小写控制键Caps lock
}
if(k==101) {dx=!dx;} // 按下大小写控制键时 大小写标志取反
if(k==-16) // 空格键按下时
{
lcd_disp_char8x8(PS2_X_row, PS2_Y_row, -16+'0'); //清除光标
lcd_disp_char8x8(PS2_X_row+8, PS2_Y_row, 79+'0'); //光标移一位
}
if(dx==0) // (dx = 大写)小写状态时显示
{
lcd_disp_char8x8(PS2_X_row, PS2_Y_row, k+'0'); //小写字符
lcd_disp_char8x8(PS2_X_row+8, PS2_Y_row, 79+'0'); //光标
}
if(dx==1)//大写状态时显示
{
if(k>9 && k<=35)
{
lcd_disp_char8x8(PS2_X_row, PS2_Y_row, (k+26)+'0');//大写字符
lcd_disp_char8x8(PS2_X_row+8, PS2_Y_row, 79+'0');//光标
}
if(k>=0 && k<=9)
{
lcd_disp_char8x8(PS2_X_row, PS2_Y_row, (k-10)+'0');//数字键对应的符号
lcd_disp_char8x8(PS2_X_row+8, PS2_Y_row, 79+'0');//光标
}
}
if(PS2_X_row==120) //写满一行
{
PS2_X_row=0;PS2_Y_row=PS2_Y_row+1;//换行
lcd_disp_char8x8(PS2_X_row, PS2_Y_row, 79+'0');
}//光标下移
else
{
PS2_X_row=PS2_X_row+8;
}
EA=1;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -