cbai 发表于 2025-4-8 14:22:58

// 课后任务2:按一下亮一颗灯,再按一下亮两颗灯,直到全亮(变量+加法和乘法)
               
                if(P32 == 0){
                        Delay20ms();
                        if(P32 == 0){
                                i++;
                                if((i % 8) == 1){
                                P00 = 0;
                                P01 = 1;
                                P02 = 1;
                                P03 = 1;
                                P04 = 1;
                                P05 = 1;
                                P06 = 1;
                                P07 = 1;
                                printf_usb("i = %d\r\n", i);
                                }
                                else if((i % 8) == 2){
                                        P00 = 0;
                                        P01 = 0;
                                        P02 = 1;
                                        P03 = 1;
                                        P04 = 1;
                                        P05 = 1;
                                        P06 = 1;
                                        P07 = 1;
                                        printf_usb("i = %d\r\n", i);
                                }
                                else if((i % 8) == 3){
                                        P00 = 0;
                                        P01 = 0;
                                        P02 = 0;
                                        P03 = 1;
                                        P04 = 1;
                                        P05 = 1;
                                        P06 = 1;
                                        P07 = 1;
                                        printf_usb("i = %d\r\n", i);
                                }
                                else if(i % 8 == 4){
                                        P00 = 0;
                                        P01 = 0;
                                        P02 = 0;
                                        P03 = 0;
                                        P04 = 1;
                                        P05 = 1;
                                        P06 = 1;
                                        P07 = 1;
                                        printf_usb("i = %d\r\n", i);
                                }
                                else if((i % 8) == 5){
                                        P00 = 0;
                                        P01 = 0;
                                        P02 = 0;
                                        P03 = 0;
                                        P04 = 0;
                                        P05 = 1;
                                        P06 = 1;
                                        P07 = 1;
                                        printf_usb("i = %d\r\n", i);
                                }
                                else if(i % 8 == 6){
                                        P00 = 0;
                                        P01 = 0;
                                        P02 = 0;
                                        P03 = 0;
                                        P04 = 0;
                                        P05 = 0;
                                        P06 = 1;
                                        P07 = 1;
                                        printf_usb("i = %d\r\n", i);
                                }
                                else if((i % 8) == 7){
                                        P00 = 0;
                                        P01 = 0;
                                        P02 = 0;
                                        P03 = 0;
                                        P04 = 0;
                                        P05 = 0;
                                        P06 = 0;
                                        P07 = 1;
                                        printf_usb("i = %d\r\n", i);
                                }
                                else if((i % 8) == 0) {
                                        P00 = 0;
                                        P01 = 0;
                                        P02 = 0;
                                        P03 = 0;
                                        P04 = 0;
                                        P05 = 0;
                                        P06 = 0;
                                        P07 = 0;
                                        printf_usb("i = %d\r\n", i);
                                }
                                while(P32 == 0);
                        }
                }
IO那一节视频课后任务2是否正确?

cbai 发表于 2025-4-18 15:30:25

cbai 发表于 2025-4-8 14:22
// 课后任务2:按一下亮一颗灯,再按一下亮两颗灯,直到全亮(变量+加法和乘法)
               
                if(P32 == 0){


请问一下大佬能解答一下我的疑问吗:
按照老师在第十四课中的例子
void P3_IO_Init(void){   //P3口中断初始化
        P3IM0 = 0x00;
        P3IM1 = 0xff;   //IO口中断模式设置为下降沿
        P3INTE = 0x08;//P33口中断使能
}
这段程序解释有问题吧?应该是配置P3口是低电平触发中断吧。

ercircle 发表于 2025-4-18 15:40:24

cbai 发表于 2025-4-18 15:30
请问一下大佬能解答一下我的疑问吗:
按照老师在第十四课中的例子
void P3_IO_Init(void){   //P3口中断 ...


嗯,低电平中断,以手册为准

cbai 发表于 2025-4-18 16:08:22

ercircle 发表于 2025-4-18 15:40
嗯,低电平中断,以手册为准

我想问一下老师,P33和P47配置为下降沿触发中断,为什么没有效果?
void P3_IO_Init(void){   //P3口中断初始化
      P3IM0 = 0x00;
      P3IM1 = 0x00;   //IO口中断模式设置为下降沿
      P3INTE = 0x08;//P33口中断使能
}
是因为P33和P47的初始状态不确定吗?

ercircle 发表于 2025-4-18 16:14:02

cbai 发表于 2025-4-18 16:08
我想问一下老师,P33和P47配置为下降沿触发中断,为什么没有效果?
void P3_IO_Init(void){   //P3口中断 ...

仅靠这三行代码可不够,还要配置P3P4 IO寄存器,P4中断寄存器。以及中断响应函数。多翻翻手册,这些手册里都有例程。



cbai 发表于 2025-4-18 17:02:27

ercircle 发表于 2025-4-18 16:14
仅靠这三行代码可不够,还要配置P3P4 IO寄存器,P4中断寄存器。以及中断响应函数。多翻翻手册,这些手册 ...

都配置了的,只是没有贴出完整的代码,想问的是
void P3_IO_Init(void){   //P3口中断初始化
      P3IM0 = 0x00;
      P3IM1 = 0x00;   //IO口中断模式设置为下降沿
      P3INTE = 0x08;//P33口中断使能
}
配置下降沿数码管没反应,但是配置下面
void P3_IO_Init(void){   //P3口中断初始化
      P3IM0 = 0x00;
      P3IM1 = 0xff;   //IO口中断模式设置为低电平
      P3INTE = 0x08;//P33口中断使能
}
就有效果,想问一下前面那种下降沿中断为什么没有效果?

ercircle 发表于 2025-4-18 17:17:08

cbai 发表于 2025-4-18 17:02
都配置了的,只是没有贴出完整的代码,想问的是
void P3_IO_Init(void){   //P3口中断初始化
      P3I ...

这种问题直接上传工程

ercircle 发表于 2025-4-18 17:26:31

cbai 发表于 2025-4-18 17:02
都配置了的,只是没有贴出完整的代码,想问的是
void P3_IO_Init(void){   //P3口中断初始化
      P3I ...

我拿这个例程在擎天柱上测试是有效的噢

#include "Ai8051U.H"
#include "def.H"
void main(void) {
       
        WTST = 0;
        EAXSFR();
        CKCON = 0;

        P2M0 = 0;
        P2M1 = 0;
       
        P3M0 = 0;
        P3M1 = 0;
        P3IM0 = 0;
        P3IM1 = 0;
        P3INTE = 0x08;
       
        P2 = 0x0F;
        EA = 1;
        while (1) {
        }
}

void P3_ISR() interrupt P3INT_VECTOR{
        u8 intf ;
        intf = P3INTF;
        if(intf ){
                P3INTF = 0;
                if(intf & 0x08){
                        P2 = ~P2;
                }
        }
}

页: 1 [2]
查看完整版本: 按键点灯问题