找回密码
 立即注册
楼主: cbai

按键点灯问题

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2025-04-29 15:31:16
已绑定手机

4

主题

37

回帖

154

积分

注册会员

积分
154
发表于 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是否正确?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2025-04-29 15:31:16
已绑定手机

4

主题

37

回帖

154

积分

注册会员

积分
154
发表于 2025-4-18 15:30:25 | 显示全部楼层
cb*** 发表于 2025-4-8 14:22
// 课后任务2:按一下亮一颗灯,再按一下亮两颗灯,直到全亮(变量+加法和乘法)
               
                if(P32 == 0){

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

点评

嗯,低电平中断,以手册为准 [attachimg]94439[/attachimg]  详情 回复 发表于 2025-4-18 15:40
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-4-18 15:40:24 | 显示全部楼层
cb*** 发表于 2025-4-18 15:30
请问一下大佬能解答一下我的疑问吗:
按照老师在第十四课中的例子
void P3_IO_Init(void){   //P3口中断 ...


嗯,低电平中断,以手册为准
截图202504181539422945.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2025-04-29 15:31:16
已绑定手机

4

主题

37

回帖

154

积分

注册会员

积分
154
发表于 2025-4-18 16:08:22 | 显示全部楼层
erci*** 发表于 2025-4-18 15:40
嗯,低电平中断,以手册为准

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

点评

仅靠这三行代码可不够,还要配置P3P4 IO寄存器,P4中断寄存器。以及中断响应函数。多翻翻手册,这些手册里都有例程。 [attachimg]94459[/attachimg] [attachimg]94460[/attachimg]  详情 回复 发表于 2025-4-18 16:14
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-4-18 16:14:02 | 显示全部楼层
cb*** 发表于 2025-4-18 16:08
我想问一下老师,P33和P47配置为下降沿触发中断,为什么没有效果?
void P3_IO_Init(void){   //P3口中断 ...

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

截图202504181612273256.jpg
截图202504181613372407.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2025-04-29 15:31:16
已绑定手机

4

主题

37

回帖

154

积分

注册会员

积分
154
发表于 2025-4-18 17:02:27 | 显示全部楼层
erci*** 发表于 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口中断使能
}
就有效果,想问一下前面那种下降沿中断为什么没有效果?

点评

我拿这个例程在擎天柱上测试是有效的噢  详情 回复 发表于 2025-4-18 17:26
这种问题直接上传工程  详情 回复 发表于 2025-4-18 17:17
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-4-18 17:17:08 | 显示全部楼层
cb*** 发表于 2025-4-18 17:02
都配置了的,只是没有贴出完整的代码,想问的是
void P3_IO_Init(void){   //P3口中断初始化
        P3I ...

这种问题直接上传工程
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-4-18 17:26:31 | 显示全部楼层
cb*** 发表于 2025-4-18 17:02
都配置了的,只是没有贴出完整的代码,想问的是
void P3_IO_Init(void){   //P3口中断初始化
        P3I ...

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

  1. #include "Ai8051U.H"
  2. #include "def.H"
  3. void main(void) {
  4.        
  5.         WTST = 0;
  6.         EAXSFR();
  7.         CKCON = 0;
  8.         P2M0 = 0;
  9.         P2M1 = 0;
  10.        
  11.         P3M0 = 0;
  12.         P3M1 = 0;
  13.         P3IM0 = 0;
  14.         P3IM1 = 0;
  15.         P3INTE = 0x08;
  16.        
  17.         P2 = 0x0F;
  18.         EA = 1;
  19.         while (1) {
  20.         }
  21. }
  22. void P3_ISR() interrupt P3INT_VECTOR{
  23.         u8 intf ;
  24.         intf = P3INTF;
  25.         if(intf ){
  26.                 P3INTF = 0;
  27.                 if(intf & 0x08){
  28.                         P2 = ~P2;
  29.                 }
  30.         }
  31. }
复制代码


三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 23:13 , Processed in 0.128352 second(s), 104 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表