请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:TMS320F2.8027万 您好!
我尝试在并行模式下连接8位LCD (16x2)。 我正在附加我尝试执行的基本代码。
请帮我解决问题。
当前状态为“LCD is not not Getting Initialized (液晶屏未初始化)”。
/************************************************************************ //*
LCD界面-8位模式 *//*
*/*
*/*
*/************************************************************************
/
#include "DSP28x_Project.h" //设备标题文件和示例包括文件
#include "piccolo_lc.h"
void WriteCommandLCD(unsigned char CommandByte);
void WriteDataLCD(unsigned char DataByte);
void LCDDelay(void);
void LCDDelay1600(void);
void SendGPIO (unsigned Sysvalue);
void main(void){Init; PCInitSysSysCtrl();syscr0;syscrl; sys;组=
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC =1;
EDIS;
INIT_INTERRUC();
Memcopy(&RamfuncsLoadStart, &RamfuncsLoadEnd,&RamfuncsRunStart);
InitFlash();
//启用全局中断和较高优先级实时调试事件:
EINT;//启用全局中断INTM
ERTM;//启用全局实时中断DBGM
Clear_variable();
InitializeLCD();
// DisplayLCD (1,“欢迎”);
// DisplayLCD (2, "eLED");
WriteCommandLCD(0x80); //用于选择8位接口
WriteDataLCD ('A')的命令;
WriteCommandLCD(0xC0); //用于选择8位接口
WriteDataLCD('B')的命令;
Delay_US(2000);
While (1);
}/* WriteCommandLCD(0x1万)
LCD */CommandeLCD(Command/38)0;用于初
始化WriteLCD(Command/1万)0
位(CommandeLCD(Command/ID)0位(Command/ID)0位/IDE)0接口(WriteLCD(Command)
//选择8位接口
Delay_US(1万);
WriteCommandLCD(0x80); //选择8位接口
Delay_US(1万)的命令;
WriteCommandLCD(0x01); //选择8位接口
Delay_US(1万)的命令;
}/*
将命令字节写入LCD */
无效GPCDE
字节DataLCD(无符号){CModchar = Commandd = CMod.CMD;所有字节(Commandd )
GpioDataRegs.GPACLEAR.Bit.GPIO18 = 1;//clear RS pin to write command
GpioDataRegs.GPASET.bit.GPIO12 = 1; //set EN high
delay_US(10);
GpioDataRegs.GPACLEAR.bit.GPGPGPGPGPGP12 = 1; //set EN = DataDET= 1
;
DataDET.G=
数据
写入格列;所有字节(非格列数据) //清除RS引脚以写入命令 //将RS引脚设置为1以写入数据
GpioDataRegs.GPASET.BIT.GPIO12 = 1; //设置EN HIGH
DELAY_US(10);
GpioDataRegs.GPACLEAR.BIT.GPIO12 =1; //设置EN LOW
}/*
Small Delay */ DelayIDE_US*1600
{ DelayDEVOID/}{ LCDUS}/}{ CIDE}/}{}{}/}{ LCDOWIDE*}{ L1}/}{ L1}{ CIDE}{ L1}/}{ LCDUS}{ L1}{
L
/*使光标可见*/
void Cursoron(void)
{
WriteCommandLCD(0x0F);// 命令打开光标
}/*
使光标不可见*/
void CursorOFF (void){
WriteCommandLCD(0x0c);// 关闭光标命令
}/*
在LCD上显示消息*/
void DisplayLCD(char linber,a *enumint;消息
{
IF (linenumber ==1)
{//First Line
WriteCommandLCD(0x80); //选择第一行
}
else
{// Second line
WriteCommandLCD(0xC0); //选择第二行
}
用于(A=0;A<16;A++)
{
WriteDataLCD(*Message);// 显示字符
消息+; //increment pointer
}
return;
}
void init_gPIO()
{
EALLOW;
GpioGPAlRegs.GPACTRL.bit.QUALPRD2 =30;//
启用
GpioCtrlRegs.GPAMUX1.bit.GPIO12=0;
GpioGPQSEL1.bit.quipoDIO = 2; gop.gop.gopo1
= 1.gipo1 = 1.gopo1 = gopoiop.gipoiop.giop.giopiopiop.giop.giopiop.giopiop.adfiop.giop.giop.giop.apiop.apiopa= 1.adfo
//命令RS
GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;
GpioDataRegs.GPACLEAR.bit.GPIO18 = 2;
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO18 = 1;
GPIO1.GPIO18 = 1;GPIOPAR.GPIO1.GPIO18
//D0
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;
GpioCtrlRegs.GPAQSEL1.bit.GPIO0 = 2;
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;
GPIOData.GPO0 = 0;GPIO1.
//D1
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;
GpioCtrlRegs.GPAQSEL1.bit.GPIO1 = 2;
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;
GPIO1 = Data.GPAC1.
//D2
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;
GpioCtrlRegs.GPAQSEL1.bit.GPIO2 = 2;
GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0;
GPIO1.GPAC1.
//D3
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0;
GpioCtrlRegs.GPAQSEL1.bit.GPIO3 = 2;
GpioCtrlRegs.GPADIR.bit.GPIO3 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIOLE3 = 0;GPIO1.GPAC3=
Data1.
//D4
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0;
GpioCtrlRegs.GPAQSEL1.bit.GPIO4 = 2;
GpioCtrlRegs.GPADIR.bit.GPIO4 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO4 = 0;GIOpio4
= Datas.GPAC1.
//D5
GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0;
GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 2;
GpioCtrlRegs.GPADIR.bit.GPIO5 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0;
GPIOLE5 = 1.GPIOREGIO1.
//D6
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0;
GpioCtrlRegs.GPAQSEL1.bit.GPIO6 = 2;
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0;
GPIO1.AR.GPIO6 = 0;GPIOLEAR.GPOREGPIO6
//D7
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0;
GpioCtrlRegs.GPAQSEL1.bit.GPIO7 = 2;
GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0;
GIOpiop.GPIO7 = 0;GIODataRegs.GPAR.GPAC7
EDIS;
}
void init_interrupit()
{
DINT;
//将PIE控制寄存器初始化到其默认状态。
//默认状态是禁用所有PIE中断,
并清除标志//。
InitPieCtrl();
//禁用CPU中断并清除所有CPU中断标志:
IER = 0x0000;
IFR = 0x0000;
//使用指向shell Interrupt
// Service routines (ISR)的指针初始化PIE矢量表。
//这将填充整个表,即使在此
示例中未使用中断//。 这对于调试非常有用。
// shell ISR例程可在DSP2802x_DefaultIsr.C.中找到
//此函数位于DSP2802x_PieVect.C.中
InitPieVectorTable();
EALLOW;//需要此项来写入EALLOW保护寄存器
PieVectorTable.TINT0 =&CPU_timer0_isr;
EDIS;//要禁用写入EALLOW保护寄存器,需要此项
InitCpuTimers();
ConfigCpuTimer(&CpuTimer0,60,1);
CpuTimer0Regs.tcr.all = 0x4001;
IER |= M_INT1;
PiectrlRegs.PIEIER1.bit.INTx7 =1;
}
中断void CPU_timer0_ISR(void)
{
CpuTimer0.InterruptCount++;//
确认此中断以接收来自组1
的更多中断PIECtrlRegs.PIEACK/ALL = PIEACK_Group1;
} void clean_variable()
;清除
=清除=数据
等待答复。
谢谢,此致,
Richa
