完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如题,这是LCD12864显示字符程序中的一段代码
void LCD_DATA(uchar d) [ Uint32 i=0; i = GpioDataRegs.GPADAT.all; //GPIO31~GPIO0 i |= (d<<6)&0x3FC0; //3FC0==0011 1111 1100 0000 i = (~( (d<<6)&0x3FC0) )|(~i); GpioDataRegs.GPADAT.all = ~i; ] 就是还是弄不明白 GpioDataRegs.GPADAT.all的值是多少,能否麻烦楼主帮我解释一下GpioDataRegs.GPADAT.all的值是多少,以及这段代码实现的是什么功能,这个地方困扰我好几天了,感谢楼主了!!! |
|
相关推荐
6 个讨论
|
|
linlin3105 发表于 2018-10-17 17:07 Mr.Joey Mao,您好,感谢您对我问题的回复,这段代码我自己在下面推过,但是就卡在了 i = GpioDataRegs.GPADAT.all这个语句上, 曾经还对这两条代码迷惑过GpioCtrlRegs.GPAMUX1.all &= 0xc03f; GpioCtrlRegs.GPADIR.all |= 0x00003FC0;后来在朋友的提示下理解是:因为对照12864的原理图(8条数据线D0~D7对应着核心板上的EPWM4A,EPWM4B,EPWM5A,EPWM5B,EPWM6A,EPWM6B,~TZ1,~TZ2,GpioCtrlRegs.GPAMUX1.all &= 0xc03f(1100 0000 0011 1111)是对EPWM4A,EPWM4B,EPWM5A,EPWM5B,EPWM6A,EPWM6B,~TZ1,~TZ2进行置零操作,而GPAMUX1的其他位则保持, GpioCtrlRegs.GPADIR.all |= 0x00003FC0(0000 0000 0000 0000 0011 1111 1100 0000)则是配置EPWM4A,EPWM4B,EPWM5A,EPWM5B,EPWM6A,EPWM6B,~TZ1,~TZ2的方向为输出,不知道理解对不对,然后就卡在了 i = GpioDataRegs.GPADAT.all这条语句上,下面我把源代码粘贴下来,烦请您指导! #include"DSP2833x_Device.h" #include "DSP2833x_Examples.h" #define EN GpioDataRegs.GPBDAT.bit.GPIO33 #define RW GpioDataRegs.GPBDAT.bit.GPIO32 #define RS GpioDataRegs.GPADAT.bit.GPIO20 #define uchar unsigned char extern uchar menu1[]=["选择电机定时设置"]; extern uchar menu2[]=["开步进电机A"]; extern uchar menu3[]=["开步进电机B"]; extern uchar menu4[]=["开步进电机C"]; void LCDInit(void); void Write_order(Uint16 order); void Write_data(Uint16 data); void delay(Uint16 t); void configio(void); //void InitXintf(void); void display(uchar *hz); void LCD_DATA(uchar d)[ Uint32 i=0; i = GpioDataRegs.GPADAT.all; i |= (d<<6)&0x3FC0; i = (~((d<<6)&0x3FC0))|(~i); GpioDataRegs.GPADAT.all = ~i; ] void LCDInit(void) [ delay(500); Write_order(0x30);// 功能设定:基本指令动作 delay(5); Write_order(0x0c);//显示状态:开 delay(5); Write_order(0x01);//清屏 delay(6); Write_order(0x02);//地址归位:AC=0x00 delay(4); ] void Write_order(Uint16 order) [ RS=0;delay(1); RW=0;delay(1); EN=1;delay(1); LCD_DATA(order); delay(10); EN=0;delay(1); ] void Write_data(Uint16 data) [ RS=1;delay(1); RW=0;delay(1); EN=1;delay(1); LCD_DATA(data); delay(10); EN=0;delay(1); ] void delay(Uint16 t) [ Uint16 i; while(t--) [ for(i=0;i<125;i++); ] ] void configio(void) [ EALLOW; GpioCtrlRegs.GPAMUX1.all &= 0xc03f; GpioCtrlRegs.GPADIR.all |= 0x00003FC0; GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 0; GpioCtrlRegs.GPBDIR.bit.GPIO33 = 1; GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0; GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO20= 0; GpioCtrlRegs.GPADIR.bit.GPIO20 = 1; EDIS; ] void display(uchar *hz) [ while(*hz!=' |