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.

2812液晶显示问题



 我编的12864液晶显示程序无法在2812开发板上显示。开发板的液晶引脚接到开发板的CPLD模块。开发板给LCD分配的地址是0x2001,我不知道程序定义了#define  LCD_DATA (*((volatile  Uint16 *)0x2001))这句话之后还需要定义,液晶的8 个DB口的引脚吗?需要对12864的PSB引脚的工作模式进行定义吗?我的程序没有对PSB模式进行定义,而且开发板只是给地址,并没有给出LCD引脚具体链接到哪个GPIO口,所以我也不知道如何给PSB引脚进行赋值。我觉得我的程序问题应该出在GPIO的定义,和PSB引脚上。附件中有我的源程序,其中GPIO和LCD这两个源文件是我自己编写的。新手初学,麻烦请帮我看看,谢谢啦!

EX16_LCD.zip
  • 这个具体要结合你的CPLD里面的译码分析    

    个人觉得操作12864只有一个地址肯定是不够的   

    发送数据和命令肯定是分开的    所以至少要两个地址吧

    建议你先看看CPLD里面的译码逻辑和2812的映射

  • 开发板没有给出CPLD的译码逻辑,,只是直接给出了跟CPLD有关的器件的地址。

    开发板给的例子程序也无法显示。按照我对例程的理解,#define  LCD_DATA (*((volatile  Uint16 *)0x2001,这句话是给数据传送的,对于命令的,它另外有定义,就是

    #define EN GpioDataRegs.GPFDAT.bit.GPIOF2
    #define RW GpioDataRegs.GPFDAT.bit.GPIOF1
    #define RS GpioDataRegs.GPFDAT.bit.GPIOF0

    但是它又定义另外的8个IO口

    GpioMuxRegs.GPADIR.bit.GPIOA0=1; //输出
    GpioMuxRegs.GPADIR.bit.GPIOA1=1; //输出
    GpioMuxRegs.GPADIR.bit.GPIOA2=1; //输出
    GpioMuxRegs.GPADIR.bit.GPIOA3=1; //输出
    GpioMuxRegs.GPADIR.bit.GPIOA4=1; //输出
    GpioMuxRegs.GPADIR.bit.GPIOA5=1; //输出
    GpioMuxRegs.GPADIR.bit.GPIOA6=1; //输出
    GpioMuxRegs.GPADIR.bit.GPIOA7=1; //输出

    这8个IO口在后面的程序中都没有用到,我觉得这8个IO是不是多余的?

    是不是在程序中有了这句话: WriteCmd12864(FUN_MODE);  //FUN_MODE 0x30 工作模式:8位基本指令集,

    就是说明液晶选择的是并行工作模式,不用再给液晶的PSB引脚赋值了?在网上看其他的程序它们也没有对PSB进行赋值。

  • 开发板没有给出CPLD的译码逻辑,,只是直接给出了跟CPLD有关的器件的地址。

    开发板给的例子程序也无法显示。按照我对例程的理解,#define  LCD_DATA (*((volatile  Uint16 *)0x2001,这句话是给数据传送的,对于命令的,它另外有定义,就是

    #define EN GpioDataRegs.GPFDAT.bit.GPIOF2
    #define RW GpioDataRegs.GPFDAT.bit.GPIOF1
    #define RS GpioDataRegs.GPFDAT.bit.GPIOF0

    但是它又定义另外的8个IO口

    GpioMuxRegs.GPADIR.bit.GPIOA0=1; //输出
    GpioMuxRegs.GPADIR.bit.GPIOA1=1; //输出 
    GpioMuxRegs.GPADIR.bit.GPIOA2=1; //输出
    GpioMuxRegs.GPADIR.bit.GPIOA3=1; //输出 
    GpioMuxRegs.GPADIR.bit.GPIOA4=1; //输出
    GpioMuxRegs.GPADIR.bit.GPIOA5=1; //输出 
    GpioMuxRegs.GPADIR.bit.GPIOA6=1; //输出 
    GpioMuxRegs.GPADIR.bit.GPIOA7=1; //输出

    这8个IO口在后面的程序中都没有用到,我觉得这8个IO是不是多余的?

    是不是在程序中有了这句话: WriteCmd12864(FUN_MODE);  //FUN_MODE 0x30 工作模式:8位基本指令集,

    就是说明液晶选择的是并行工作模式,不用再给液晶的PSB引脚赋值了?在网上看其他的程序它们也没有对PSB进行赋值。