图4-3 地址宽度为8位、数据宽度为8位的寄存器读写时序图
根据图4-2的时序图可知,对地址宽度为8位、数据宽度为8位的寄存器的操作只需三个函数,即“8位地址函数”、“8位数据写函数”和“8位数据读函数”,这个三个函数分别如程序清单4.3所示。
程序清单4.3 地址宽度为8位、数据宽度为8位的寄存器基本操作函数
void __writeRegAddr8(uchar ucAddr) /* 写8位寄存器地址函数 */
{
LCD_CS = 0x00; /* 拉低CS */
LCD_RS = 0x00; /* 拉低RS */
DATA_PORT = ucAddr; /* 写地址数据 */
LCD_WR = 0x00; /* 拉低WR */
LCD_WR = 0xFF; /* 拉高WR */
LCD_CS = 0xFF; /* 拉高CS */
}
void __writeData8(uchar pd) /* 写8位数据函数 */
{
LCD_CS = 0x00; /* 拉低CS */
LCD_RS = 0xFF; /* 拉高RS */
DATA_PORT = pd; /* 写数据 */
LCD_WR = 0x00; /* 拉低WR */
LCD_WR = 0xFF; /* 拉高WR */
LCD_CS = 0xFF; /* 拉高CS */
}
unsigned char __readData8(void)
{
unsigned char ucReturn = 0;
GPIOPinTypeIn(DATA_PORT_BASE_PIN); /* 设置为输入端口 */
LCD_CS = 0x00; /* 拉低CS */
LCD_RS = 0xFF; /* 拉高RS */
LCD_RD = 0x00; /* 拉低RD */
LCD_RD = 0xFF; /* 拉高RD */
ucReturn = DATA_PORT; /* 读入数据 */
LCD_CS = 0xFF; /* 拉高CS */
GPIOPinTypeOut(DATA_PORT_BASE_PIN); /* 还原为输出端口 */
return ucReturn; /* 返回结果 */
}
向地址宽度为16位、数据宽度为16位的寄存器读操作的常见时序如图4-4所示,写操作时序如图4.5所示。
图4-4 地址宽度位16位、数据宽度位16位的寄存器读时序图
图4-5 地址宽度位16位、数据宽度位16位的寄存器写时序图
分析图4.3和图4.4可知,对地址宽度为16位、数据宽度为16位的寄存器的读写操作也只需要三个函数即可,这三个函数分别为“16位地址写函数”、“16位数据读函数”、“16位数据写函数”,如清单4.4所示。
程序清单4.4 地址宽度为16位、数据宽度为16位的寄存器基本操作函数
// 16位地址写函数
void __writeRegAddr16(unsigned int uiAddr)
{
LCD_CS = 0x00; /* 拉低CS */
LCD_RS = 0x00; /* 拉低RS */
DATA_PORT = (unsigned char)(uiAddr >> 8); /* 写地址高8位数据 */
LCD_WR = 0x00; /* 拉低WR */
LCD_WR = 0xFF; /* 拉高WR */
DATA_PORT = (unsigned char)uiAddr; /* 写地址低8位数据 */
LCD_WR = 0x00; /* 拉低WR */
LCD_WR = 0xFF; /* 拉高WR */
//LCD_RS = 0xFF; /* 拉高RS */
LCD_CS = 0xFF; /* 拉高CS */
}
// 16位数据读函数
unsigned int __readRegData16(void)
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>