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/MSP430G2231:P1.3按钮不工作

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/919261/ccs-msp430g2231-p1-3-button-not-working

器件型号:MSP430G2231
主题中讨论的其他器件:MSP-EXP430G2

工具/软件:Code Composer Studio

大家好、我有关于 MSP430板的问题。 我正在使用频率计(它正在工作)、 但是我想用按钮 P1.3来切换 LCD 上的输入、但是有一个问题、我尝试激活 P1.3上拉电阻器、如果没有它、LCD 在一个 switch 语句中在两个状态之间来回切换。

静态无符号 clock_input = 0; //TBC
void set_input (void)
{
lcd_init ();
// const unsigned char z = 0;
switch (clock_input){
默认值:
Clock_input = 0;
情况0:
TACTL = TASSEL_2;

中断;
案例1:
TACTL = tassel_1;

中断;
}
} 

这是 switch 语句

if (!(P1IN&BIT3){
Clock_input++;
set_input();

这就是我要在 tassel_1和 tassel_2之间切换的方式。

我会向您展示图片

很抱歉、这一个的质量很高、但这里的 LCD 显示内部频率没有问题、但它不断地从 tassel_2 (1MHz)在32kHz 和1MHz 频率之间切换。

我认为问题是上拉电阻没有定义、它在两个语句之间切换。

但是、当我插入上拉代码时  

P1OUT |= BIT3;
P1REN |= BIT3;

代码会失去主意、随机符号开始出现、只需添加 P1REN 行即可。 我想知道这一点已经有几个小时了,我真的不知道问题是什么。

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

    从显而易见的方面开始:您是否有任何其他东西连接到 P1.3?

    您是否正在使用其中一个 LaunchPad? G2ET 和(旧版) G2 Launchpad 的某些修订版在 P1.3上有一个外部上拉电阻(G2ET 上有47k)。

    您何时检查 P1IN、尤其是检查频率?

    由于您正在谈论物理按钮、因此请注意开关抖动。

    更多的背景信息--更多的代码,也许还有一个原理图--可以提供更好的猜测。

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

    嗯、我有一个 LCD 引脚连接到 P1.3、但我将其移动到了1.7、仍然是同样的问题。 关于原理图、它只是 MSP-exp430g2板

    #define DR P1OUT = P1OUT | BIT4 //定义 RS 高
    电平#define CWR P1OUT = P1OUT &(~BIT4) //定义 RS 低
    电平#define 读取 P1OUT = P1OUT | BIT5 //定义读取信号 R/W = 1用于读取
    #define WRITE P1OUT = P1OUT &(~BIT4)//定义写入信号 R/W = 0用于写入
    #define ENABLE_HIGH P1OUT = P1OUT | BIT6 //定义使能高电平信号
    #define ENABLE_LOW P1OUT = P1OUT &(~BIT6)/定义
    
    使能低电平信号 data_write (void)
    {
    enable_high;
    delay (2);
    enable_low;
    }
    
    void data_read (void)
    {
    enable_low;
    delay (2);
    enable_high;
    }
    
    void check_busy (void)
    {
    P1DIR &=~(BIT3);//将 P1.3作为输入
    
    while ((P1IN&BIT3)=
    void;
    
    
    
    
    
    }p1DIR (while)= 1);tend (void data (tend);//将 P1.3作为输出;void (p1.3);// make p1.3作为输入 while (p1);tend);// cwid data (p1);tend
    
    
    
    
    P1OUT =(P1OUT & 0xF0)|((CMM>>4)& 0x0F);//发送更高半字节
    DATA_WRITE ();//提供启用触发
    器 P1OUT =(P1OUT & 0xF0)|(cmd & 0x0F);//发送更低半字节
    DATA_WRITE ();//提供启用
    触发器 P1OUT =(P1OUT & 0xF0);
    
    
    (0xF0)无符号
    
    
    
    数据触发器(0xF0);//发送数据检查触发器(0xF0);//(void data trigger + 0xF0)(void)(0xF0);//发送(void data + 0xF0 //发送更高的半字节
    DATA_WRITE ();//提供启用触发
    器 P1OUT =(P1OUT & 0xF0)|(DATA & 0x0F);//发送更低半字节
    DATA_WRITE ();//提供启用触发
    器}
    
    void SEND_string (char *)
    {
    while (*)
    {
    send_data (s);
    s++
    
    
    
    (0x32
    
    
    );send 0xDIFF (0x32);
    
    
    命令0x33_INIT (p_COMMAND);}(0x32);命令0xDIFF (0x32) // 4位模式
    SEND_COMMAND (0x0E);//
    SEND_COMMAND (0x01);//光标位置
    SEND_COMMAND (0x06);//使光标
    SEND_COMMAND (0x80)递增;//第1行第
    1列} 

    这就是我向 LCD 发送数据的方式。

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

    > while((P1IN&BIT3)==1)

    由于 BIT3=8、这个条件总是为 false。 尝试如下操作:

    > while((P1IN&BIT3)==BIT3)

    表面上看、这只是绕过了繁忙的检查。 更令人不安的是、P1.3似乎大部分时间都用作输出、因为它是您的数据位之一。 这肯定会干扰您的按钮检查:

    > P1OUT = (P1OUT & 0xF0)|(cmd & 0x0F); // send lower nibble

    这是您移动到 P1.7的器件吗?

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

    我今天试过、但它不能正常工作。 问题是、我需要一个第二输入作为频率、如果我必须为按钮专用 P1.3、我就会全部从引脚上输出。 我必须放弃整个按钮的想法或获取不同的控制器。 我不认为可以用 RST 引脚按钮来实现它,因为它不是 GPIO :/

    此外、有人可以向我推荐一些关于位操作的详细信息、因为我觉得当我尝试更改位操作时、这就是问题不起作用的原因。

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

    "最近"(5年?) G2 Launchpad 附带(我记得) G2231和 G2553。 你两者都得到了吗?

    我在其中一个 LCD 上工作已经有一段时间了、但我认为 R/W 引脚的唯一用途是忙时检查。 如果您使用延迟(根据书中的内容)、则可以避免显式占线检查并获得 P1.5。 我还记得、我使用的(便宜的) LCD 板甚至没有提供 R/W 访问权限、因此我很确定它是可以执行的。

    最近、我注意到亚马逊上一些16x2 LCD 设备与 I2C->GPIO"背包"板一起销售。 这会将引脚要求 从7降低到2 (以牺牲一些编码为代价)。 它们非常便宜、但我不知道运输需要多长时间。  

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

    感谢您提供有关繁忙检查的提示。 我使用 g2231、是的、该背包或 GPIO 扩展器可能可以正常工作、但这不是我自己的大学项目、因此我没有太多时间等待它们。 我基本上需要一个按钮、因为我需要同时显示频率和周期、并且由于它们需要不同的计时器设置、我想如果我可以使用按钮进行切换、会更容易。

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

    如果您仍然有 Launchpad 的盒子、我建议您向下挖到底、看看那里是否有 G2553。 G2553具有更多的引脚、通常比 G2231功能强大得多、但功能重叠足够、因此移植起来不太困难。