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

📄 key.c

📁 录音方音的程序,调试的很不错.通过按键控制.在其他的地方下不到的!
💻 C
字号:
#include "spce061a.h"
unsigned char KeyFlag=0,I_KeyBuf = 0 ,t  ; //有键按下标识符 //保存键值
unsigned char i,n;
unsigned char  KeyVal;
void delay(void)
{
    unsigned char a=0;
    for(a=0;a<1000;a++)
    *P_Watchdog_Clear=1;    
}
void keep_IOA_Data(unsigned int Data)                                                                                                 
{
	*P_IOA_Data=(*P_IOA_Data&0xff00)+Data;//写低位
}
void keep_IOA_Dir(unsigned int Dir)
{
	*P_IOA_Dir=(*P_IOA_Dir&0xff00)+Dir;//写低位
} 
void keep_IOA_Attrib(unsigned int Attrib)
{
	*P_IOA_Attrib=(*P_IOA_Attrib&0xff00)+Attrib;//写低位
}
unsigned char scan_key(void)
{   
     
     keep_IOA_Data(0x00f0);//写操作-IOA的底8位
     keep_IOA_Attrib(0x00f0);
     keep_IOA_Dir(0x00f0);
     *P_IOA_Data&=0x00ff;//低位保持掷为读
     if(*P_IOA_Data==0x00f0)//无键值
     {
        I_KeyBuf=0;
        KeyFlag=0;//读数
     }
     else KeyFlag=1;//有键值
     if(KeyFlag==1)
     {
        keep_IOA_Data(0x0080);//扫描第一行
        *P_IOA_Data&=0x00ff;
        n=0x0080|(*P_IOA_Data&0x000f);
        if(n!=0x0080)t=n;
             
        keep_IOA_Data(0x0040);//扫描第二行
        *P_IOA_Data&=0x00ff;
        n=0x0040|(*P_IOA_Data&0x000f);
        if(n!=0x0040)t=n;
             
        keep_IOA_Data(0x0020);//扫描第三行
        *P_IOA_Data=(*P_IOA_Data&0x00ff)+0x0a00;
        n=0x0020|(*P_IOA_Data&0x000f);
        if(n!=0x0020)t=n;
            
        keep_IOA_Data(0x0010);//扫描第四行
        *P_IOA_Data&=0x00ff;
        n=0x0010|(*P_IOA_Data&0x000f);
        if(n!=0x0010)t=n;
         
        switch (t) //将按键码转换成键值 
        {
            case  0x0011: return 0; break; 
            case  0x0021: return 1; break; 
            case  0x0041: return 2; break; 
            case  0x0081: return 3; break; 
            case  0x0012: return 4; break; 
            case  0x0022: return 5; break; 
            case  0x0042: return 6; break; 
            case  0x0082: return 7; break; 
            case  0x0014: return 8; break; 
            case  0x0024: return 9; break; 
            case  0x0044: return 10;break;  
            case  0x0084: return 11;break;  
            case  0x0018: return 12;break;  
            case  0x0028: return 13;break;  
            case  0x0048: return 14;break;  
            case  0x0088: return 15;break;
            case  0x0000: return 16;break;
            default : return 17;
        }
        *P_Watchdog_Clear=1; 
     	}
}
unsigned char get_key(void)
{
    unsigned char key;
    key=scan_key();
    if(key!=16)I_KeyBuf=key;
    else return 0xffff;
    if(I_KeyBuf==key)
    {
        return key;
    }
}
main()
{
    
    while(1)
    {	
        KeyVal=get_key();
        xianshi(0,KeyVal/10);
        xianshi(1,KeyVal%10);
        *P_Watchdog_Clear = 0x0001;         //清看门狗操作
    }
}

    
    
    
    	

⌨️ 快捷键说明

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