参考了网上的一些方法,内部GPIO口每个板子的出厂配置不一样,需要自己调整。其他都是ok的。
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
/***************全局变量定义****************/
#define uchar unsigned char
/****************端口宏定义*****************/
#define RS GpioDataRegs.GPADAT.bit.GPIO0
//#define RW GpioDataRegs.GPADAT.bit.GPIO2
#define EN GpioDataRegs.GPADAT.bit.GPIO1
#define DB GpioDataRegs.GPADAT.all
// 使用前,声明本文件中的相关函数
void Init_Port(void); //端口初始化
void LCD_init(void); //初始化函数
void LCD_write_command(uchar command); //写指令函数
void LCD_write_data(uchar dat); //写数据函数
void LCD12864SetAddress_f( uchar x, uchar y ); //地址转换
void show(uchar x,uchar y,uchar *pData); //用于显示的子函数
void main(void)
{
InitSysCtrl(); //dsp初始化配置
Init_Port();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
LCD_init(); //12864初始化
show( 0,0, "我爱你中国!"); //在12864的第1行第1列显示
show( 2,1, "我在江苏") ; //在12864的第2行第3列显示
show( 0,2, "*F28335LCD12864*") ; //在12864的第3行第1列显示
show( 0,3, "1111111111111111"); //在12864的第4行第1列显示
while(1);
}
/*------------------------------------------*/
/*形式参数:void */
/*返回值:void */
/*函数描述:初始化gpio端口 */
/*------------------------------------------*/
void Init_Port(void)
{
EALLOW;
// 用户根据需要可以使能内部上拉或禁止.
// 其他不需要的行注释掉;
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; // 使能GPIO1 引脚内部上拉
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 1; // 禁止GPIO3 引脚内部上拉
/* 通过I/O功能选择寄存器配置通用I/O功能*/
GpioCtrlRegs.GPAMUX1.all = 0x000000; // 配置GPIO0-GPIO15为通用I/O口
/* 设置I/O口为输入引脚*/
GpioCtrlRegs.GPADIR.all = 0x00FFF;// 配置GPIO1-GPIO11为输出引脚
// 每个输入口可以有不同的输入限定
// a) 输入与系统时钟 SYSCLKOUT同步
// b) 输入被指定的采样窗口限定
// c) 输入异步 (仅对外设输入有效)
GpioCtrlRegs.GPAQSEL1.all = 0x0000; // GPIO0-GPIO15与系统时钟SYSCLKOUT 同步
//输出数据LCD_RS置1和LCD_EN清零
GpioDataRegs.GPADAT.bit.GPIO0 = 1;
GpioDataRegs.GPADAT.bit.GPIO1 = 0;
EDIS;
}
/*--------------------------------------
;模块名称:LCD_write_command();
;功 能:LCD12864写指令函数
;参数说明:command为写命令参数
;-------------------------------------*/
void LCD_write_command(uchar command)
{
RS=0; //指令
EN=1; //允许
DB=(command<<2)|0x0002;//赋值给D0-D7对应的GPIO4-GPIO11引脚
DELAY_US(10000);
EN=0;
DELAY_US(100);
}
/*--------------------------------------
;模块名称:LCD_write_data();
;功 能:LCD12864写数据函数
;占用资源: P2.0--RS(LCD_RS),P2.1--RW(LCD_RW),P2.2--E(LCD_E).
;参数说明:dat为写数据参数
;-------------------------------------*/
void LCD_write_data(uchar dat)
{
RS=1; //指令
EN=1; //允许
DB=(dat<<2)|0x0003;//赋值给D0-D7对应的GPIO4-GPIO11引脚
DELAY_US(10000);
EN=0;
DELAY_US(100);
}
/*--------------------------------------
;模块名称:LCD_init();
;功 能:初始化LCD12864
;占用资源:--
;参数说明:--
;-------------------------------------*/
void LCD_init(void)
{
DELAY_US(100000);//延迟100ms
LCD_write_command(0x30);//功能设置
DELAY_US(200);//延迟200us
LCD_write_command(0x30);//功能设置
DELAY_US(200);//延迟200us
LCD_write_command(0x0c);//显示开关控制
DELAY_US(200);//延迟200us
LCD_write_command(0x01);//显示清除
DELAY_US(12000);//延迟12ms
LCD_write_command(0x06);//显示清除
DELAY_US(500);//延迟500us
}
void LCD12864SetAddress_f( uchar x, uchar y ) //地址转换
{
unsigned char byAddress;
switch( y )
{
case 0 :
byAddress = 0x80 + x;
break;
case 1 :
byAddress = 0x90 + x;
break;
case 2 :
byAddress = 0x88 + x;
break;
case 3 :
byAddress = 0x98 + x;
break;
default :
break;
}
LCD_write_command( byAddress ) ;
}
void show(uchar x,uchar y,uchar *pData)
{
LCD12864SetAddress_f( x, y ); //地址转换
while( *pData != '