“我正在尝试使用按钮,当它被按下时,它会触发通过UART发送字符串消息,但是在运行代码时,它总是检测到该按钮“一直被按下”,这并不理想。我需要修复代码的帮助。 非常感谢。
我正在使用EasyPIC Fusion v7。该设备为P32MX795F512L @ 80MHz。我将用于PIC32的MikroC pro作为我的IDE。”
“按钮和UART库用于此代码。”
char read;
unsigned int oldstate;
void main() {
AD1PCFG = 0XFFFF; //SETTING AN INPUTS AS DIGITAL I/O
JTAGEN_bit = 0; //disable JTAG
UART2_Init(9600);
Delay_ms(1000);
TRISA = 1; //setting All portA as inputs
UART_Set_Active(&UART2_Read, &UART2_Write, &UART2_Data_Ready, &UART2_Tx_Idle); //Sets UART2 as active
UART_Write_Text("UART is now ready.");
UART_Write(13);
UART_Write(10);
while(1)
{
if (Button(&PORTA, 15, 1 ,1)) //detect if button is pressed
{
UART_Write_Text("Button is pressed.");
UART_Write(13);
UART_Write(10);
oldstate = 1;
}
if (oldstate && Button(&PORTA, 15, 1, 0)) //detect from logic 1 to 0
{
UART_Write_Text("Button is pressed again.");
UART_Write(13);
UART_Write(10);
oldstate = 0;
}
}
}
“我只了解了UART的工作方式以及Button库的工作方式。
我希望在第一次按下按钮时输出为“按下按钮”,然后在再次按下同一按钮时输出为“再次按下按钮”。
代码的输出始终为“按下按钮”并连续打印”
答案 0 :(得分:0)
您的代码的主要问题是该行:
UART_Write_Text("Button is pressed again.");
实际上应该读为:
UART_Write_Text("Button is RELEASED.");
除此之外,如果不通过下拉电阻将RA15引脚连接到GND,则可能会遇到硬件问题。您也可以在PIC上使用internal pull-ups。
答案 1 :(得分:0)
问题在这里:
TRISA = 1;
这与TRISA = 0x0001;
类似,只会将端口A0用作输入。你必须写:
TRISA = 0xFFFF;`