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

📄 key.c

📁 61板实验指导书源代码
💻 C
字号:
#define P_IOA_Data			(volatile unsigned int *)0x7000
#define P_IOA_Buffer		(volatile unsigned int *)0x7001
#define P_IOA_Dir			(volatile unsigned int *)0x7002
#define P_IOA_Attrib		(volatile unsigned int *)0x7003

#define P_Watchdog_Clear 	(volatile unsigned int *)0x7012

#define KEY_ALL 0xff00		//使用IOA8~IOA15作为键盘输入口
//============================================================= 
//	函数名称:   GetKey()
//	日期:		20040816
//	功能描述:	等待直到有键按下并抬起,返回键值,没有去抖处理
//	输入:		无
//	输出:		返回16位键值
//=============================================================
unsigned GetKey(void)
{
	
	unsigned KeyValue;

	//初始化IOA的相应端口为上拉输入
	*P_IOA_Dir&=~KEY_ALL;     //"~"先把KEY_ALL即0xff00取反,变成0x00ff,然后和P_IOA_Dir与,再赋给P_IOA_Dir
	*P_IOA_Attrib&=~KEY_ALL;  //和上面一样道理,主要是保护一下IO口,直接给P_IOA_Dir、P_IOA_Attrib写0x00ff也可以
	*P_IOA_Buffer|=KEY_ALL;   //KEY_ALL即0xff00和P_IOA_Buffer相或后再赋给P_IOA_Buffer,主要是为了保护没有用到的IOA低8位
	
	//下面的循环是等待按键按下,按下对应	IOA口的对应值变为0
	while(KeyValue==0)
	{
		KeyValue=(*P_IOA_Data & KEY_ALL)^KEY_ALL;
		*P_Watchdog_Clear=1;         //清看门狗
	}
	KeyValue=(*P_IOA_Data&KEY_ALL)^KEY_ALL;  //"^"是异或,如果两位相同就为0,不同为1。如果没有按键按下,KeyValue=0;假设IOA8按下P_IOA_Data高8位就变为01,再和KEY_ALL与后就变成0x0100,所以KeyValue=0x0100;
	
	
	//下面的循环是等待按键抬起
	while((*P_IOA_Data&KEY_ALL)^KEY_ALL)    //如果(*P_IOA_Data&KEY_ALL)^KEY_ALL =1就开始这个循环,即当有按键按下时就开始这个循环。
	{
		*P_Watchdog_Clear=1;
	}
	return KeyValue;                        //返回键值
}

⌨️ 快捷键说明

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