我写的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);
};
//*************************************************
}
//###########################################################################
#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);
};
//*************************************************
}