lcd_HER88128_663.lua 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. require"pins"
  2. local HT1621_CMD_ID =0x80 --前3位 100有效
  3. local HT1621_DATA_ID =0xA0 --前3位 101有效
  4. local BIAS=0x29 --0x50-- 1/3 bias 4 com
  5. local SYSEN=0x01 --0X02--Turn on system oscillator振荡
  6. local LCDON=0x03 --0x06--Turn on LCD bias generator偏压发生器
  7. local LCDOFF=0x02 --0x04--Turn off LCD bias generator
  8. local RC256=0X18
  9. local LCD_CS = pins.setup(pio.P0_3,0)
  10. local LCD_WR = pins.setup(pio.P0_1,0)
  11. local LCD_DAT = pins.setup(pio.P0_0,0)
  12. local LCD_VCC = pins.setup(pio.P0_18,0)
  13. local DIGITS={["1"] =0XA0,["2"] = 0X6D,["3"] = 0XE9, ["4"] = 0XE2, ["5"] = 0XCB , ["6"] = 0XCF, ["7"] = 0XA1, ["8"] =0XEF, ["9"] =0xEB, ["0"] =0XAF }
  14. local DISPMEM={0X00,0X00,0X00,0X00,0X00,0X00,0X00}
  15. local function __NOP()
  16. end
  17. function sendbit_high(data,cnt)--传地址,高六位
  18. local i
  19. for i=1, cnt do
  20. if bit.band(data,0x80)==0 then
  21. LCD_DAT(0)
  22. else
  23. LCD_DAT(1)
  24. end
  25. LCD_WR(0)
  26. LCD_WR(1)
  27. data = bit.lshift(data,1)
  28. end
  29. end
  30. function sendbit_low(data, cnt)--传送数据,低四位
  31. local i
  32. for i=1,cnt do
  33. if bit.band(data,0x01)==0 then
  34. LCD_DAT(0)
  35. else
  36. LCD_DAT(1)
  37. end
  38. LCD_WR(0)
  39. LCD_WR(1)
  40. data=bit.rshift(data,1)
  41. end
  42. end
  43. function sendcmd( command)--写命令
  44. LCD_CS(0)
  45. sendbit_high(0x80,3)
  46. sendbit_high(command,8)
  47. sendbit_high(0x0,1)
  48. LCD_CS(1)
  49. end
  50. function write_1621( addr, data)--写地址和数据
  51. LCD_CS(0)
  52. sendbit_high(0xa0,3)
  53. sendbit_high(bit.lshift(addr, 2),6)
  54. sendbit_low(data,4)
  55. LCD_CS(1)
  56. end
  57. local coLcdTask = sys.taskInit(function()
  58. local i=0
  59. _pac=0x00
  60. LCD_VCC(1)--打开电源
  61. pmd.ldoset(15,pmd.LDO_VLCD)
  62. pmd.ldoset(15,pmd.LDO_VBACKLIGHT_R)
  63. sendcmd(RC256)
  64. sendcmd(BIAS)
  65. sendcmd(SYSEN)
  66. sendcmd(LCDON)
  67. local digno=0
  68. while true do
  69. --test code by JWL
  70. local tmpd=0
  71. DISPMEM[1] = DIGITS[ tostring(digno)]
  72. DISPMEM[2] = DIGITS[ tostring(digno)]
  73. DISPMEM[3] = DIGITS[ tostring(digno)]
  74. DISPMEM[4] = DIGITS[ tostring(digno)]
  75. DISPMEM[5] = DIGITS[ tostring(digno)]
  76. DISPMEM[6] = DIGITS[ tostring(digno)]
  77. DISPMEM[7] = 0x08 --只显示“元”
  78. log.info("tostring(digno)", tostring(digno), string.format("%X" ,DISPMEM[1]))
  79. digno = digno +1
  80. if digno>=10 then digno =0 end
  81. for i=1,#DISPMEM do
  82. tmpd = bit.band( DISPMEM[i],0x0F)
  83. write_1621( (i-1) *2 +0,tmpd)
  84. tmpd = bit.band( DISPMEM[i],0xF0)
  85. tmpd = bit.rshift(tmpd,4)
  86. if digno %2 ==0 and i~=7 then
  87. tmpd = bit.bor(tmpd,0x01)
  88. end
  89. write_1621( (i-1) *2 +1,tmpd)
  90. end
  91. sys.wait(800)
  92. end
  93. end)