fovVdk 发表于 2018-4-2 11:03:37

求助:请教ssd2805设置x和y坐标的函数

屏的分辨率是320*320,但是在设置屏幕的点时,xy的坐标只能最大到255,mcu8080并口的传输是16bit,但是8bit的传输时屏幕没有问题,好像在屏幕读取的时候只能拿到16bit的低字节,忽略高字节

void LCD_SetCursor(uint16_t startX, uint16_t startY)
{        
        uint16_t startX_H, startX_L;
        uint16_t endX_H, endX_L;
        uint16_t startY_H, startY_L;
        uint16_t endY_H, endY_L;               

        startX_H = (startX>>8)&0x00ff;
        startX_L = (startX)&0x00ff;
       
        startX = (startX_L<<8) | startX_H;
       
        startY_H = (startY>>8)&0x00ff;
        startY_L = (startY)&0x00ff;
       
        startY = (startY_L<<8) | startY_H;
        // 表明是generic packet
        Write_Generic_Packet(0x04);
        //Set column address
        Write_DATA(0x2A);
        //Write_DATA(startX_H);
        Write_DATA(startX_L);
        Write_DATA(0x3f00);
       

fovVdk 发表于 2018-4-2 18:40:10

再补充详细一点:mcu data为16位,经2805到st7796后,颜色可以正常设置,但是地址坐标,st7796丢失了高8位的数据,求大神们解答

fovVdk 发表于 2018-4-4 16:50:21

已经解决了,相对坐标的写入需要通过DCS打包,DCS打包为2个字节,高低位要进行转换.
void LCD_SetCursor(uint16_t startX, uint16_t startY)
{        
        uint16_t startX_H, startX_L;
        uint16_t endX_H, endX_L;
        uint16_t startY_H, startY_L;
        uint16_t endY_H, endY_L;               
       
        startX_H = (startX>>8)&0x00FF;
        startX_L = startX&0x00FF;
       
startX =startX_H | ((startX_L<<8)&0xFF00);
        Write_DCS_Packet(2);
        Write_REG(0X2A);
                //发送3个数据 BGR格式
        Write_DATA(startX);

        startY_H = (startY>>8)&0x00FF;
        startY_L = (startY)&0x00FF;

        startY =startY_H | ((startY_L<<8)&0xFF00);
                Write_DCS_Packet(2);
                Write_REG(0X2B);
                //发送3个数据 BGR格式
                Write_DATA(startY);

                       
}
页: [1]
查看完整版本: 求助:请教ssd2805设置x和y坐标的函数