[Lua] 纯文本查看 复制代码
print("ST7789V3.lua")
--返回格式:每像素3个字节,2像素交错紧凑排列: G1 R1 R2 B1 B2 G2
function dev_read(driver, height, width, rgb, ltdc, pause,
data_reg_addr, cmd_reg_addr, buff_count, buff_addr1, buff_addr2, buff_addr3)
local dispmem1
local dispmem2
local dispmem3
local re = 0
local i, j
local px
local t1, t2
local str
pg_write32(0xE000EDF0, 0xA05F0000 + 0X00000001 + 0X00000002) -- 进入调试暂停CPU
--读第1个显存
t1 = get_runtime()
str = string.format("读ST7789V3显存 数据寄存器地址:0x%08X 指令寄存器地址:0x%08X 高度:%d 宽度:%d", data_reg_addr, cmd_reg_addr, height, width)
print(str)
DATA_REG = data_reg_addr
CMD_REG = cmd_reg_addr
pg_write8(CMD_REG, 0x04)
id1 = pg_read8(DATA_REG)
id2 = pg_read8(DATA_REG)
id3 = pg_read8(DATA_REG)
id4 = pg_read8(DATA_REG)
str = string.format("Chip ID = %02X %02X %02X %02X", id1, id2, id3, id4)
print(str)
pg_write8(CMD_REG, 0x0C)--读取显示的像素格式
pg_read8(DATA_REG)
id1 = pg_read8(DATA_REG)
str = string.format("读取ST7789V3显示像素格式 = %02X", id1)
print(str)
dispmem1 = ""
ST7789V3_SetDispWin(0,0, 160, 240)--设置指针位置
pg_write8(CMD_REG, 0x2E)--发送读取指令
pg_read8(DATA_REG) --丢弃
re, dispmem1 = pg_read_mem_16(DATA_REG, 160 * 240 * 3)
ST7789V3_SetDispWin(0,160, 160, 240)--设置指针位置
pg_write8(CMD_REG, 0x2E)--发送读取指令
pg_read8(DATA_REG) --丢弃
re, dispmem2 = pg_read_mem_16(DATA_REG, 160 * 240 * 3)
dispmem1 = dispmem1 .. dispmem2;
if (re == 0) then
print("pg_read_mem1() failed")
else
print(string.format("高度:%d, 宽度:%d, 实际大小:%d, 读取长度:%d",height, width, height * width , #dispmem1))
end
t2 = get_runtime()
print("读显存耗时:", t2 - t1)
pg_write32(0xE000EDF0, 0xA05F0000) --恢复
return re, dispmem1, dispmem2, dispmem3
end
function ST7789V3_WriteCmd(cmd)
pg_write8(CMD_REG, cmd)
end
function ST7789V3_WriteParam(param)
pg_write8(DATA_REG, param)
end
function ST7789V3_SetDispWin(x, y, h, w)
ST7789V3_WriteCmd(0X2A) --设置X坐标 */
ST7789V3_WriteParam(x >> 8); --起始点 */
ST7789V3_WriteParam(x);
ST7789V3_WriteParam((x + w - 1) >> 8) --结束点
ST7789V3_WriteParam(x + w - 1)
ST7789V3_WriteCmd(0X2B) --设置Y坐标
ST7789V3_WriteParam(y >> 8) --起始点
ST7789V3_WriteParam(y)
ST7789V3_WriteParam((y + h - 1) >> 8) --结束点
ST7789V3_WriteParam((y + h - 1))
end
function ST7789V3_SetCursor(x, y)
ST7789V3_WriteCmd(0X2A) --设置X坐标
ST7789V3_WriteParam(x >> 8) --先高8位,然后低8位
ST7789V3_WriteParam(x) --设置起始点和结束点*/
ST7789V3_WriteParam(x >> 8) --先高8位,然后低8位
ST7789V3_WriteParam(x) --设置起始点和结束点
ST7789V3_WriteCmd(0X2B) --设置Y坐标
ST7789V3_WriteParam(y >> 8)
ST7789V3_WriteParam(y)
ST7789V3_WriteParam(y >> 8)
ST7789V3_WriteParam(y)
end
--返回字符串,2字节,RGB565
function ST7789V3_GetPixel(x, y)
local R = 0
local G = 0
local B = 0
local str = ""
ST7789V3_SetCursor(x, y) --设置光标位置
pg_write8(CMD_REG, 0x2E)
R = pg_read32(DATA_REG) --第1个哑读,丢弃
R = pg_read32(DATA_REG)
B = pg_read32(DATA_REG)
G = pg_read32(DATA_REG)
R = (((R >> 11) << 11) | ((G >> 10 ) << 5) | (B >> 11))
return string.char(R & 0xFF, (R >> 8) & 0xFF)
end
function ST7789V3_PutPixel(x, y, color)
ST7789V3_SetCursor(x, y)
pg_write8(CMD_REG, 0x2C)
pg_write32(DATA_REG, color)
end