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

📄 key.h~

📁 基于MEGA16的密码锁
💻 H~
字号:
#ifndef _key_h
#define _key_h 

#define key_port PORTB
#define key_port_ddr DDRB
#define key_port_pin PINB

uchar num,key;

void spk (unsigned int i) 
{             
 	 DDRA=0X04;    //DDA2为输出
 	 PORTA.2=~PORTA.2;
 	 delay_ms(i);
	 PORTA.2=1;     //蜂鸣器关闭
}

uchar keyscan()
{
	uchar scan1,second1;
	key_port=0xf0;  //输出1 
        key_port_ddr=0x0f;  //使能键盘口高四位的上拉电阻
        delay_us(100);//延时等待电平稳定
	if((key_port_pin&0xf0)!=0xf0) /*判断是否有键按下*/
	{
		delay_ms(10);
		if((key_port_pin&0xf0)!=0xf0) /*再次判断*/
		{
			scan1=0xfe; /*逐行扫描*/
			while((scan1&0x10)!=0) /*只允许位移3位*/
			{
				key_port=scan1;
				if((key_port_pin&0xf0)!=0xf0)
				{
					second1=(key_port_pin&0xf0)|0x0f;
					do
	 				{
					 	key_port=0xf0;  //输出1 
                                                key_port_ddr=0x0f;  //使能键盘口高四位的上拉电阻
                                                delay_us(100);//延时等待电平稳定
					}while((key_port_pin&0xf0)!=0xf0); //等待按键松开
					return((~second1)+(~scan1));
				}
				else
					scan1=(scan1<<1)|0x01;
			}

		}
	

	}
	return(0);
}

void whatkey(uchar key11)
{
  switch(key11)
  {//key11
  case 0x11: {num=0x01;break;}
   case 0x21: {num=0x02;break;}  
   case 0x41: {num=0x03;break;}   
   case 0x81: {num=0x04;break;} 
   case 0x12: {num=0x05;break;}
   case 0x22: {num=0x06;break;}
   case 0x42: {num=0x07;break;}
   case 0x82: {num=0x08;break;}
   case 0x14: {num=0x09;break;}
   case 0x24: {num=0x00;break;}
   case 0x48: {num=0xf3;break;} // 删除键
   case 0x18: {num=0xf1;break;}//设置密码
   case 0x28: {num=0xf1;break;}//设置密码
   case 0x88: {num=0xf4;break;} // enter键
   default:{num=0xff;break;}  
  }
}

void keywork()
{
	num=0xff;
	key=keyscan();
    if(key!=0xff) whatkey(key);
}


#endif

⌨️ 快捷键说明

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