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

📄 keyshow~1.c

📁 这里有很多我自己做的凌阳单片机源程序
💻 C
字号:
//正确的键盘输入程序,按键对应0----15相应的数据显示。
//注意在原来数据基础上加键入数字的进位的处理
//按键扫描延时的应用
//位选码(一)-----(四)对应(IOA8----IOA11)
//段选码a-----dp对应IOB7----IOB0
//键盘接口如图所表示
#include<spce061a_chf.h>
unsigned int time=0;//键盘扫描计数器
unsigned int temp=0;//键盘扫描返回码
extern showval[4];
unsigned int a1=0;
unsigned int key_scan(void);//按键扫描函数
void initiashow(void);//显示程序端口初始化
unsigned int get_key(unsigned int);
unsigned int ksp[4]={0x007f,0x00bf,0x00df,0x00ef};
unsigned int keycode[16]={0x0077,0x007b,0x007d,0x007e,0x00b7,0x00bb,0x00bd,0x00be,0x00d7,
0x00db,0x00dd,0x00de,0x00e7,0x00eb,0x00ed,0x00ee};
void main()
{	
	unsigned int keyval=0;//保存键盘译码值	
	initiashow();
	
	asm("int off");
	Set_TimeBase(0x000c);
	Set_INT_Ctrl(0x0001);
	asm("int irq");
	
	while(1)
	{
		Watchdog_Clear();//当利用清看门狗函数时候没有参数		
		if(temp)
		{
			keyval=get_key(temp);
			showval[3]=showval[3]+keyval%10;//保存个位
			if(showval[3]>=10)
			{
				showval[2]+=showval[3]/10;
				showval[3]=showval[3]%10;				
				if(showval[2]>=10)
				{
					showval[1]+=1;
					showval[2]=showval[2]%10;					
					if(showval[1]>=10)
					{
						showval[1]=showval[1]-10;
						showval[0]+=1;
						if(showval[0]>=10)
						{
							showval[0]=0;
						}
					}
				}
			}
			showval[2]=showval[2]+keyval/10;//保存十位
			if(showval[2]>=10)
			{
				showval[2]=showval[2]-10;
				showval[1]+=1;
				if(showval[1]>=10)
				{
					showval[1]=showval[1]-10;
					showval[0]+=1;
					if(showval[0]>=0)
					{
						showval[0]=0;
					}
				}
			}
			if(showval[1]>=10)
			{
				showval[1]=showval[1]-10;
				showval[0]+=1;
				if(showval[0]>=10)
				{
					showval[0]=0;
				}
			}			
		}
		temp=0;
	}
}

void initiashow(void)
{
	Set_IOA_Dir(0x0ff0);//低4位为高电平输出,送出位选码
	Set_IOA_Attrib(0x0ff0);
	Set_IOA_Data(0x0ff0);
	
	Set_IOB_Dir(0x00ff);//低8位为高电平输出,送出段码
	Set_IOB_Attrib(0x00ff);
	Set_IOB_Data(0x00ff);
}
unsigned int key_scan(void)
{
	unsigned int scanval;//按键扫描值
	unsigned int k=0;	
	unsigned int i;	
	
	scanval=0x000f;//
	*P_IOA_Data=scanval;	
	if(scanval==(*P_IOA_Data))//若相等于就表示没有按键被按下
	{
		return(k);
	}
	else 
	{
		a1=a1+1;
		if(a1==2)
		{
			a1=0;			
			for(i=0;i<4;i++)
			{
				*P_IOA_Data=ksp[i];	  
	    		k=Get_IOA_Data();  	
	    		if(k!=ksp[i])//说明这一行有键按下
	    		{
	    			while(k==Get_IOA_Data())
	    			{
	    				Watchdog_Clear();
	    			}	 
	    			return(k);   		
	    		}	    		    	
			}		
		}
		return (k);
	}
	return (k);
}		
			
unsigned int get_key(unsigned int i)
{
	unsigned int j;
	Watchdog_Clear();
    for(j=0;j<16;j++)
    	if(i==keycode[j])
    		return(j);    	
    return(16);
}

⌨️ 快捷键说明

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