请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号: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