TI中文支持网
TI专业的中文技术问题搜集分享网站

DSP28335 与LCD12864通信

我看28335的例程里面只配置了12864的控制引脚,为什么没有配置并行数据输出引脚?还有LCD12864的数据引脚应该和DSP的哪些引脚相连呢?

Green Deng:你好,你说的例程具体在哪里方便说明一下吗?
连接方式建议你参考这款显示器的说明手册。我之前的项目经验,MCU是通过SPI与显示屏通讯的,但是中间好像还用了74HC595芯片串行转并行芯片转换。

我看28335的例程里面只配置了12864的控制引脚,为什么没有配置并行数据输出引脚?还有LCD12864的数据引脚应该和DSP的哪些引脚相连呢?

yongqing wang:你这个是第三方的例程吧?
12864LCD应该是支持iic或者SPI通信的,如果你要使用并行的8位数据管脚控制的话,这个只是普通的IO翻转,所以只要是GPIO都可以

我看28335的例程里面只配置了12864的控制引脚,为什么没有配置并行数据输出引脚?还有LCD12864的数据引脚应该和DSP的哪些引脚相连呢?

Shaochen Wang:

回复 Green Deng:

//###########################################################################//// FILE: lab7-LCD//// TITLE: LCD12864显示实验////// 根据在RAM中调试的需要,这个项目配置成"boot to SARAM".2833x引导模式// 表如下显示. 常用的还有"boot to Flash"模式,当程序在RAM调试完善后就// 可以将代码烧进Flash中并使用"boot to Flash"引导模式.//// $Boot_Table://// GPIO87 GPIO86 GPIO85 GPIO84// XA15 XA14 XA13 XA12 // PU PU PU PU// ==========================================// 1 1 1 1 Jump to Flash// 1 1 1 0 SCI-A boot// 1 1 0 1 SPI-A boot// 1 1 0 0 I2C-A boot// 1 0 1 1 eCAN-A boot// 1 0 1 0 McBSP-A boot// 1 0 0 1 Jump to XINTF x16// 1 0 0 0 Jump to XINTF x32// 0 1 1 1 Jump to OTP// 0 1 1 0 Parallel GPIO I/O boot// 0 1 0 1 Parallel XINTF boot// 0 1 0 0 Jump to SARAM <- "boot to SARAM"// 0 0 1 1 Branch to check boot mode// 0 0 1 0 Boot to flash, bypass ADC cal// 0 0 0 1 Boot to SARAM, bypass ADC cal// 0 0 0 0 Boot to SCI-A, bypass ADC cal// Boot_Table_End$//// 功能描述://// 程序编译下载成功后,运行程序时LCD12864显示数据//////###########################################################################// 释放日期: 2017.4.10//############################################################################include "DSP2833x_Device.h" // DSP2833x 头文件#include "DSP2833x_Examples.h" // DSP2833x 例子相关头文件#include"DSP2833x_Device.h"

/**************************************宏定义************************************************/#define LCD_DATA_BUS (*((volatile Uint16 *)0x4000)) //宏定义LCD的地址#define EN GpioDataRegs.GPBDAT.bit.GPIO54 //宏定义#define RW GpioDataRegs.GPBDAT.bit.GPIO56 //宏定义#define RS GpioDataRegs.GPBDAT.bit.GPIO57 //宏定义#define uchar unsigned char //宏定义/**********************************************************************************************/

/**************************************变量定义************************************************/extern uchar menu1[]={"选择电机定时设置"};extern uchar menu2[]={"开步进电机A"};extern uchar menu3[]={"开步进电机B"};extern uchar menu4[]={"开步进电机C"};/**********************************************************************************************/

/**************************************函数声明************************************************/void LCDInit(void); //LCD初始化void Write_order(Uint16 order); //LCD写函数void Write_data(Uint16 data); //LCD写函数void delay(Uint16 t); //延时函数void configio(void); //LCD控制脚的GPIO配置void InitXintf(void); //总线初始化void display(uchar *hz); //显示函数/**********************************************************************************************/

