mono_lcd_spi_st75256.lua 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. --- 模块功能:ST75256驱动芯片LCD命令配置
  2. -- @author openLuat
  3. -- @module ui.mono_std_spi_ST75256
  4. -- @license MIT
  5. -- @copyright openLuat
  6. -- @release 2021.09.29
  7. --[[
  8. 注意:disp库目前支持I2C接口和SPI接口的屏,此文件的配置,硬件上使用的是LCD专用的SPI引脚,不是标准的SPI引脚
  9. 硬件连线图如下:
  10. Air模块 LCD
  11. GND-------------地
  12. LCD_CS----------片选
  13. LCD_CLK---------时钟
  14. LCD_DATA--------数据
  15. LCD_DC----------数据/命令选择
  16. VDDIO-----------电源
  17. LCD_RST---------复位
  18. ]]
  19. module(...,package.seeall)
  20. require"pm"
  21. require"utils"
  22. require"common"
  23. pm.wake("lcd")
  24. --[[
  25. 函数名:init
  26. 功能 :初始化LCD参数
  27. 参数 :无
  28. 返回值:无
  29. ]]
  30. initcmd_table={
  31. 0x00020030,
  32. 0x00020094,
  33. 0x00020031,
  34. 0x000200D7,
  35. 0x0003009F,
  36. 0x00020032,
  37. 0x00030000,
  38. 0x00030001,
  39. 0x00030003,
  40. 0x00020020,
  41. 0x00030001,
  42. 0x00030003,
  43. 0x00030005,
  44. 0x00030007,
  45. 0x00030009,
  46. 0x0003000B,
  47. 0x0003000D,
  48. 0x00030010,
  49. 0x00030011,
  50. 0x00030013,
  51. 0x00030015,
  52. 0x00030017,
  53. 0x00030019,
  54. 0x0003001B,
  55. 0x0003001D,
  56. 0x0003001F,
  57. 0x00020030,--调用
  58. 0x00020075,
  59. 0x00030000,
  60. 0x00030028,
  61. 0x00020015,
  62. 0x00030000,
  63. 0x000300FF,
  64. 0x000200BC,--刷屏方向
  65. 0x00030003,
  66. 0x000300A6,
  67. --A6
  68. 0x000200CA,
  69. 0x00030000,
  70. 0x0003009F,
  71. 0x00030020,
  72. 0x000200F0,
  73. 0x00030010,
  74. 0x00020081,
  75. 0x00030038,
  76. 0x00030004,
  77. 0x00020020,
  78. 0x0003000B,
  79. 0x00010065,
  80. 0x000200AF,
  81. 0x00020015,--x
  82. 0x00030000,
  83. 0x000300FF,
  84. 0x00020075,--y
  85. 0x00030000,
  86. 0x00030015,
  87. 0x00020030,
  88. 0x0002005C,
  89. }
  90. for i=0,20,1 do
  91. for j=0,255,1 do
  92. table.insert(initcmd_table,0x00030000)
  93. end
  94. end
  95. local function init()
  96. local para =
  97. {
  98. id_reg = 0x04,
  99. id_value = 0x7c89f0,
  100. width = 256, --分辨率宽度,128像素;用户根据屏的参数自行修改
  101. height = 160, --分辨率高度,160像素;用户根据屏的参数自行修改
  102. bpp = 1, --位深度,彩屏仅支持16位
  103. bus = disp.BUS_SPI4LINE, --LCD专用SPI引脚接口,不可修改
  104. xoffset = 0, --X轴偏移
  105. yoffset = 0, --Y轴偏移
  106. freq = 13000000, --spi时钟频率,支持110K到13M(即110000到13000000)之间的整数(包含110000和13000000)
  107. pinrst = pio.P0_6, --reset,复位引脚
  108. pinrs = pio.P0_1, --rs,命令/数据选择引脚
  109. --初始化命令
  110. --前两个字节表示类型:0001表示延时,0000或者0002表示命令,0003表示数据
  111. --延时类型:后两个字节表示延时时间(单位毫秒)
  112. --命令类型:后两个字节命令的值
  113. --数据类型:后两个字节数据的值
  114. initcmd =initcmd_table,
  115. --休眠命令
  116. sleepcmd = {
  117. 0x00020095,
  118. },
  119. --唤醒命令
  120. wakecmd = {
  121. 0x00020094,
  122. }
  123. }
  124. ret = disp.init(para)
  125. disp.clear()
  126. disp.update()
  127. end
  128. disp.update=function()
  129. local testd3={ 0x00020015,--x
  130. 0x00030000,
  131. 0x000300FF,
  132. 0x00020075,--y
  133. 0x00030000,
  134. 0x00030015,
  135. 0x00020030,
  136. 0x0002005C,}
  137. local pic=disp.getframe()
  138. while true do
  139. if #testd3>0 then
  140. data=table.remove(testd3,1)
  141. disp.write(data)
  142. else
  143. break
  144. end
  145. end
  146. for i=1,pic:len() do--发数据
  147. local data = pic:sub(i,i)
  148. disp.write(tonumber(string.toHex(data),16) + 0x00030000)
  149. end
  150. end
  151. --打开背光
  152. --实际使用时,用户根据自己的lcd背光控制方式,添加背光控制代码
  153. --控制SPI引脚的电压域
  154. pmd.ldoset(15,pmd.LDO_VLCD)
  155. init()
  156. -- disp.puttext(common.utf8ToGb2312("扫描失败"),16,8)
  157. -- disp.puttext("123456789ABCDEF",16,24)
  158. -- disp.update()
  159. -- rtos.sleep(2000)
  160. -- disp.clear()
  161. -- disp.update()
  162. -- disp.puttext(common.utf8ToGb2312("扫描失败"),0,8)
  163. -- disp.puttext("123456789ABCDEF",0,24)
  164. -- disp.update()