大家好、我已经花了2周时间进行三次测试、以8位模式将我的 launchpad 连接到 LCD 16x2 (我也尝试了4位、但我认为在8位模式下应该更容易)、 我迷路了,我尝试改变一切,再次,阅读有关这方面的论坛,找不到任何解决方案:/
连接
D0-D7 --> B0-B7
E --> D0
RS --> D1
RW-->GND
我连接了对比度,因此我可以调节它。
我的代码(有一些与其他内容无关的内容):
#define target_in_blizzard_RA1
#include
#include "stdlib.h"
#include
//#include "inc/hw_ca.h"
//#include "inc/hw_ints.h"
//#include "driverlib/fpu.h"
//#include "driverlib/CAN.h"
//#include "grlib/grlib.h"
//#include "drivers/cfal96x64x16.h"
//#include "utils/uartstdio.h"
//#include "driverlib/interrupt.h"
//#define target_is_blizzard_RA1
#include
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
//#include "driverlib/rom.h"
//#include "driverlib/uart.h"
//#include "driverlib/adc.h"
//#include "utils/uartstdio.h"
//#include "driverlib/pin_map.h"
//#include //se utiliza para imprimir los valores uint32_t
#include "math.h"
//
//
//驱动程序库遇到错误时调用的错误例程。
//
//
#ifdef 调试
无效
_error__(char * pcFilename、uint32_t ui32Line)
{
}
#endif
//declarations
#define LCD_DATA GPIO_PORTB_BASE //LCD 数据端口至 PORTb
#define CTRL Porte //LCD 控制端口连接到 Porte
#define RS GPIO_PIN_1 //寄存器选择信号到 RE0
#define EN GPIO_PIN_2 //将信号发送到 RE2
//函数原型
void init_lcd (void);//函数初始化 LCD
void lcd_command (unsigned char cmd);//function to pass command to the LCD
void lcd_data (unsigned char data);//函数将字符写入 LCD
void lcd_write_string (char *str);//function to write string to the LCD
void msdelay (unsigned int time);//函数生成延迟
// Puertos 定义
#define perifericoData SYSCTL_Periph_GPIOB
#define writeData GPIO_PORTB_BASE
#define B0 GPIO_PIN_0
#define B1 GPIO_PIN_1
#define B2 GPIO_PIN_2
#define B3 GPIO_PIN_3
#define B4 GPIO_PIN_4
#define B5 GPIO_PIN_5
#define B6 GPIO_PIN_6
#define B7 GPIO_PIN_7
#define 数据引脚 B0|B1|B2|B3|B4|B5|B6|B7
#define perifericoControl SYSCTL_Periph_GPIOD
#define writeControl GPIO_PORTD_base
#define E GPIO_PIN_0
#define RS GPIO_PIN_1
#define controlPins E|RS
#define perifericoLed SYSCTL_Periph_GPIOF
#define writeLed GPIO_PORTF_BASE
#define LED1 GPIO_PIN_1
#define LED2 GPIO_PIN_2
#define LED3 GPIO_PIN_3
#define LED LED3|LED2|LED1
#define Cian 0x0C
#define azul 0x04
#define rojo 0x02
#define Verde 0x08
#define off 0x00
int delayms (int tiempo){
int resultado = 1000 *(tiempo /(0.0000625*1000));
返回结果 ado;
}
int delayus (int tiempo){
int resultado = 1000 *(tiempo /(0.0625*1000));
返回结果 ado;
}
//Start of Main Program
int main (空)
{
char var1[]="i";//declare message to be displayed
/*将时钟设置为以16MHz*/直接从晶体运行
SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);
/*设置 GPIO 端口 B y D 的时钟*/
SysCtlPeripheralEnable (perifericoControl);
SysCtlPeripheralEnable (perifericoData);
SysCtlPeripheralEnable (perifericoLed);
/*设置 GPIO 引脚的类型*/
SysCtlDelay (8000000);
GPIOPinTypeGPIOOutput (GPIO_PORTB_BASE、B0|B1|B2|B3|B4|B5|B6|B7);
GPIOPinTypeGPIOOutput (GPIO_PORTD_BASE、E|RS);
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、LED3|LED2|LED1);
SysCtlDelay (8000000);
init_lcd();//调用函数来初始化 LCD
SysCtlDelay (8000000);
/*
LCD_COMMAND (0xC0);//将光标初始化到第二行0b1100 0000
LCD_WRITE_string (var2);//在第二行显示消息
*
while (1){//此处循环
LCD_WRITE_string (var1);//在第一行显示消息
GPIOPinWrite (writeLed、LED3|LED2|LED1、azul);//LED Azul
SysCtlDelay (delayms (1000));
GPIOPinWrite (writeLed、LED3|LED2|LED1、off);//LED Azul
}
}//主页末尾
//函数定义
void msdelay (unsigned int time)//函数生成延迟
{
unsigned int i、j;
对于(I = 0;I <时间;I++)
对于(j = 0;j < 275;j++);//在 MPLAB 中针对1ms 的延迟进行校准
}
void init_LCD (void)//函数用于初始化 LCD
{
//16MHz -- 62.5ns
SysCtlDelay (8000000);// 550000 ciclos
GPIOPinWrite (writeControl、RS | E、0x00);//COLOCO RS Y E en 0 POR las dudas Rs = 0 para instructiones E = 1 cuando se comienza a escribir
//清除显示0b 0 0 0 0 0 0 0 0 1
//返回主页0b 0 0 0 0 0 0 0 1 x
//进入模式设置0b 0 0 0 0 0 1 I/D S I/D = 1 mueve el Cursor A la derecha S = 1 mueve el display
//显示开/关0b 0 0 0 1 D C B D 显示 C 光标 B 闪烁
//光标或显示位移0b 0 0 1 S/C R/L x S/C = 0 mueve Cursor R/L = 1 derecha
//函数设置0b 0 1 DL N F x DL = 1 - 8位模式 N = 1 - 2行显示 F = 1 - 5x11点
//首先
GPIOPinWrite (writeLed、LEDs、rojo);
LCD_COMMAND (0x3F);
GPIOPinWrite (writeLed、LED、off);
SysCtlDelay (delayms (5));
//秒
GPIOPinWrite (writeLed、LEDs、rojo);
LCD_COMMAND (0x3F);
GPIOPinWrite (writeLed、LED、off);
SysCtlDelay (delayus (110));
//第三
GPIOPinWrite (writeLed、LEDs、rojo);
LCD_COMMAND (0x3F);
GPIOPinWrite (writeLed、LED、off);
SysCtlDelay (delayus (110));
//四
GPIOPinWrite (writeLed、LEDs、rojo);
LCD_COMMAND (0x30);
GPIOPinWrite (writeLed、LED、off);
SysCtlDelay (delayms (2));
// FIVETH
GPIOPinWrite (writeLed、LEDs、rojo);
LCD_COMMAND (0x08);
GPIOPinWrite (writeLed、LED、off);
SysCtlDelay (delayms (2));
//six
GPIOPinWrite (writeLed、LEDs、rojo);
LCD_COMMAND (0x01);
GPIOPinWrite (writeLed、LED、off);
SysCtlDelay (delayms (2));
//Sevent
GPIOPinWrite (writeLed、LEDs、rojo);
LCD_COMMAND (0x06);
GPIOPinWrite (writeLed、LED、off);
SysCtlDelay (delayms (2));
光标上的第8个//第8个显示闪烁
GPIOPinWrite (writeLed、LEDs、rojo);
LCD_COMMAND (0x0F);
GPIOPinWrite (writeLed、LED、off);
SysCtlDelay (delayms (2));
}
void lcd_command (unsigned char cmd)//function to pass command to the LCD
{
GPIOPinWrite (writeData、B7|B6|B5|B4|B3|B2|B1|B0、cmd);
GPIOPinWrite (writeControl、RS | E、0x00);
SysCtlDelay (delayus (3));
GPIOPinWrite (writeControl、RS | E、0x01);//在 EN 上生成高到低脉冲
SysCtlDelay (delayus (3));
GPIOPinWrite (writeControl、RS | E、0x00);
SysCtlDelay (delayus (110));
}
void lcd_data (unsigned char data)//函数将数据写入 LCD
{
/*在端口 B*///在 LCD 数据总线上发送数据
GPIOPinWrite (writeControl、RS | E、0x02);//RS = 1、因为数据已写入 LCD
GPIOPinWrite (writeData、dataPins、data);
GPIOPinWrite (writeLed、LED3|LED2|LED1、Verde);//LED Verde
SysCtlDelay (delayus (3));
GPIOPinWrite (writeControl、RS | E、0x03);//RS = 1、因为数据已写入 LCD
SysCtlDelay (delayus (3));
GPIOPinWrite (writeControl、RS | E、0x02);
GPIOPinWrite (writeLed、LED3|LED2|LED1、0x00);//LED
SysCtlDelay (delayus (110));
}
//将字符串写入 LCD 的函数
void lcd_write_string (char *str)
{
int i = 0;
while (str[i]!= 0)
{
LCD_DATA (str[i]);//逐字节发送 LCD 上的数据
SysCtlDelay (8000000);
i++;
}
}