This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP432P401R:需要代码帮助! 需要对 MSP 进行编码以输出在 CCS 中按下的数字

Guru**** 2589265 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/626500/ccs-msp432p401r-need-help-with-code-need-to-code-the-msp-to-output-the-number-pressed-in-ccs

器件型号:MSP432P401R

工具/软件:Code Composer Studio

大家好、我需要一些帮助。 我有一个书面的代码图、我需要它才能正常工作、但它不起作用。 (它在我的合作伙伴计算机上,因此我目前无法开机自检。  

我需要代码才能输出您在键盘上按的按键 、键盘上的按键为0到9、带*和#。 那么、3x4。  

输出只需显示在 CCS 中、我无法确定它。 我们还需要一个开关反弹、因此如果我们按下多个键、我们不会炸板。 谢谢  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们不想为您做家庭作业。 您需要向我们展示一些代码。

    这是什么类型的键盘? 您是否只是在 GPIO 端口上使用开关? "去抖"并不是为了防止电路损坏、而是为了防止计算机在您只按一次按钮时看到多次按压。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是我们到目前为止拥有的代码、它不起作用。  
    #include "msp.h"
    #include
    #include
    uint8_t num;//全局变量
    //原型
    void pad_init (void);//用于 GPIO 初始化的原型
    uint8_t read_Keypad (void);
    uint8_t keypad_getkey (void);//键盘扫描子例程的原型
     void Print_Keys (void);
    void main (void){
      WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD;//秒表看门狗计时器
      //在此处插入说明
      uint8_t pressed;//从键盘扫描例程返回的存储值
      用于键盘连接的 keypad_init();//初始化 GPIO 引脚
      while (1)
      {
        按下= Read_Keypad ();//调用函数读取键盘
        如果(按下)
          print_Keys ();
       _delay_cycles (30000);//每次通过循环时延迟10ms、然后再读取键盘
      }
    void keypad_init (void)
      P4SEL0 &=~0xFF;
      P4SEL1 &=~0xFF;
      //将键盘行0设置为 P4.0行1设置为 P4.1,将行2设置为 P4.2,将行3设置为 P4.3
      P4->DIR &=~(BIT0| BIT1 | BIT2 | BIT3);
      //在所有行 P4.0、P4.1、P4.2、P4.3上启用拉电阻器
      P4REN |=(BIT0 | BIT1 | BIT2 | BIT3);
      //使用上拉行 P4.0、P4.1、P4.2、P4.3配置行
      P4OUT |=(BIT0 | BIT1 | BIT2 | BIT3);
      //将键盘列设置为输入 P4.6 Col_1 P4.5和键盘 Col_0 P4.4
      P4DIR &=~(BIT4 | BIT5| BIT6);
    uint8_t Read_Keypad (空)
      uint8_t col、row;
      for (col=0;col<3;col++)
      {
        P4DIR = 0x00;//将列设置为输入
        P4DIR |=位(4 + col);//将第3列设置为输出
        P4OUT &=~位(4 + COL);//将第3列设置为低电平
        _delay_cycles (10);//延迟 while 循环
        行= P4IN & 0x0F;//读取所有行
        while (!(P4IN 和 BIT0)||!(P4IN 和 BIT1)||!(P4IN 和 BIT2)||!(P4IN 和 BIT3);
        {if (row!= 0x0F)
          中断;
        }
      }//用于环路闭合支架
      P4DIR = 0x00;//将列设置为输入
      如果(col =3)返回0;
      如果(row=0x0E) num = col+1;//行0中的键
      如果(row =0x0D) num =3 + col +1;//在第1行中按键
      如果(row =0x0b) num =6 + col +1;//行中的关键字
      如果(row=0x07) num = 9 + col+ 1;
      返回1;
    void Print_Keys (空)
      printf ("您按下");//输出正确的值
      if (num =12) printf ("#\n");
      if (num =11) printf ("0\n");
      if (num =10) printf ("*\n");
      if (num < 10) printf ("%d\n"、num);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    什么不起作用? 它的作用是什么?

    在 return 1行放置断点、然后按按钮。 它会损坏吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    哦、请使用电路板的代码插入工具、这样语法就会变色、如下所示:

    while (!(P4IN 和 BIT0)||!(P4IN 和 BIT1)||!(P4IN 和 BIT2)||!(P4IN 和 BIT3);
    
    {if (row!= 0x0F)
    
    中断;
    
    
    } 

    //请注意,在 while 条件之后可能不需要额外的分号。