key.c

来自「51单片机时钟 和18B20 温度的 LCD显示」· C语言 代码 · 共 65 行

C
65
字号
//========================================================//
//文件名称:Key.c
//功能描述:初始化键盘函数和扫描键盘函数 
//========================================================//
#include "SPCE061A.h"
extern unsigned int keyTtemp;	//记录按键时间的临时变量
extern unsigned int keyvalue;
extern unsigned int keytime;
extern unsigned int keytimeEnb;
//========================================================//
//	语法格式:	void Delaytime(void)
//	实现功能:	延时
//	参数:		无
//	返回值:	无
//========================================================//
void Delaytime()        //延时子程序;
{   
	unsigned int j;
	for(j=0;j<0x0A00;j++);
		*P_Watchdog_Clear=0x0001;
}
//=========================================================//
//	语法格式:	void keyinitial()
//	实现功能:  键盘端口的初始化
//	参数:		无
//	返回值:	无
//=========================================================//
void keyinitial()
{
	*P_IOA_Dir &= 0xfff0;
	*P_IOA_Attrib &= 0xfff0;                               //设置IOA的低四位为低电平输入口
    *P_IOA_Data &= 0xfff0;
}
//========================================================//
//	语法格式:	unsigned int keyscan(void)
//	实现功能:	获得键盘值并赋给变量keyvalue
//	参数:		无
//	返回值:	无
//========================================================//
void keyscan()                                            //键盘扫描子程序;
{
	unsigned int i=0;
	unsigned int k=0;	
    i=*P_IOA_Data & 0x0007;
   	Delaytime();
    k=*P_IOA_Data & 0x0007;
    if(i==k)
    {
    	keyvalue=k;
    	keytimeEnb=1;
    	while(k!=0)
    	{
    		k=*P_IOA_Data & 0x0007;
    		*P_Watchdog_Clear=0x0001;
    	}
    	keytimeEnb=0;
    	keytime=keyTtemp;	//赋值按键时间
    	keyTtemp=0;			//临时变量清零
    }
    else
   	keyvalue=0;
}
//========================================================//
//key.c end
//========================================================//

⌨️ 快捷键说明

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