--[[ @module tm1650 @summary tm1650 数码管和按键扫描芯片 @version 1.0 @date 2023.09.07 @author lulipro @usage --注意: --1、tm1650驱动的数码管应该选用共阴数码管 --2、tm1650也可以驱动LED,如果是LED,则应该将LED连接成共阴数码管内部相同的电路 --3、支持按键扫描,此模式下tm1650的DP/KP引脚为中断输出引脚 --=========按键扫描例子========== local function tm1650_kcb(key_code) log.info('tm1650 user cb,key code=',string.format("%02X",key_code)) end sys.taskInit(function() tm1650.init(pin.PB06,pin.PB07,tm1650.MODE_KEY_INPUT,pin.PB08,tm1650_kcb) while 1 do sys.wait(2000) end end) --==========数码管显示例子=========== sys.taskInit(function() --共阴段码表,0~9的数字 local NUM_TABLE_AX = { [0]=0x3f,[1]=0x06,[2]=0x5b,[3]=0x4f,[4]=0x66, [5]=0x6d,[6]=0x7d,[7]=0x07,[8]=0x7f,[9]=0x6f }; tm1650.init(pin.PB06,pin.PB07,tm1650.MODE_LED_OUTPUT) while 1 do for i = tm1650.DIG1, tm1650.DIG4, 1 do tm1650.print(i,NUM_TABLE_AX[6]) sys.wait(500) end sys.wait(1000) for i = tm1650.BRIGHT1, tm1650.BRIGHT8, 1 do tm1650.setBright(i) sys.wait(500) end for i = 1, 8, 1 do sys.wait(500) tm1650.close() sys.wait(500) tm1650.open() end sys.wait(2000) tm1650.clear() end end) ]] local tm1650 = {} local sys = require "sys" --数码管位选定义 tm1650.DIG1 = 0 tm1650.DIG2 = 1 tm1650.DIG3 = 2 tm1650.DIG4 = 3 --八级亮度常量定义 tm1650.BRIGHT1 = 1 tm1650.BRIGHT2 = 2 tm1650.BRIGHT3 = 3 tm1650.BRIGHT4 = 4 tm1650.BRIGHT5 = 5 tm1650.BRIGHT6 = 6 tm1650.BRIGHT7 = 7 tm1650.BRIGHT8 = 8 --第8级亮度时寄存器二进制位为000 --工作模式定义 tm1650.MODE_LED_OUTPUT = 0x71 --数码管LED驱动模式(7级亮度,8段模式,打开显示) tm1650.MODE_KEY_INPUT = 0x79 --按键扫描模式 local TM1650_SCL local TM1650_SDA local TM1650_SDA_PIN --SDA引脚 local TM1650_IRQ_PIN --按键检测使用的中断引脚号 local TM1650_KEY_CALLBACK --按键回调函数 local bright = tm1650.BRIGHT7 --亮度变量 local is_display_on = 1 --显示开关标志变量 local function tm1650_writeReg(reg,value) local dat local mbit --=====start======== TM1650_SCL(1) TM1650_SDA(1) TM1650_SDA(0) TM1650_SCL(0) --======写寄存器地址========== dat = reg for i = 0, 7, 1 do TM1650_SCL(0) mbit = (((dat<tm1650.BRIGHT8 then bri = tm1650.BRIGHT8 end if bri=tm1650.DIG1) and (dig<=tm1650.DIG4) then tm1650_writeReg(dig*2+0x68,seg_data) end end --[[ 清除TM1650的所有位对应的显存数据,即全部刷写为0 @api tm1650.clear() @usage tm1650.clear() ]] function tm1650.clear() for i = tm1650.DIG1, tm1650.DIG4, 1 do tm1650.print(i,0) end end return tm1650