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.
您好!
我尝试在并行模式下连接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