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

📄 ps2keybroad.c

📁 使用单片机控制两片串行A/D芯片TLC5615输出字模电压值
💻 C
字号:
#include"AO_Display.H"

sbit Key_Data = P2^0;//定义Keyboard数据端口引脚
sbit Key_CLK  = P3^2;	//中断端口,时钟线

unsigned char CharBuffer[];
unsigned char CharConter; //记录CHARBUFFER里面的字母值
unsigned char KeyV=0;   //键值
unsigned char BF = 0;      //标识是否有字符被收到
unsigned char IntNum = 0;  //中断次数计数
unsigned char KeyBoardInData = 200;
bit dx=0;                         //大小写标志 dx==1时大写状态

extern unsigned char XOffset;
extern unsigned char YOffset;
extern unsigned char Scale;
void Decode( void );
/*********************************************************** 
函数名称: 
函数功能: 
入口参数: 
出口参数: 
备 注: 
***********************************************************/
void Keyboard_out() interrupt 0//键盘中断处理 键值存储在 KeyV 中
{	
	if ((IntNum>0) && (IntNum <9))
		{			
			KeyV = KeyV >> 1; 		  //因键盘数据是低>>高,结合上一句所以右移一位
			if (Key_Data)  		  	  //当键盘数据线为1时   
		 		{KeyV = KeyV | 0x80;} //存储一位
		}
  		IntNum++;  				  //中断次数加一(中断一次接收一位数据)
	while (Key_CLK == 0); //等待PS/2CLK拉高

	if (IntNum>10) 			  //中断33次后数据发送完毕,舍弃了通码和断码
		{   
		IntNum = 0; 
		BF = 1;  		  		  //标识有字符输入完了
		EX0 = 0;
		}
}
/*********************************************************** 
函数名称: 
函数功能: 
入口参数: 
出口参数: 
备 注: 
***********************************************************/
void  PS2KeybroadInit( void )
{
	EA  = 1;
	EX0 = 1;
}
/*********************************************************** 
函数名称:KeyboardDecode 
函数功能:把PS/2键盘的数据解码
入口参数: 
出口参数: 
备 注: 
***********************************************************/
void KeyboardDecode( void ) //键值处理
{
	unsigned char i;
	unsigned char TempCyc;	
	if(BF)
	{
		
	TempCyc = KeyV;
	BF = 0;  				//准备下一次接收
	switch ( TempCyc ) 		//键值与显示字符的对应关系
		{   
			case 0x45: KeyBoardInData = 0; break; //0
	    	case 0x16: KeyBoardInData = 1; break; //1
			case 0x1e: KeyBoardInData = 2; break; //2
			case 0x26: KeyBoardInData = 3; break; //3
			case 0x25: KeyBoardInData = 4; break; //4
			case 0x2e: KeyBoardInData = 5; break; //5
			case 0x36: KeyBoardInData = 6; break; //6
			case 0x3d: KeyBoardInData = 7; break; //7
			case 0x3e: KeyBoardInData = 8; break; //8
			case 0x46: KeyBoardInData = 9; break; //9
			case 0x1c: KeyBoardInData =10; break; //a
			case 0x32: KeyBoardInData =11; break; //b
			case 0x21: KeyBoardInData =12; break; //c
			case 0x23: KeyBoardInData =13; break; //d
			case 0x24: KeyBoardInData =14; break; //e
			case 0x2b: KeyBoardInData =15; break; //f
			case 0x34: KeyBoardInData =16; break; //g
			case 0x33: KeyBoardInData =17; break; //h
			case 0x43: KeyBoardInData =18; break; //i
			case 0x3b: KeyBoardInData =19; break; //j
			case 0x42: KeyBoardInData =20; break; //k
			case 0x4b: KeyBoardInData =21; break; //l
			case 0x3a: KeyBoardInData =22; break; //m
			case 0x31: KeyBoardInData =23; break; //n
			case 0x44: KeyBoardInData =24; break; //o
			case 0x4d: KeyBoardInData =25; break; //p
			case 0x15: KeyBoardInData =26; break; //q
			case 0x2d: KeyBoardInData =27; break; //r
			case 0x1b: KeyBoardInData =28; break; //s
			case 0x2c: KeyBoardInData =29; break; //t
			case 0x3c: KeyBoardInData =30; break; //u
			case 0x2a: KeyBoardInData =31; break; //v
			case 0x1d: KeyBoardInData =33; break; //x
			case 0x22: KeyBoardInData =34; break; //y
			case 0x35: KeyBoardInData =34; break; //y
			case 0x1a: KeyBoardInData =35; break; //z
			case 0x4c: KeyBoardInData =63; break; //;
/*
			case 0x7b: KeyBoardInData =67; break; //-  小键盘
			case 0x79: KeyBoardInData =68; break; //+  小键盘
			case 0x6b: KeyBoardInData =69; break; //左 小键盘
			case 0x74: KeyBoardInData =70; break; //右 小键盘
			case 0x75: KeyBoardInData =71; break; //上 小键盘
			case 0x72: KeyBoardInData =72; break; //下 小键盘
*/
			case 0x7b: if(Scale > 1)Scale--;KeyBoardInData=200;break;   //缩小
			case 0x79: if(Scale < 4)Scale++;KeyBoardInData=200;break;   //放大
			case 0x6b: XOffset=XOffset-5;KeyBoardInData=200;break;	  //左移
			case 0x74: XOffset=XOffset+5;KeyBoardInData=200;break;	  //右移
			case 0x75: YOffset=YOffset+5;KeyBoardInData=200;break;	  //上移
			case 0x72: YOffset=YOffset-5;KeyBoardInData=200;break;	  //下移

			case 0x66: KeyBoardInData= 99; break; //回删键
			case 0x29: KeyBoardInData= 98; break; //空格键
			case 0x5a: KeyBoardInData=100; break; //回车键
			case 0x58: KeyBoardInData=101; break; //大小写控制键Caps lock
			case 0x76: KeyBoardInData=103; break; //ESC
		}

	if(KeyBoardInData<35)	 //增加字符程序
		{
		if(CharConter<8)
			{
			CharBuffer[CharConter] = KeyBoardInData;
			CharConter++;
			}
		else
			{
			for(i=0;i<8;i++)
				{
				CharBuffer[i] = 200;
				}
			CharConter = 0;
			CharBuffer[CharConter] = KeyBoardInData;
			CharConter ++;
			}
		}

	if(KeyBoardInData == 99) //回删处理
		{
		if(CharConter)
			{
			CharConter--;
			CharBuffer[CharConter] = 200;
			}
		}

	if(KeyBoardInData == 98)
		{
		if(CharConter<8)
			CharConter++;
		else
		    {
			for(i=0;i<8;i++)
				{
				CharBuffer[i] = 200;
				}
			CharConter = 1;
			}
		}
	
	SentChar(KeyV);
	Delay(50000);  
	EX0 = 1;
	}
}
/*********************************************************** 
函数名称: 
函数功能: 
入口参数: 
出口参数: 
备 注: 
***********************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -