TM1638.lua 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. module(..., package.seeall)
  2. require "pins"
  3. pmd.ldoset(15, pmd.LDO_VMMC)
  4. local STB = pins.setup(pio.P0_24, 1, pio.PULLUP) -- TF_cmd
  5. local CLK = pins.setup(pio.P0_25, 1, pio.PULLUP) -- TF_D0
  6. local DIO = pins.setup(pio.P0_26, 1, pio.PULLUP) -- TF_D1
  7. typeTable = {
  8. 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c,
  9. 0x39, 0x5e, 0x79, 0x71
  10. };
  11. function SEND(data)
  12. for i = 0, 7, 1 do
  13. local mbit = bit.isset(data, i) and 1 or 0
  14. CLK(0)
  15. DIO(mbit)
  16. CLK(1)
  17. end
  18. end
  19. function Command(data)
  20. STB(0)
  21. SEND(data)
  22. STB(1)
  23. end
  24. function init()
  25. Command(0x8f)
  26. Command(0x40)
  27. STB(0)
  28. SEND(0xc0) ----清0
  29. for j = 1, 16, 1 do SEND(0x00) end
  30. STB(1)
  31. end
  32. function READKEY()
  33. local temp = {}
  34. STB(0)
  35. SEND(0x42)
  36. for i = 1, 4, 1 do
  37. Byte = ""
  38. for j = 1, 8, 1 do
  39. CLK(0)
  40. t = DIO()
  41. Byte = Byte .. t
  42. CLK(1)
  43. end
  44. temp[i] = tonumber(Byte, 2)
  45. end
  46. STB(1)
  47. return temp
  48. end
  49. ---------------------------------------------------测试DEMO--------------------------------------
  50. function NumLight(addr, tab)
  51. STB(0)
  52. SEND(addr)
  53. SEND(tab)
  54. STB(1)
  55. end
  56. function TM1638Disp()
  57. init()
  58. Command(0x44)
  59. for i = 0, 7, 1 do
  60. NumLight(0xc0 + (i * 2), typeTable[i + 2])
  61. sys.wait(200)
  62. end
  63. for i = 1, #typeTable, 1 do
  64. for j = 0, 7, 1 do NumLight(0xc0 + (j * 2), typeTable[i]) end
  65. sys.wait(200)
  66. end
  67. end
  68. function keyDemo()
  69. while true do
  70. for index, value in ipairs(READKEY()) do
  71. if bit.isset(value, 7) then
  72. NumLight(0xc0 + ((index - 1) * 2), typeTable[index + 1])
  73. NumLight(0xc0 + ((index - 1) * 2) + 1, 0xff)
  74. else
  75. NumLight(0xc0 + ((index - 1) * 2), 0x00)
  76. NumLight(0xc0 + ((index - 1) * 2) + 1, 0x00)
  77. end
  78. if bit.isset(value, 3) then
  79. NumLight(0xc8 + ((index - 1) * 2), typeTable[index + 1 + 4])
  80. NumLight(0xc8 + ((index - 1) * 2) + 1, 0xff)
  81. else
  82. NumLight(0xc8 + ((index - 1) * 2), 0x00)
  83. NumLight(0xc8 + ((index - 1) * 2) + 1, 0x00)
  84. end
  85. end
  86. sys.wait(50)
  87. end
  88. end
  89. sys.taskInit(function()
  90. TM1638Disp()
  91. keyDemo()
  92. end)