初级会员

- 积分
- 176
- 金钱
- 176
- 注册时间
- 2017-7-1
- 在线时间
- 46 小时
|

楼主 |
发表于 2018-1-9 09:12:01
|
显示全部楼层
之前的代码有问题,用下面这段代码可以旋转,实测有效
/**
* 函数功能: 设置LCD的GRAM的扫描方向
* 输入参数: ucOption :选择GRAM的扫描方向
* 可选值:1 :原点在屏幕左上角 X*Y=320*480
* 2 :原点在屏幕右上角 X*Y=480*320
* 3 :原点在屏幕右下角 X*Y=320*480
* 4 :原点在屏幕左下角 X*Y=480*320
* 返 回 值: 无
* 说 明:无
*/
void LCD_SetDirection( uint8_t ucOption )
{
/**
* Memory Access Control (36h)
* This command defines read/write scanning direction of the frame memory.
*
* These 3 bits control the direction from the MPU to memory write/read.
*
* Bit Symbol Name Description
* D7 MY Row Address Order -- 以X轴镜像
* D6 MX Column Address Order -- 以Y轴镜像
* D5 MV Row/Column Exchange -- X轴与Y轴交换
* D4 ML Vertical Refresh Order LCD vertical refresh direction control.
*
* D3 BGR RGB-BGR Order Color selector switch control
* (0 = RGB color filter panel, 1 = BGR color filter panel )
* D2 MH Horizontal Refresh ORDER LCD horizontal refreshing direction control.
* D1 X Reserved Reserved
* D0 X Reserved Reserved
*/
switch ( ucOption )
{
case 0:
// 左上角->右下角
// (0,0) ___ x(320)
// |
// |
// | y(480)
LCD_WRITE_CMD(0x36);
LCD_WRITE_DATA(0x08);
LCD_WRITE_CMD(0x2A);
LCD_WRITE_DATA(0x00); /* x start */
LCD_WRITE_DATA(0x00);
LCD_WRITE_DATA(0x01); /* x end */
LCD_WRITE_DATA(0x3F);
LCD_WRITE_CMD(0x2B);
LCD_WRITE_DATA(0x00); /* y start */
LCD_WRITE_DATA(0x00);
LCD_WRITE_DATA(0x01); /* y end */
LCD_WRITE_DATA(0xDF);
break;
case 1:
// 右上角-> 左下角
// y(320)___ (0,0)
// |
// |
// |x(480)
LCD_WRITE_CMD(0x36);
LCD_WRITE_DATA(0x68);
LCD_WRITE_CMD(0x2A);
LCD_WRITE_DATA(0x00);
LCD_WRITE_DATA(0x00);
LCD_WRITE_DATA(0x01);
LCD_WRITE_DATA(0xDF);
LCD_WRITE_CMD(0x2B);
LCD_WRITE_DATA(0x00);
LCD_WRITE_DATA(0x00);
LCD_WRITE_DATA(0x01);
LCD_WRITE_DATA(0x3F);
break;
case 2:
// 右下角->左上角
// |y(480)
// |
// x(320) ___|(0,0)
LCD_WRITE_CMD(0x36);
LCD_WRITE_DATA(0xC8);
LCD_WRITE_CMD(0x2A);
LCD_WRITE_DATA(0x00);
LCD_WRITE_DATA(0x00);
LCD_WRITE_DATA(0x01);
LCD_WRITE_DATA(0x3F);
LCD_WRITE_CMD(0x2B);
LCD_WRITE_DATA(0x00);
LCD_WRITE_DATA(0x00);
LCD_WRITE_DATA(0x01);
LCD_WRITE_DATA(0x3F);
break;
case 3:
// 左下角->右上角
// |x(480)
// |
// |___ y(320)
LCD_WRITE_CMD(0x36);
LCD_WRITE_DATA(0xA8);
LCD_WRITE_CMD(0x2A);
LCD_WRITE_DATA(0x00);
LCD_WRITE_DATA(0x00);
LCD_WRITE_DATA(0x01);
LCD_WRITE_DATA(0xDF);
LCD_WRITE_CMD(0x2B);
LCD_WRITE_DATA(0x00);
LCD_WRITE_DATA(0x00);
LCD_WRITE_DATA(0x01);
LCD_WRITE_DATA(0x3F);
break;
}
/* 开始向GRAM写入数据 */
LCD_WRITE_CMD (0x2C);
} |
|