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

📄 keyboard.c

📁 麦迪工作室51单片机开发板键盘的驱动代码。设计了抬键监听机制
💻 C
字号:
#include "ATMEL89X51.H"
#define LED_SET P2_6				//使能LED灯端口
#define KEY_data P1				//设定P1口为按键输出端口
#define LED_data P0				//设定P0口为数据输入端口
#define ON 0						//设0为开
#define OFF 1						//设1为关
unsigned char key_velual;
unsigned char key_flag=0;

void delay(unsigned char temp)//延时函数
{	
 	unsigned char i;
   for(i=0;i<temp;i++);
}

void Read_key_code(void)
{
	KEY_data |= 0x0f;		//把所有的按键端口置1,等待按键按下
	if(key_flag==0)
	{
		if((KEY_data & 0x0f) != 0x0f)			//防抖动
		{
			KEY_data |= 0x0f;
			delay(10);
			if((KEY_data&0x0f) != 0x0f)		//判断是否有键按下
			{
				key_velual = KEY_data & 0x0f;//读键值
				key_flag=1;			//按键标志位置1
			}
		}
	 }
		else if(key_flag!=0)
		{	
			key_velual=0;		//键值清零
			if((KEY_data & 0x0f) == 0x0f)
				key_flag=0;		//清按键标志位
		}		
}

void Key_set(unsigned char sw)			//按键判断程序
{
	switch(sw)
   {
		case 0x07:	LED_data = 0x08;	break;	//S5被按下,对应的D18亮
		case 0x0b: 	LED_data = 0x04;	break;	//S4被按下,对应的D17亮
		case 0x0d: 	LED_data = 0x02;	break;	//S3被按下,对应的D16亮
		case 0x0e: 	LED_data = 0x01;	break;	//S2被按下,对应的D15亮
		default:								break;
	}
}

void time_interrupt_init(void)				//定时器初始化,50mS
{
	TMOD = 0x01;
	TH0 = -(50000/256);
	TL0 = -(50000%256);
	ET0	=	1;
	TR0	=	1;
	EA = 1;
}

void time0(void)	interrupt 1				//设定定时器按键扫描,50mS
{
	TH0 = -(50000/256);
	TL0 = -(50000%256);
	Read_key_code();				//读键值
	Key_set(key_velual);			//判断键值
}  

main()
{	
	LED_SET = ON;		//选通LED灯端口
	LED_data = 0;	
	time_interrupt_init();
	while(1)
	{
		Key_set(key_velual);
	}
}

⌨️ 快捷键说明

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