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.

TMS320F2812驱动LCD12864显示,屏幕不显示,可能是时序问题

/-----LCD12864引脚的设置-----/

GpioMuxRegs.GPBMUX.all=0x0000;//将GPIOB设置为通用数字输入输出通道
GpioMuxRegs.GPBDIR.all=0xFFFF;//将GPIOB的方向设置为输出方向
GpioMuxRegs.GPAMUX.all=0x0000;//将GPIOA设置为通用数字输入输出通道
GpioMuxRegs.GPADIR.all=0xFFFF;//将GPIOA的方向设置为输出方向

/-------显示字符的设置--------------/

char hang1[12]={ "陕","西","科","技","大","学"};
char hang2[8]={ "电","流","1",":"};
char hang3[8]= {"电","流","2",":"};
char hang4[8]= {"电","流","3",":"};
char hang5[8]= {"电","流","4",":"};
char hang6[8]= {"电","流","5",":"};
char hang7[8]= {"电","流","6",":"};

/------LCD初始化-----------/

void Initlcd(void)
{
DELAY_US(4000);//等待时间>40ms
write_LCD_command(0x30);//功能设定:8位数据,基本指令操作
DELAY_US(100);//等待时间>100us
write_LCD_command(0x30);//功能设定:8位数据,基本指令操作
DELAY_US(37);//等待时间>37us
write_LCD_command(0x0C);//显示设定:整体显示,游标关,不反白
DELAY_US(100);//等待时间>100us
write_LCD_command(0x01);//清屏指令
DELAY_US(10000);//等待时间>10ms
write_LCD_command(0x06);//进入点设定:地址指针加1
DELAY_US(1000);
write_LCD_command(0x80);
}

/-------------显示程序------------/

void display1(void)
{
int Num;
write_LCD_command(0x80);
for(Num=0;Num<12;Num++)
{
  write_LCD_data(hang1[num][Num]);
}

write_LCD_command(0x90);//写第二行
for(Num=0;Num<8;Num++)
{
  write_LCD_data(hang2[num][Num]);
}

write_LCD_command(0x94);
for(Num=0;Num<8;Num++)
{
  write_LCD_data(hang3[num][Num]);
}

write_LCD_command(0x88);//写第三行
 for(Num=0;Num<8;Num++)
{
  write_LCD_data(hang4[num][Num]);
}

write_LCD_command(0x8C);
 for(Num=0;Num<8;Num++)
{
  write_LCD_data(hang5[num][Num]);
}

write_LCD_command(0x98);//写第四行
for(Num=0;Num<8;Num++)
{
  write_LCD_data(hang6[num][Num]);
}

write_LCD_command(0x9C);
for(Num=0;Num<8;Num++)
{
  write_LCD_data(hang7[num][Num]);
}

}

  • 以下作补充

    /--------LCD12864写数据,写命令指令---------/

    void write_LCD_command(int value)
    {
    read_busy();
    GpioDataRegs.GPADAT.bit.GPIOA1=0;
    GpioDataRegs.GPADAT.bit.GPIOA3=0;
    GpioDataRegs.GPADAT.bit.GPIOA5=1;
    LCD_databus(value);
    // DELAY_US(1000);
    GpioDataRegs.GPADAT.bit.GPIOA5=0;
    }

    void write_LCD_data(int value)
    {
    read_busy();
    GpioDataRegs.GPADAT.bit.GPIOA1=1;
    GpioDataRegs.GPADAT.bit.GPIOA3=0;
    GpioDataRegs.GPADAT.bit.GPIOA5=1;
    LCD_databus(value);
    // DELAY_US(1000);;
    GpioDataRegs.GPADAT.bit.GPIOA5=0;
    }

    /---------LCD12864数据引脚赋值-------------/

    void LCD_databus(int value)
    {
    GpioDataRegs.GPBDAT.bit.GPIOB0=(value>>7)&1;//DB7
    GpioDataRegs.GPBDAT.bit.GPIOB2=(value>>6)&1;//DB6
    GpioDataRegs.GPBDAT.bit.GPIOB4=(value>>5)&1;//DB5
    GpioDataRegs.GPBDAT.bit.GPIOB7=(value>>4)&1;//DB4
    GpioDataRegs.GPADAT.bit.GPIOA14=(value>>3)&1;//DB3
    GpioDataRegs.GPADAT.bit.GPIOA11=(value>>2)&1;//DB2
    GpioDataRegs.GPADAT.bit.GPIOA9=(value>>1)&1;//DB1
    GpioDataRegs.GPADAT.bit.GPIOA7=value&1;//DB0

    }

  • 我个人觉得是时序问题

  • 请将所有通过DAT寄存器实现输出高或低电平的语句更改成使用SET/CLEAR/TOGGLE寄存器对应高/低/翻转,详细原因请参考:

    http://processors.wiki.ti.com/index.php?title=General_Purpose_IO_(GPIO)_FAQ_for_C2000#Q:_Back-to-back_DAT_register_writes_do_not_work_as_expected