| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- module(..., package.seeall)
- require "utils"
- require "i2c"
- require "log"
- require "misc"
- require "pack"
- --注意:此处的i2cslaveaddr是7bit地址
- --如果i2c外设手册中给的是8bit地址,需要把8bit地址右移1位,赋值给i2cslaveaddr变量
- --如果i2c外设手册中给的是7bit地址,直接把7bit地址赋值给i2cslaveaddr变量即可
- --发起一次读写操作时,启动信号后的第一个字节是命令字节
- --命令字节的bit0表示读写位,0表示写,1表示读
- --命令字节的bit7-bit1,7个bit表示外设地址
- --i2c底层驱动在读操作时,用 (i2cslaveaddr << 1) | 0x01 生成命令字节
- --i2c底层驱动在写操作时,用 (addr[1] << 1) | 0x00 生成命令字节
- local off =0x00--关闭显示
- local on =0x01--打开显示
- local seven =0x08--
- local eight =0x00
- local i2cid = 2
- local addr = {0x34, 0x35, 0x36, 0x37}--分别用于第一、第二、第三、第四个数 + 亮度设置,地址需右移一位
- -- local addr2 = {0x68, 0x6A, 0x6C, 0x6E, 0x48}--分别用于第一、第二、第三、第四个数 + 亮度设置
- --7段数码屏
- local NUM_7 = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}--数码管显示8段0~f对应的值
- --8段数码屏
- local NUM_8 = {0xBF, 0x86, 0xDB, 0xCF, 0xE6, 0xED, 0xFD, 0x87, 0xFF, 0xEF,0xf7,0xfc,0xb9,0xde,0xf9,0xf1,0x00}--数码管显示8段0~f对应的值
- local function i2c_open()
- if i2c.setup(i2cid, i2c.SLOW) ~= i2c.SLOW then
- log.error("TM1650", "I2C.init is: fail")
- i2c.close(i2cid)
- return
- else
- log.error("TM1650", "I2C.init is: succeed")
- end
- return i2c.SLOW
- end
- ---------------------------------------------数码管显示--------------------------------------
-
- ----------------------------------key demo test-----------------------------------------------------
- local key = {
- {11,12,13,14},
- {21,22,23,24},
- {31,32,33,34},
- {41,42,43,44},
- {51,52,53,54},
- {61,62,63,64},
- {71,72,73,74}
- }
- local value = {
- {0x44,0x45,0x46,0x47},
- {0x4C,0x4D,0x4E,0x4F},
- {0x54,0x55,0x56,0x57},
- {0x5C,0x5D,0x5E,0x5F},
- {0x64,0x65,0x66,0x67},
- {0x6C,0x6D,0x6E,0x6F},
- {0x74,0x75,0x76,0x77},
-
- }
- local i2cid=2
- --local revData,key_name
- function TM1650_Gate_KEY()
-
- i2c.send(i2cid, 0x24,0x01)--开显示
- local revData = i2c.recv(i2cid,0x24,1)--读按键数据
-
- --转成number
- local _,keyname=pack.unpack(revData, 'b1')
- if keyname ~= nil then
- -- log.info("********************",keyname,type(keyname))
- -- log.info("keypad test********************")
- for i=1,7 do
- for j=1,4 do
-
- if (keyname == value[i][j]) then
-
- local keyname = key[i][j]
- log.info("key_value--------------", keyname)
- return keyname
-
- end
- end
- end
-
- end
-
- end
- sys.taskInit(function()
-
-
- local slot,dspcnt=0,0
- sys.wait(3000)
- i2c_open()
- while true do
- sys.wait(100)
- slot = slot+1
- if slot %10 ==0 then
- dspcnt = dspcnt +1
- for k=1,#addr do
- i2c.send(i2cid, 0x24,0x01)
- i2c.send(i2cid, addr[k], 0x00)
- end
- for i=1,#addr do
- i2c.send(i2cid, 0x24,0x01)
- i2c.send(i2cid, addr[i],NUM_8[dspcnt%17 +1])
- end
- end
-
- --按键读取测试
- TM1650_Gate_KEY()
- end
- end)
- -- --数码显示
- -- sys.timerLoopStart(TM1650_Write, 2000)
|