void keydown
时间: 2023-09-26 07:12:46 浏览: 30
I'm sorry, could you please provide more context or information about what you are looking for? The phrase "keydown" can refer to a variety of different things, depending on the context in which it is used.
相关问题
void keyDown() { if(key==KEY_RIGHT) { if(fast=TRUE) { playtimedsound(driving,1000); } } if(key==KEY_LEFT) low=TRUE; if(key==KEY_SPACE) { stop=!stop; if(stop==FALSE) { playtimedsound(eng,2000); } } }的参数和返回值和功能
这是一个名为keyDown的函数,没有返回值(即void类型),参数也没有在代码中给出。
该函数的功能是监听用户的键盘输入,如果用户按下右箭头键(KEY_RIGHT),且fast为真(TRUE),则播放名为driving的声音文件1000毫秒。如果用户按下左箭头键(KEY_LEFT),则将low设为真(TRUE)。如果用户按下空格键(KEY_SPACE),则将stop的值取反,如果stop变成假(FALSE),则播放名为eng的声音文件2000毫秒。
#include "reg52.h" typedef unsigned int u16; //??????????? typedef unsigned char u8; u8 KeyValue; //?????????? u8 NixieTable[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//??0~F?? void delay(u16 i) { while(i--); } void KeyDown(void) { char a=0; P1=0x0f; if(P1!=0x0f)//???????? { delay(1000);//??10ms???? if(P1!=0x0f)//?????????? { P1=0XF0;//? switch(P1) { case(0Xe0): KeyValue=0;break; case(0Xd0): KeyValue=1;break; case(0Xb0): KeyValue=2;break; case(0X70): KeyValue=3;break; } P1=0X0F;//? switch(P1) { case(0X0e): KeyValue=KeyValue;break; case(0X0d): KeyValue=KeyValue+4;break; case(0X0b): KeyValue=KeyValue+8;break; case(0X07): KeyValue=KeyValue+12;break; } while((a<50)&&(P1!=0xf0)) //???????? { delay(1000); a++; } } } } void main() { while(1) { KeyDown(); //?????? P0=~NixieTable[KeyValue]; } } 按键改成反过来
如果想要将按键的检测反过来,可以按照以下步骤进行修改:
1. 将P1的初始值设为0xF0,表示检测列。将P1的检测顺序也进行反转,先检测高4位,再检测低4位。
2. 将P1的判断条件改为==0xF0,表示检测列是否有按键按下。
3. 将P1的赋值操作改为P1=0x0F,表示检测行。
4. 将P1的检测顺序也进行反转,先检测低4位,再检测高4位。
5. 将KeyValue的赋值操作改为KeyValue=15-KeyValue,表示将按键编号取反。
修改后的代码如下所示:
#include "reg52.h"
typedef unsigned int u16; //定义数据类型
typedef unsigned char u8;
u8 KeyValue; //按键值
u8 NixieTable[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数码管0~F的编码表
void delay(u16 i)
{
while(i--);
}
void KeyDown(void)
{
char a=0;
P1=0xF0; //检测列
if(P1==0xF0) //检测列是否有按键按下
{
delay(1000); //延时10ms
if(P1==0xF0) //再次检测列是否有按键按下
{
KeyValue=0xFF; //表示没有按键按下
}
else
{
P1=0x0F; //检测行
switch(P1) //检测低4位
{
case(0x0E): KeyValue=0;break; //按键1
case(0x0D): KeyValue=1;break; //按键2
case(0x0B): KeyValue=2;break; //按键3
case(0x07): KeyValue=3;break; //按键4
}
P1=0xF0; //检测列
switch(P1) //检测高4位
{
case(0xE0): KeyValue=KeyValue+12;break; //按键1
case(0xD0): KeyValue=KeyValue+8;break; //按键2
case(0xB0): KeyValue=KeyValue+4;break; //按键3
case(0x70): KeyValue=KeyValue;break; //按键4
}
KeyValue=15-KeyValue; //将按键编号取反
while((a<50)&&(P1!=0xF0)) //等待按键释放
{
delay(1000);
a++;
}
}
}
}
void main()
{
while(1)
{
KeyDown(); //按键检测
if(KeyValue!=0xFF) //如果有按键按下
{
P0=~NixieTable[KeyValue]; //在数码管上显示按键值
}
}
}
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)