行列扫描:通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。
/****************************************************************************
*函数名
:KeyDown
*函数功能
:
检测有按键按下并读取键值
*输入
:
无
*输出
:
无
****************************************************************************/
voidKeyDown(void)
{
char
a=0
GPIO_KEY=0x0f
if(GPIO_KEY!=0x0f)//读取按键是否按下
{
Delay10ms()//延时10ms进行消抖
if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
{
GPIO_KEY=0X0F
//测试列
switch(GPIO_KEY)
{
case(0X07):
KeyValue=0break
case(0X0b):
KeyValue=1break
case(0X0d):
KeyValue=2break
case(0X0e):
KeyValue=3break
}
//测试行
GPIO_KEY=0XF0
switch(GPIO_KEY)
{
case(0X70):
KeyValue=KeyValuebreak
case(0Xb0):
KeyValue=KeyValue+4break
case(0Xd0):
KeyValue=KeyValue+8break
case(0Xe0):
KeyValue=KeyValue+12break
}
while((a<50)&&(GPIO_KEY!=0xf0))//按键松手检测
{
Delay10ms()
a++
}
}
}
}
你把里面的数字转换成二进制,比如table[0]=0x3f=00111111b由于你这个是共阴极数码管,高电平有效,所以写一的地方对应的LED都点亮 至于那七根数码管以及一个小数点和二进制位数对应关系你可以上网上查一下,简单的说小数点也就是DP是最高位,其他的那七根数码管从最上面那个开始顺时针一共是六根从bit(0)到bit(5),最后横着那根是bit(6)。希望能帮到你。至于你说的TEMP对应P2口,得有硬件图才可以知道有什么作用。