关于void LCD_Scan_Dir(u8 dir)中的一些理解问题

2019-08-22 15:25发布

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);的作用是什么?

谢谢!请大家指教!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
likunxue
1楼-- · 2019-08-22 17:36
本帖最后由 likunxue 于 2016-3-19 02:13 编辑

单从这段代码来看
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位全变为零,





0xtobit
2楼-- · 2019-08-22 22:08
likunxue 发表于 2016-3-18 23:22
单从这段代码来看
lcddev.width 应该是一个16个的值
(lcddev.width-1)>>8  要取高8位发送出去

嗯,知道了,懂了。谢谢你。
SHIBO
3楼-- · 2019-08-22 23:57
为什么要lcddev.width-1啊

一周热门 更多>