使用16位并口进行读写,使用示波器测量读信号都是正确的。就是输出线上全为0,一点信号都没有。
//写寄存器函数
//regval:寄存器值
void LCD_WR_REG(UINT16 regval)
{
LCD_DC_CLR;
LCD_CS_CLR;
CLI();
DATAOUT(regval);
LCD_WRR_CLR;
LCD_WRR_SET;
SEI();
LCD_CS_SET;
}
//写LCD数据
//data:要写入的值
void LCD_WR_DATA(UINT16 data)
{
LCD_DC_SET;
LCD_CS_CLR;
CLI();
DATAOUT(data);
LCD_WRR_CLR;
LCD_WRR_SET;
SEI();
LCD_CS_SET;
}
//读LCD数据
//返回值:读到的值
UINT16 LCD_RD_DATA(void)
{
UINT16 data = 0;
UINT16 dummy = 0;
MX_LCDGPIO_Config_IN(); //配置为输入
LCD_DC_SET;
LCD_CS_CLR;
LCD_RDW_CLR;
//HAL_Delay(1);
//dummy = DATAIN(); //Dummy Data
LCD_RDW_SET;
dummy = DATAIN(); //Dummy Data
LCD_RDW_CLR;
//HAL_Delay(1);
LCD_RDW_SET;
data = DATAIN(); //有效值
LCD_CS_SET;
MX_LCDGPIO_Config_OT(); //配置为输出
return data;
}
//读寄存器
//LCD_Reg:寄存器地址
//返回值:读到的数据,第二次读为真实值
UINT16 LCD_ReadReg(UINT8 LCD_Reg)
{
//LCD_WR_REG(LCD_Reg); //写入要读的寄存器序号
LCD_DC_CLR;
LCD_CS_CLR;
CLI();
DATAOUT(LCD_Reg);
LCD_WRR_CLR;
LCD_WRR_SET;
SEI();
//LCD_CS_SET;
return LCD_RD_DATA(); //返回读到的值
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
{
CS0=0;
RD0=1;
RS=0;
DBH=i>>8;
DBL=i;
WR0=0;
WR0=1;
CS0=1;
}
unsigned int ReadData(void)//MCU16位,读操作
{
unsigned int temp;
DBL = 0xff; //GPIO先拉高
DBH = 0xff;//GPIO先拉高
CS0 = 0;
RS = 1;
WR0 = 1;
RD0 = 0;
P4MDOUT = 0x00; //Set Input Mode Before Read
P2MDOUT = 0x00; //Set Input Mode Before Read
_nop_(); _nop_();_nop_(); _nop_();
RD0 = 1; //rad enable
_nop_(); _nop_();_nop_(); _nop_();
temp=DBH;//ID的低8位
temp<<=8;
temp|=DBL;//ID的高
P4MDOUT = 0xFF; //Set output Mode Before Read
P2MDOUT = 0xFF; //Set output Mode Before Read
RD0 = 1;
_nop_(); _nop_();_nop_(); _nop_();
CS0 = 1;
return temp; //返回ID值
}
有需要3.97寸液晶屏(CPT3.97+OTM8009A)的朋友,可以联系我支持MCU-8/16/24BIT,可用于STM32的FSMC接口,目前数量有2500PCS,提供液晶屏的所有技术支持(初始化,CAD图纸,平台上的调试)
淘宝链接图片:https://item.taobao.com/item.htm?id=558608137119
QQ:1263857188
一周热门 更多>