DSP

DSP28335驱动LCD12864显示源码II(带注释及运行显示)

2019-07-13 15:24发布

显示的行列指令与笔者之前一篇博客里的方法有区别,但大同小异,这里直接将行列指出,并显示内容。端口可以根据硬件自检配置。#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 *pData); //显示子函数 uchar str[]={"我爱你中国"}; //显示的内容 void main(void) { InitSysCtrl(); //dsp初始化配置 Init_Port(); DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); LCD_init(); //lcd初始化 LCD_write_command(0x80); //用于在第1行第1列显示 DELAY_US(10); show(str); DELAY_US(10); LCD_write_command(0x91); //用于在第2行第2列显示 DELAY_US(10); show(str); DELAY_US(10); LCD_write_command(0x88+2); //用于在第3行第3列显示 DELAY_US(10); show(str); DELAY_US(10); LCD_write_command(0x98+3); //用于在第4行第4列显示 DELAY_US(10); show(str); 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(); ;功 能:初始化LCD1602 ;占用资源:-- ;参数说明:-- ;-------------------------------------*/ 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 show(uchar *pData) { while( *pData != '