C# 与TM4C123G接口的扫描4x4键盘
我想用launchpad扫描4x4键盘。我试着用引脚D1、D2和A5作为输出引脚,引脚E1、E2和E3作为输入引脚(带上拉) 当我将C# 与TM4C123G接口的扫描4x4键盘,c#,embedded,C#,Embedded,我想用launchpad扫描4x4键盘。我试着用引脚D1、D2和A5作为输出引脚,引脚E1、E2和E3作为输入引脚(带上拉) 当我将0写入D1和1写入D2和A5时: GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1 |GPIO_PIN_2, 0x0D); GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_5, 0xFF); 我在LCD上得到正确的输出 使用其他值时,显示错误: GPIOPinWrite(GPIO_PORTD_BASE,
0
写入D1和1
写入D2和A5时:
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1 |GPIO_PIN_2, 0x0D);
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_5, 0xFF);
我在LCD上得到正确的输出
使用其他值时,显示错误:
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1 |GPIO_PIN_2, 0xFF);
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_5, 0x00);
我不明白问题出在哪里。有人能帮忙吗
我使用的是I2C内存,它使用的引脚A6和A7是在运行本程序时连接的
我的代码:
// project //
#include <stdint.h>
#include <stdbool.h>
#include "inc/tm4c123gh6pm.h"
//#include "inc/hw_i2c.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_gpio.h"
//#include "driverlib/i2c.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
//----------------------------------------
// Prototypes
//----------------------------------------
//----------------------------------------
// Prototypes
//----------------------------------------
void hardware_init(void);
//void ledToggle(void);
void delay(void);
void LCD_configuration();
void CMD_write(int val);
void data_write(char value1);
void scan_key();
char a= '0';
int valid_ID_flag=0;
void main(void)
{
int i=0;
char password[3];
char correct_msg[16]="password valid ";
char incorrect_msg[16]="password invalid";
hardware_init();
delay();
LCD_configuration();
delay();
CMD_write(0x01);
delay();
//name_display(count);
int p=0;
for(p=0;p<3;p++)
{
scan_key();
//delay();
password[p]=a;
}
delay();
CMD_write(0x01);
if (password == "321")
{
CMD_write(0x01);
delay();
for(i=0;i<16; i++)
{
data_write(correct_msg[i]);
delay();
}
}
else
{
CMD_write(0x01);
delay();
for(i=0;i<16; i++)
{
data_write(incorrect_msg[i]);
}
}
delay();
delay();
delay();
delay();
while(1)
{
}
}
void scan_key()
{
int flag=0;
while(flag==0)
{
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1 |GPIO_PIN_2, 0xFF);
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_5, 0x00);
if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_1) == 0 && valid_ID_flag==0)
{
delay();
if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_1) == 0)
{
flag=1;
//count=count+1;
}
a='4';
data_write(a);
}
if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_2) == 0 && valid_ID_flag==0)
{
delay();
while(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_2) == 0)
{
flag=1;
//count=count+1;
}
a='5';
data_write(a);
}
if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_3) == 0 && valid_ID_flag==0)
{
delay();
while(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_3) == 0)
{
flag=1;
//count=count+1;
}
a=6;
data_write(54);
}
}
}
void CMD_write(int val)
{
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4,0x00);
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0| GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,val);
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4,0x10);
delay();
}
void data_write(char value1)
{
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4,0x04);
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0| GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,value1);
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4,0x10);
delay();
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4,0x00);
}
// functions working with LCD
void LCD_configuration()
{
CMD_write(0x38);
CMD_write(0x0f);
CMD_write(0x06);
CMD_write(0x01);
// CMD_write(0x80);
}
//---------------------------------------------------------------------------
// hardware_init()
//
// inits GPIO pins for toggling the LED
//---------------------------------------------------------------------------
void hardware_init(void)
{
//int ui32Period_p;
//Set CPU Clock to 40MHz. 400MHz PLL/2 = 200 DIV 5 = 40MHz
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); //setup clock
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE,GPIO_PIN_0| GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
GPIOPinTypeGPIOInput(GPIO_PORTE_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
}
//---------------------------------------------------------------------------
// delay()
//
// Creates a 500ms delay via TivaWare fxn
//---------------------------------------------------------------------------
void delay(void)
{
SysCtlDelay(670000); // creates ~500ms delay - TivaWare fxn
}
//项目//
#包括
#包括
#包括“inc/tm4c123gh6pm.h”
//#包括“inc/hw_i2c.h”
#包括“inc/hw_memmap.h”
#包括“inc/hw_types.h”
#包括“inc/hw_gpio.h”
//#包括“driverlib/i2c.h”
#包括“driverlib/sysctl.h”
#包括“driverlib/gpio.h”
#包括“driverlib/pin_map.h”
//----------------------------------------
//原型
//----------------------------------------
//----------------------------------------
//原型
//----------------------------------------
无效硬件初始化(无效);
//无效(void);
无效延迟(void);
无效LCD_配置();
void CMD_write(int val);
无效数据写入(字符值1);
无效扫描键();
字符a='0';
int valid_ID_flag=0;
真空总管(真空)
{
int i=0;
字符密码[3];
char correct_msg[16]=“密码有效”;
字符错误\u消息[16]=“密码无效”;
硬件初始化();
延迟();
LCD_配置();
延迟();
CMD_write(0x01);
延迟();
//名称显示(计数);
int p=0;
对于(p=0;p我使用的是PD1和PB7..,它们在tiva c系列tm4c123g板中内部短路。因此不要同时使用两个引脚。请参阅网页:可能更适合电子产品。stackexchange.com1)如果你想要一个答案,请正确格式化文本,并将其简化为实际问题,删除所有不必要的代码。你可能还需要解释使用的不太明显的外部函数。