本帖最后由 ZDawn 于 2018-1-4 21:23 编辑
麻烦各位大佬帮帮忙,我用10MHz晶振接SSD1963,上电后直接读取SSD1963的ID发现一直是0,我的读写时序中,CS引脚都是拉低600ns,WR和RD引脚分别也是拉低200~300ns。手册也没说时序最大能取多少,不知道我这个读写的时间有没有合理,无论读取哪个寄存器都是返回0。
以下是读写程序:
//写命令
void Write_Cmd(uint16_t LCD_Reg) //GPIOE0~15用作数据线
{
LCD_CS = 0;
LCD_RS = 0;
LCD_WR = 0;
GPIOE->ODR = LCD_Reg;
LCD_WR = 1;
LCD_CS = 1;
}
//写数据
void Write_Dat(uint16_t LCD_Dat)
{
LCD_CS = 0;
LCD_RS = 1;
LCD_WR = 0;
GPIOE->ODR = LCD_Dat;
LCD_WR = 1;
LCD_CS = 1;
}
//读数据
uint16_t LCD_ReadReg(uint16_t LCD_Reg)
{
uint16_t temp;
Write_Cmd(LCD_Reg); //写入要读的寄存器号
GPIOE->CRH = (GPIOE->CRH & 0x00000000) | 0x44444444; //将端口高8位配置成输入(上下拉输入模式)
GPIOE->CRL = (GPIOE->CRL & 0x00000000) | 0x44444444; //将端口低8位配置成输入
LCD_CS = 0;
LCD_RS = 1;
LCD_RD = 0;
temp = GPIOE->IDR; //读取数据
LCD_RD = 1;
LCD_CS = 1;
GPIOE->CRH = (GPIOE->CRH & 0x00000000) | 0x33333333; //释放端口高8位为输出(通用推挽输出模式)
GPIOE->CRL = (GPIOE->CRL & 0x00000000) | 0x33333333; //释放端口低8位为输出
return temp;
}
//读取SSD1963的ID语句
uint16_t DeviceCode;
DeviceCode = LCD_ReadReg(0x00A1);
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>