【发布时间】:2020-10-03 20:04:02
【问题描述】:
我正在使用带有 MSP430G2231 微控制器的 MSP-EXP430G2 板,并且我试图在按下按钮时使我的代码切换字符串。这是连接到BIT3。
它像这样连接到液晶显示器:
Connections
P1.0 - D4 Pin11
P1.1 - D5 Pin12
P1.2 - D6 Pin13
P1.3 - D7 Pin14
P1.4 - RS Pin4
P1.5 - R/W Pin5
P1.6 - E Pin6
#define DR P1OUT = P1OUT | BIT4 // define RS high
#define CWR P1OUT = P1OUT & (~BIT4) // define RS low
#define READ P1OUT = P1OUT | BIT5 // define Read signal R/W = 1 for reading
#define WRITE P1OUT = P1OUT & (~BIT5) // define Write signal R/W = 0 for writing
#define ENABLE_HIGH P1OUT = P1OUT | BIT6 // define Enable high signal
#define ENABLE_LOW P1OUT = P1OUT & (~BIT6) // define Enable Low signal
void set_input(void) {
const unsigned char z = 0;
switch (clock_input) {
default:
clock_input = 0;
case 0:
lcd_init();
send_string("Frequency is");
send_command(0xC0);
break;
case 1:
lcd_init();
send_string("Period is");
send_command(0xC0);
break;
}
}
void main(void) {
WDTCTL = WDTPW + WDTHOLD; // stop watchdog timer
DCOCTL = 0;
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation
if (!(P1IN & BIT3)) { // Check if pushbutton down
++clock_input; // Switch clock input
set_input(); //
}
}
这是我的做法,也是我发送字符串的方式:
void send_string(char *s) {
while (*s) {
send_data(*s);
s++;
}
}
void send_command(unsigned char cmd) {
check_busy();
WRITE;
CWR;
P1OUT = (P1OUT & 0xF0) | ((cmd >> 4) & 0x0F); // send higher nibble
data_write(); // give enable trigger
P1OUT = (P1OUT & 0xF0) | (cmd & 0x0F); // send lower nibble
data_write(); // give enable trigger
}
void lcd_init(void) {
P1DIR |= 0xFF;
P1OUT &= 0x00;
send_command(0x33);
send_command(0x32);
send_command(0x28); // 4 bit mode
send_command(0x0E); // clear screen
send_command(0x01); // cursor position
send_command(0x06); // increment cursor
send_command(0x80);
}
问题是当我将代码放入main 并按下按钮时没有任何反应。当我把它放在一个循环中时,它只是来回切换。我不知道板上的 Pin 1.3(S2) 是否有干扰
使用按钮,因为它们具有相同的名称(P1.3)。
【问题讨论】:
-
按下按钮时观察调试器中的 GPIO 寄存器。如果他们不在那里切换,则与寄存器配置或硬件有关。并且请缩进你的代码,这是一团糟。