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

📄 keyboard.c

📁 8279的驱动测试程序 用于控制4*4键盘 比较简单,适合初学者使用
💻 C
字号:
#include <AT89X55.H>
#include<absacc.h>
#include <string.h>
#include "keyboard.h"




/******************************* 显示字符*****************************************/
void print(char *pdat)
{
	int i,len;
	len = strlen(pdat);
	for(i=0;i<len;i++)
	{
		SBUF = pdat[i];
		while(TI != 1)
		{
		;			
		}
		TI = 0;
	}
}

/*******************************显示数字*****************************************/

void printhex(ulong dat)
{
	uchar temp;
	char i;
	for(i=28;i>=0;i=i-4)
	{
		temp = (dat)>>i;
		temp = temp&0xf;
		if(temp >= 0 && temp <=9)	temp = temp + '0';
		else if(temp >= 0xa && temp <= 0xf)	 temp = temp + '0' +7;
		SBUF = temp;
		while(TI != 1)
		{
		;			
		}
		TI = 0;

	}


}

/******************************* 8279延迟函数*****************************************/
void delay8279()
{
	int i;
	for(i=0;i<200;i++);	
}


/******************************* 向8279发命令*****************************************/
uchar SendCom(uchar com)
{
	A1 = 0;                // A1 = P3^5;  定时器 T1
	A0 = 0;                // A0 = P3^4;  定时器 TO
	A08279 = 1;             //the signale in or out are interpreted as a command or status                          
	Com8279 = com; 
	delay8279();
	return 0;	
}


/******************************* 8279读数据*****************************************/
uchar GetFiFoStatus()
{
	uchar temp;
	A08279 = 1;                  //
	A0 = 0;                     // A0 = P3^4;  定时器 TO
	A1 = 0;                     // A1 = P3^5;  定时器 T1
	temp = Dat8279;
	return temp;
}

/******************************* 8279读数据*****************************************/
uchar RdData()
{
	uchar temp;                   //i,num;
	A1 = 0;
	A0 = 0;
	SendCom(0x40);                      //  read FIFO
	A08279 = 0;	                      // 数据
	temp = Dat8279;
	return temp;	
}

/******************************* 初始化8279*****************************************/

 Init8279()
{
	EX1 = 1;                              //外中断1中断允许
	IE1 = 0;                             //INT1中断请求标志位,有外部中断请求时置1,
	IT1 = 1;                             //INT1 触发方式控制位   ,为负跳变触发方式
	A1 = 0;
	A0 = 0;              
	SendCom(0);  		                 //设置键盘工作方式  两键锁定	 
 	SendCom(0x20 | 18);	                 //设置时钟频率  大约为100KHZ		
	return 1; 	
}


/******************************* 外中断INT1******************************************/


void KeyIsr() interrupt 2 using 0        
{
	uchar temp;
	print("int1\r\n");
	temp = RdData();
	if(temp == 0)	return ;
	print("in int data is:");
	printhex(temp);
	print("\r\n");
	print("test 8 :");
	printhex(0x8);
	print("\r\n");
	IE1 = 0;

}


⌨️ 快捷键说明

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