[PIC®/AVR®/dsPIC®产品] 【4月晒板卡】+PIC16F18446开发板按键问题

[复制链接]
 楼主| hu9jj 发表于 2019-5-31 14:30 | 显示全部楼层 |阅读模式
本帖最后由 hu9jj 于 2019-5-31 14:31 编辑

    点亮LED灯之后就着手测试开发板上的用户按键,此按键被连接在RC2引脚上,按照用户手册的说明,先将RC2设置为输入,同时设置为弱上拉,然后在主循环中轮询按键状态。在我的测试中,设置了一个变量i,计划每按一次按键,i值加1,超过4则恢复为0,然后根据 i 不同的值对应不同的延时,达到改变LED灯闪烁频率的效果。程序代码如下:
  1. void main(void)
  2. {
  3.     uint8_t i, j;
  4.     /* initialize the device */
  5.     SYSTEM_Initialize();

  6.     /* Enable the Global Interrupts */
  7. //    INTERRUPT_GlobalInterruptEnable();

  8.     /* Enable the Peripheral Interrupts */
  9. //    INTERRUPT_PeripheralInterruptEnable();

  10. //    APP_init();
  11.     TRISA = 0xFB;    //设置RA2为输出
  12.     PORTA = 0xFF;    //端口置‘1’
  13.     TRISC = 0x04;    //设置RC2为输入
  14.     PORTC = 0xFF;    //端口置‘1’
  15.     WPUC  = 0xFF;
  16. //    WPUC2 = 1;     //设置RC2为弱上拉
  17.    
  18.     while (1)
  19.     {
  20.         if(RC2==0)
  21.         {
  22.             i++;
  23.             if(i>4)
  24.                 i = 0;
  25.         }
  26.         RA2 = 0;
  27.         switch (i){
  28.             case 1:__delay_ms(100);break;
  29.             case 2:__delay_ms(200);break;
  30.             case 3:__delay_ms(500);break;
  31.             case 4:__delay_ms(1000);break;
  32.             case 5:__delay_ms(2000);
  33.         }
  34.         
  35.         RA2 = 1;
  36.         switch (i){
  37.             case 1:__delay_ms(100);break;
  38.             case 2:__delay_ms(200);break;
  39.             case 3:__delay_ms(500);break;
  40.             case 4:__delay_ms(1000);break;
  41.             case 5:__delay_ms(2000);
  42.         }
  43.         
  44.     }
  45. }
   以下是用户手册上的截图:




    但在测试时却不顺利,RC2的值一直为低电平,貌似弱上拉没有被设置好,但我反复查看用户手册和数据手册却找不到问题所在,又找不到示例代码作参考,只好在此求助各位,请帮忙看看是什么原因,谢谢!
    下面是数据手册中相关的说明:







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
CoolSilicon 发表于 2019-5-31 15:23 | 显示全部楼层
RC2默认是复用位模拟口的, 你作为按键数字口用, 需要初始化它位数字口才行..ANSELC寄存器.

说实话, 你用MCC生成代码, IO口也可以自己初始化的, 你检查一下MCC配置, pin 那啥那一项里面, 应该是你没注意到的.


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评论

感谢指教,设置了ANSEL之后就能检测到按键了。  发表于 2019-5-31 16:38
phosphate 发表于 2019-5-31 15:43 | 显示全部楼层
需要初始化相关寄存器
 楼主| hu9jj 发表于 2019-5-31 15:59 | 显示全部楼层
CoolSilicon 发表于 2019-5-31 15:23
RC2默认是复用位模拟口的, 你作为按键数字口用, 需要初始化它位数字口才行..ANSELC寄存器.

说实话, 你用MC ...

谢谢指教!我用的是官网下载的一个例子,还不会用MCC配置代码。
我再设置一下看看。
 楼主| hu9jj 发表于 2019-5-31 16:29 | 显示全部楼层
加了一句
    ANSELC = 0;
就可以了,测试通过后的代码如下:

  1. void main(void)
  2. {
  3.     uint8_t i, j;
  4.     /* initialize the device */
  5.     SYSTEM_Initialize();

  6.     /* Enable the Global Interrupts */
  7. //    INTERRUPT_GlobalInterruptEnable();

  8.     /* Enable the Peripheral Interrupts */
  9. //    INTERRUPT_PeripheralInterruptEnable();

  10. //    APP_init();
  11.     TRISA = 0xFB;    //??RA2???
  12.     PORTA = 0xFF;    //????1?
  13.     ANSELC = 0;
  14.     TRISC = 0x04;    //??RC2???
  15. //    PORTC = 0xFF;    //????1?
  16.     WPUC  = 0xFF;
  17. //    WPUC2 = 1;     //??RC2????
  18.    
  19.     while (1)
  20.     {
  21.         if(RC2==0)
  22.         {
  23.             i++;
  24.             if(i>4)
  25.                 i = 0;
  26.         }
  27.         RA2 = 0;
  28.         switch (i){
  29.             case 1:__delay_ms(100);break;
  30.             case 2:__delay_ms(200);break;
  31.             case 3:__delay_ms(500);break;
  32.             case 4:__delay_ms(1000);break;
  33.             case 5:__delay_ms(2000);
  34.         }
  35.         
  36.         RA2 = 1;
  37.         switch (i){
  38.             case 1:__delay_ms(100);break;
  39.             case 2:__delay_ms(200);break;
  40.             case 3:__delay_ms(500);break;
  41.             case 4:__delay_ms(1000);break;
  42.             case 5:__delay_ms(2000);
  43.         }
  44.         
  45.     }
  46. }
奔波儿熊 发表于 2019-5-31 16:59 | 显示全部楼层
恭喜楼主解决问题,顺带说一句万恶的欧洲人.
 楼主| hu9jj 发表于 2019-5-31 17:50 | 显示全部楼层
难者不会,会者不难。刚开始学PIC单片机,英文又不行,困难总是有的。不急,慢慢啃,啃不下来就发帖请教。
yiy 发表于 2019-5-31 19:33 | 显示全部楼层
按下是低电平。
yiy 发表于 2019-5-31 19:34 | 显示全部楼层
那默认是拉高了?有上拉电阻?
 楼主| hu9jj 发表于 2019-5-31 19:37 | 显示全部楼层
yiy 发表于 2019-5-31 19:34
那默认是拉高了?有上拉电阻?

是设置引脚弱上拉,开发板上没有外接上拉电阻。
yiy 发表于 2019-5-31 19:49 | 显示全部楼层
hu9jj 发表于 2019-5-31 19:37
是设置引脚弱上拉,开发板上没有外接上拉电阻。

嗯,说明这个芯片还带内部上拉电阻啊,挺好的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:Microchip
简介:让我们来为您提供帮助。我们可提供各种资源来帮助您解决一切问题。是否需要与我们的客户支持团队联系?您可以通过电话、在线聊天功能或电子邮件与他们联系。

151

主题

1063

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部