📄 keyshow~1.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 + -