void LCD_Scan_Dir(u8 dir)
{
u16 regval=0;
u16 dirreg;
regval|=(0<<7)|(0<<6)|(0<<5);
dirreg=0X36;
regval|=0X08;//5310/5510/1963不需要BGR
LCD_WriteReg(dirreg,regval);
LCD_WR_REG(lcddev.setxcmd);
LCD_WR_DATA(0);LCD_WR_DATA(0);
LCD_WR_DATA((lcddev.width-1)>>8);LCD_WR_DATA((lcddev.width-1)&0XFF);
LCD_WR_REG(lcddev.setycmd);
LCD_WR_DATA(0);LCD_WR_DATA(0);
LCD_WR_DATA((lcddev.height-1)>>8);LCD_WR_DATA((lcddev.height-1)&0XFF);
}
中 LCD_WR_DATA((lcddev.width-1)>>8);中(lcddev.width-1)为什么要右移8位?
还有是后面的LCD_WR_DATA((lcddev.width-1)&0XFF);的作用是什么?
谢谢!请大家指教!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
单从这段代码来看
lcddev.width 应该是一个16个的值
(lcddev.width-1)>>8 要取高8位发送出去
(lcddev.width-1)&0XFF 只发送低8位数据 这一句如果 LCD_WR_DATA 这个函数的原型是
LCD_WR_DATA(u8 DAT); 可以直接写 lcddev.width-1 不需要 &0XFF; 如果函数原型是 LCD_WR_DATA(u16 DAT); 就需要 &0XFF;
因为从代码来看,是把 lcddev.width-1 的值分两次发送出去,第一次是发送高8位, 第二次是发送低8位 (lcddev.width-1)>>8) 高8位移到 低8位的位置, 高8位变为零
(lcddev.width-1)&0XFF 这句应该这样写 (lcddev.width-1)&0X00FF 你就明白了,意是就是低8位的数不变,高8位全变为零,
嗯,知道了,懂了。谢谢你。
一周热门 更多>