void LCD_DATA(uchar d) //把数据传给总线{ LCD_DATA_BUS = d; //把要显示的值赋给总线} void LCDInit(void) //LCD初始化{ DELAY_US(5000); Write_order(0x30);//功能设定:基本指令动作 DELAY_US(50); //延时 Write_order(0x0c);//显示状态:开 DELAY_US(50); //延时 Write_order(0x01);//清屏 DELAY_US(60); //延时 Write_order(0x02);//地址归位:AC=0x00 DELAY_US(40); //延时}

void Write_order(Uint16 order) //LCD12864写指令函数{ RS=0;delay(1); //指令 EN=1;delay(1); //允许 LCD_DATA(order); //赋值 EN=0;delay(1); //允许}

void Write_data(Uint16 data) //LCD12864写数据函数{ RS=1;delay(1); //指令 EN=1;delay(1); //允许 LCD_DATA(data); //赋值 EN=0;delay(1); //允许}void delay(Uint16 t) //延时函数{ Uint16 i; //定义变量 while(t–) //while循环 { for(i=0;i<500;i++);//FOR循环 }}

void configio(void) // LCD屏读写、使能和时钟GPIO配置{ EALLOW; GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 0; // GPIO复用为GPIO功能 GpioCtrlRegs.GPBDIR.bit.GPIO54 = 1; // GPIO设置为输出 GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 0; // GPIO复用为GPIO功能 GpioCtrlRegs.GPBDIR.bit.GPIO56 = 1; // GPIO设置为输出 GpioCtrlRegs.GPBMUX2.bit.GPIO57= 0; // GPIO复用为GPIO功能 GpioCtrlRegs.GPBDIR.bit.GPIO57 = 1; // GPIO设置为输出 EDIS;}

void display(uchar *hz) //显示函数{ while(*hz!='\0') //While循环 { Write_data(*hz); hz++; DELAY_US(250); //延时 }}

/****************************************主程序******************************************************/void main(void){// 初始化系统控制:// 设置PLL, WatchDog, 使能外设时钟// 下面这个函数可以从DSP2833x_SysCtrl.c文件中找到.. InitSysCtrl();// Xintf总线配置和初始化 InitXintf(); InitXintf16Gpio();// 清除所有中断初始化中断向量表:// 禁止CPU全局中断 DINT;// 初始化PIE中断向量表,并使其指向中断服务子程序(ISR)// 这些中断服务子程序被放在了DSP280x_DefaultIsr.c源文件中// 这个函数放在了DSP2833x_PieVect.c源文件里面. InitPieCtrl();// 禁止CPU中断和清除所有CPU中断标志 IER=0x0000; IFR=0x0000;// LCD屏读写、使能和时钟GPIO配置 configio();

RS=0; //初始化RS电平 delay(5); //延时 RW=0; //初始化RS电平 delay(5); //延时 EN=0; //初始化RS电平 LCDInit();//LCD初始化 delay(5); //延时 Write_order(0x80);//第一行数据指针地址 delay(5); //延时 display(menu1); //显示menu1的内容 Write_order(0x91);//第二行数据指针地址 delay(5); //延时 display(menu2); //显示menu2的内容 Write_order(0x89);//第三行数据指针地址 delay(5); //延时 display(menu3); //显示menu3的内容

Write_order(0x99);//第四行数据指针地址 delay(5); //延时 display(menu4); //显示menu4的内容

while(1); //While循环}

////===========================================================================// No more.//===========================================================================

这个是例程,从里面看不出来LCD的8根数据线怎么接。正好您做过项目问下您,是SPI的输出如果是16位数据,还需要通过运算变成浮点数,并在LCD上显示出来,该怎么实现呢

我看28335的例程里面只配置了12864的控制引脚,为什么没有配置并行数据输出引脚?还有LCD12864的数据引脚应该和DSP的哪些引脚相连呢?

Shaochen Wang:

回复 yongqing wang:

你好 请问如果是小数该怎么通过GPIO输出呢?要给每一个GPIO分别置位吗?

赞(0)
未经允许不得转载:TI中文支持网 » DSP28335 与LCD12864通信
分享到: 更多 (0)