我正在启动PIC16f877A和TFT智能LCD(中文品牌)的项目。我设计了一个代码以将PIC与TFT进行接口以发送数据。 TFT协议被设计为一次发送8位,这是在程序中准备的。最初的结果很好,但是有一个小错误。传输的数据在传输过程中丢失了一些位,我找不到此问题的答案。例如,我应该转移0x000290FA,但是转移的代码变成0x000200FA。
这是项目的代码。
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U;
typedef unsigned short INT16U;
typedef unsigned long INT32U;
BOOLEAN HMT_WriteVPN32(INT32U Addr,INT32U Data);
void main() {
UART1_Init(115200); // Initialize UART module at 115200 bps
Delay_ms(100); // Wait for UART module to stabilize
HMT_WriteVPN32(0x00020000,0x000290FA);
delay_ms (500);
HMT_WriteVPN32(0x00020004,0x0008AD6D);
}
BOOLEAN HMT_WriteVPN32(INT32U Addr,INT32U Data)
{
INT16U Hdata = 0, Ldata = 0;
INT16U AddrH = 0, AddrL =0 ;
INT16U AddrHH = 0, AddrHL = 0, AddrLH = 0, AddrLL = 0;
INT16U HHdata = 0, HLdata = 0, LHdata = 0, LLdata = 0;
if((Addr < 0x00020000) || (Addr > 0x0002FFFF))
{
return (FALSE);
}
AddrH = Addr>>16; // Take high 16 data
AddrL = Addr; // Lower 16 data
AddrHH = AddrH >> 8;
AddrHL = AddrH;
AddrLH = AddrL >> 8;
AddrLL = AddrL;
Hdata = Data >> 16; // Take the 32-bit high byte
Ldata = Data ; // Take the 32-bit low byte
HHdata =Hdata >> 6;
HLdata = Hdata ;
LHdata = Ldata >> 6;
LLdata = Ldata ;
SendHead(); // Send frame header
UART1_Write(0x44); // send command
UART1_Write(AddrHH);
UART1_Write(AddrHL);
UART1_Write(AddrLH);
UART1_Write(AddrLL);
UART1_Write(HHdata);
UART1_Write(HLdata);
UART1_Write(LHdata);
UART1_Write(LLdata);
SendTail(); // Send end of frame
return (TRUE);
}
当我更改输入到BOOLEAN HMT_WriteVPN32函数的数据类型时,该代码起作用。