红外遥控器同一个键控制一个I/O口,第一次开,第二次关,比如P0^1开启关闭C语言代码?高手请进。
使用51单片机,单片机能够解码遥控器16进制编码,但第一次只能开,再按第二次关不了。请问怎么回事?C语言代码要怎么写?那位大侠知道,本人在此先行谢谢了!voidmain(...
使用51单片机,单片机能够解码遥控器16进制编码,但第一次只能开,再按第二次关不了。请问怎么回事?C语言代码要怎么写?那位大侠知道,本人在此先行谢谢了!
void main()
{
P0=0x00;
IrInit();
while(1)
{
switch(IrValue[2])
{
case(0X16):
d18=0;break;
}
} 展开
void main()
{
P0=0x00;
IrInit();
while(1)
{
switch(IrValue[2])
{
case(0X16):
d18=0;break;
}
} 展开
3个回答
展开全部
第一,收到你要的按键后,是取反某个位,而不是赋值。如P10=~P10;(建议取个名字)
第二,为了避免一次按键,多次触发,对按键值操作后,需要进行清除处理;(即赋值成无效的按键值),如 IrValue[2]=0xff;(如果没有按键是 0xff的话)
第三,最正确的做法是,收到遥控后,额外提供一个标志位(如 IR_UpdateFlag),程序识别标志位后,进行按键选择,处理完按键后,清除标志位。这样可以避免程序重复、多余执行按键选择(虽然是无效的按键,但那也是选择),可以提高系统执行效率!
第二,为了避免一次按键,多次触发,对按键值操作后,需要进行清除处理;(即赋值成无效的按键值),如 IrValue[2]=0xff;(如果没有按键是 0xff的话)
第三,最正确的做法是,收到遥控后,额外提供一个标志位(如 IR_UpdateFlag),程序识别标志位后,进行按键选择,处理完按键后,清除标志位。这样可以避免程序重复、多余执行按键选择(虽然是无效的按键,但那也是选择),可以提高系统执行效率!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询