⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2_driver.h

📁 12864液晶屏驱动加入DS18B20温度显示+51单片机
💻 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 + -