/********************************************************
*函数名称: init_keyboard
*函数功能: 键盘控制初始化部分
*参数: 无
*返回: 无
********************************************************/
void init_keyboard()
{
rINTMOD=0x0;
rINTCON=0x1;
rINTMSK=~(BIT_GLOBAL|BIT_EINT1);
pISR_ENT1=(int)keyboardint;
/*PORTG*/
rPCONG=0xffff;
rEXINT=rEXTINT|0x20;
rL_ISPC=BIT_EINT;
rEXINTPND=0xf;
}
/***********************************************************
*函数名称: keyboardint
*函数功能: 键盘中断服务程序
*参数: 无
*返回: 无
************************************************************/
void keyboardint()
{
int value;
rI_ISPC=BIT_EINT1;
rEXTINTPND=0xf;
value=key_read();
if(value>-1)
Digit_Led_Symbol(value);
rI_ISPC=BIT_EINT1;
rINTCON=0x1;
}
/*数码管短码表*/
int Seg[]={SEGMENT_A,SEGMENT_B,SEGMENT_C,SEGMENT_D,SEGMENT_E,SEGMENT_F,SEGMENT_G,SEGMENT_P};
/******************************************************
*函数名称: Digit_Led_Segment
*函数功能: 8段数码管显示控制
*参数: seg_num____数码管段号
*返回: 无
*****************************************************/
void Digit_Led_Segment(int seg_num)
{
/*segment control*/
if((seg_num>=0)&&(seg_num<8))
LED8ADDR=~Seg[seg_num];
}
/*************************************************************
* 函数名称: KEY_READ
* 函数功能: 读键盘值
* 参数: 无
* 返回: 正确时返回键盘值,错误时返回-1
*************************************************************/
inline int key_read()
{
int value;
char temp;
temp= * (keyboard_base+0xFD); //读地址1(A1为低)
if((temp&KEY_VALUE_MAKS)!=KEY_VALUE_MASK) //判断是否有键盘按下
{
if((temp&0x1)==0) //判断按键所对应的数据位
value=3;
else if((temp&0x2)==0)
value=2;
else if((temp&0x4)==0)
value=1;
else if((temp&0x8)==0)
value=0;
return value;
}
temp= * (keyboard_base+0xFB); //读地址2(A2为低)
if((temp&KEY_VALUE_MAKS)!=KEY_VALUE_MASK) //判断是否有键盘按下
{
if((temp&0x1)==0) //判断按键所对应的数据位
value=7;
else if((temp&0x2)==0)
value=6;
else if((temp&0x4)==0)
value=5;
else if((temp&0x8)==0)
value=4;
return value;
}
temp= * (keyboard_base+0xF7); //读地址3(A3为低)
if((temp&KEY_VALUE_MAKS)!=KEY_VALUE_MASK) //判断是否有键盘按下
{
if((temp&0x1)==0) //判断按键所对应的数据位
value=0xb;
else if((temp&0x2)==0)
value=0xa;
else if((temp&0x4)==0)
value=9;
else if((temp&0x8)==0)
value=8;
return value;
}
temp= * (keyboard_base+0xEF); //读地址4(A4为低)
if((temp&KEY_VALUE_MAKS)!=KEY_VALUE_MASK) //判断是否有键盘按下
{
if((temp&0x1)==0) //判断按键所对应的数据位
value=0xf;
else if((temp&0x2)==0)
value=0xe;
else if((temp&0x4)==0)
value=0xd;
else if((temp&0x8)==0)
value=0xc;
return value;
}
return -1; //按键读/写失败
}
arm key.rar_ARM Linux_arm_hitool for arm_key
版权申诉
176 浏览量
2022-09-24
12:19:27
上传
评论
收藏 19KB RAR 举报
朱moyimi
- 粉丝: 64
- 资源: 1万+
最新资源
- keil2 + proteus + 8051.exe
- 1961ee27df03bd4595d28e24b00dde4e_744c805f7e4fb4d40fa3f695bfbab035_8(1).c
- mediapipe-0.9.0.1-cp37-cp37m-win-amd64.whl.zip
- windows注册表编辑工具
- mediapipe-0.9.0.1-cp37-cp37m-win-amd64.whl.zip
- 校园通行码预约管理系统20240522075502
- 车类型数据集6250张VOC+YOLO格式.zip
- The PyTorch implementation of STGCN.STGCN-main.zip
- 092300108.cpp
- 车类型数据集6000张VOC+YOLO格式.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0