This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我看28335的例程里面只配置了12864的控制引脚,为什么没有配置并行数据输出引脚?还有LCD12864的数据引脚应该和DSP的哪些引脚相连呢?
//###########################################################################
//
// 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上显示出来,该怎么实现呢