微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > 我写的TMS320F2808的液晶驱动程序不知道哪块出问题了

我写的TMS320F2808的液晶驱动程序不知道哪块出问题了

时间:10-02 整理:3721RD 点击:
我写的TMS320F2808液晶驱动程序不知道哪块出问题了,怎么调都不显示,请前辈们帮我看看,谢谢了

//###########################################################################
#include "DSP280x_Device.h"     // DSP280x Headerfile Include File
#include "DSP280x_Examples.h"   // DSP280x Examples Include File
//**********************************************************************
#define SCLK    GpioDataRegs.GPADAT.bit.GPIO25
#define SID   GpioDataRegs.GPADAT.bit.GPIO24
//#define SCLK  GpioDataRegs.GPADAT.bit.GPIO15
//#define LED   GpioDataRegs.GPADAT.bit.GPIO16

Uint16 Point=0;
// 延时函数
//******Delay_Us()**************************************************************
void Delay_Us(Uint16 ucounter)
{
  Uint16 i;       
  for(i=0;i SCLK,GPIO24->SID,
//**************************************************************
void Gpio_Init(void)
{
        EALLOW;
  //I/O口功能复用选择       
   GpioCtrlRegs.GPAMUX2.bit.GPIO25=0;
   GpioCtrlRegs.GPAMUX2.bit.GPIO24=0;
   GpioCtrlRegs.GPAMUX1.bit.GPIO15=0;
   GpioCtrlRegs.GPAMUX2.bit.GPIO16=0;
// I/O口数据方向选择
   GpioCtrlRegs.GPADIR.bit.GPIO25=1;
   GpioCtrlRegs.GPADIR.bit.GPIO24=1;
   GpioCtrlRegs.GPADIR.bit.GPIO15=1;
   GpioCtrlRegs.GPADIR.bit.GPIO16=1;
//
   /* GpioCtrlRegs.GPAPUD.bit.GPIO25=0;
    GpioCtrlRegs.GPAPUD.bit.GPIO24=0;
    GpioCtrlRegs.GPAPUD.bit.GPIO15=0;
    GpioCtrlRegs.GPAPUD.bit.GPIO16=0;*/
   //
   GpioDataRegs.GPADAT.bit.GPIO25=1;
   GpioDataRegs.GPADAT.bit.GPIO24=1;
   GpioDataRegs.GPADAT.bit.GPIO15=1;
   GpioDataRegs.GPADAT.bit.GPIO16=1;
    EDIS;
}
//*****************************************************************************
//****12864液晶串口驱动程序**********************************************

/*****************************************
功能: 串行向液晶发送8bit数据
参数: 要发送的8位数据
返回: 无
*****************************************/
void  write_lcm_byte( unsigned char d)
{
          unsigned char i;
        for(i=0;i<8;i++)
        {
                SCLK = 0;                        //串行时钟线,拉低准备数据
                SID = d & 0x80;         //
                d <<= 1;                        //准备下一位数据
                SCLK = 1;                        //拉高时钟线,通知液晶数据备妥
        }
}

/**********************************************
功能: 向液晶发送命令
参数:  Cmd :  命令字节
返回: 无     
**********************************************/
void write_lcm_Cmd(  unsigned char Cmd)
{
          unsigned char i;
        i=Cmd;
        write_lcm_byte(0xf8);                //表明发送的是命令
        write_lcm_byte(i & 0xf0);        //写命令的高四位d7一d4
        i<<= 4;       
        write_lcm_byte(i);                        //写命令的低四位d3一d0
        if(Cmd == 0x01)                                //是否为清屏命令
                Delay_Ms(2);                        //延时2ms,等待液晶处理命令,最长时间是清屏命令1.6ms,其余命令是72us
        else
                Delay_Us(72);
}

/************************************
功能: 在LCM指定位置显示一行字符串
参数:  addr :  指定的位置
       *p   :  指向要显示的标准字符串
返回: 无     
**************************************/
void show( unsigned char addr,    unsigned char *p)
{
          unsigned char i,j=0;
       
        //DINT;                                        //先关闭中断,避免对此次通信的干扰
        write_lcm_Cmd(addr);                //写入地址addr
        i=*p;
        write_lcm_byte(0xfa);                //表明发送的是数据
        while(i)                                        //循环发送数据,直到字符串结尾,结尾字节是0x00
        {
                write_lcm_byte(i & 0xf0);//写数据的高四位d7一d4
                i <<= 4;       
                write_lcm_byte(i);                //写数据的低四位d3一d0
                j++;
                i=*(p+j);                                //取下一个字节数据
        }
        //EINT;                       
}
/************************************
功能: 初始化液晶
参数:  无
返回: 无     
**************************************/       
void init_lcm(void)
{
        //DINT;                                //先关闭中断,避免对此次通信的干扰
        Delay_Ms(40);                        //等待40ms,液晶上电
        write_lcm_Cmd(0x30);        //设置功能,选择基本指令集
        write_lcm_Cmd(0x0c);        //开整体显示,关游标和游标位置(最低2位)
        write_lcm_Cmd(0x01);        //清屏
        write_lcm_Cmd(0x06);        //设置点设置,光标的移动方向:向右0x06,向左0x04
        //EINT;               
}
/************************************
功能: 设置光标位置
参数:  i : 新光标位置
返回: 新光标位置     
**************************************/             
char setcur(  unsigned char i)
{
        //DINT;                        //先关闭中断,避免对此次通信的干扰
        write_lcm_Cmd(i);         //将光标移到i
        //EINT;                       
        return(i);                 //返回当前光标位置,方便其他程序保存这个位置
}
/************************************
功能: 清屏后,在指定位置显示字符串
参数:  addr :  指定的位置
       p:  要显示的标准字符串的指针
返回: 无     
**************************************/         
void ClrDisplay(  unsigned char addr,   unsigned char *p)
{
        //DINT;                                //先关闭中断,避免对此次通信的干扰
        write_lcm_Cmd(0x01);        //清屏
        write_lcm_Cmd(0x0c);        //打开整体显示
        show(addr,p);                        //在指定位置显示指定字符串
        //EINT;               
}
/************************************
功能: 清屏
参数:  无
返回: 无     
**************************************/         
void showblank(void)
{
        //DINT;                                //先关闭中断,避免对此次通信的干扰
        write_lcm_Cmd(0x01);        //清屏
        //EINT;               
}
/************************************
功能: 整体显示、显示光标、光标处反白闪烁
参数:  无
返回: 无     
**************************************/       
void blink(void)
{
        //DINT;                                //先关闭中断,避免对此次通信的干扰
        write_lcm_Cmd(0x0f);        
        //EINT;               
}
/************************************
功能: 整体显示、不显示光标
参数:  无
返回: 无     
**************************************/       
void Dblink(void)
{
        //DINT;                                //先关闭中断,避免对此次通信的干扰
        write_lcm_Cmd(0x0C);        
        //EINT;                               
}
void LCD_Putchar(  unsigned char addr,  unsigned char c)
{
    unsigned char i;
    //DINT;
    write_lcm_Cmd(addr);
     i=c;
    write_lcm_byte(0xfa);
    write_lcm_byte(i & 0xf0);//写数据的高四位d7一d4
     i <<= 4;       
    write_lcm_byte(i);                //写数据的低四位d3一d0
               
  // EINT;
}
//**************************************************************************
void main(void)
{
   InitSysCtrl();
   DINT;
   IER = 0x0000;
   IFR = 0x0000;
        Gpio_Init();
        init_lcm();  
        ClrDisplay(0x90,"TMS329F_2808");
    while(1)
    { //GpioDataRegs.GPADAT.bit.GPIO24=0;
              
       // GpioDataRegs.GPADAT.bit.GPIO16=~GpioDataRegs.GPADAT.bit.GPIO16;

        //Delay_Ms(1000);

    };
//*************************************************     
}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top