【已解决】51简单的红外程序,出了邪门了,大家都来帮帮...

2020-02-04 09:04发布

本帖最后由 512826028 于 2012-4-26 23:59 编辑

    我是今天买了一个红外的遥控器,写了一个红外接收的程序。一开始,解码都正常。后来,我在中断中添加一个加一,和减一的代码。但是,结果出人意料,程序会自动运行两边。本意是这样的,按下一个键,表示加一,计数增加一。程序放在中断中进行,进入中断就关闭了EA,应该不会再自动重复进入中断吧?我先给大家上中断部分的程序。
/************************中断0解码服务子程序**********************/
void int0(void) interrupt 0      
{
        EA=0;
        irdalow = IRDA_JIEMA();//得到解码的数据 这个数据只包括数据码!
        Delay_ms(255);//
        Delay_ms(255);//
        if(irdalow == 0x0df2) //如果按下的向上,就减一
                {
                Delay_ms(200);
                if(SCREEN_MUSIC>0)
                        SCREEN_MUSIC = SCREEN_MUSIC-1;                //向上翻
                }
        if(irdalow == 0x0ef1)//如果按下的是向下,就加一
                {
                Delay_ms(200);
                SCREEN_MUSIC = SCREEN_MUSIC+1;                //向下翻
                if(SCREEN_MUSIC>7)  //不可以超出7
                        SCREEN_MUSIC=7;
                LCD12864S_WCOM(0x86);//这句和下句是在LCD的指定位置显示出SCREEN_MUSIC的值。+0x30是转换成字符。
                LCD12864S_WDATA(0x30+SCREEN_MUSIC);
                }
        Delay_ms(255);//       
        Delay_ms(255);//       
        SCREEN_DISP();//刷新显示函数
        SCREEN_GUANGBIAO(SCREEN_MUSIC-SCREEN_ROW);//这个是控制光标位置的。移动光标。
        Delay_ms(255);//
        Delay_ms(255);//       
        EA=1;
}
    我在说一下问题。这个中断程序就是这样。运行起来之后,我按下向下键,就会自动增加2,而不是一。为了能看出变化,我添加了LCD显示SCREEN_MUSIC值的语句,同时,在中断的多个地方,做了大量的延时处理,最后看出了程序执行的过程。
    程序是直接运行了两边!按下“向下键”之后,在LCD上可以看到显示的SCREEN_MUSIC从0显示为1,然后移动一下光标。然后,LCD上又看到SCREEN_MUSIC的值变为2,又移动了一次光标。
    这样,按下一次,程序就是增加的二!而且是从头到尾的执行了两遍!!
    我真的不知道这个事什么问题导致的。希望大家都能帮帮。。。。。。。。。。。谢谢啦!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。