这里就不写接线了, 前面文章整理了一些资料, 可以查阅
简单讲一下, 两片595级联, 第二片控制共阴极, 控制位0为有效, 1为关闭, 和第一片的阳极控制相反, 所以0xfe是第一位显示, 0xf7是第四位显示, 数码管是要高频交替刷新, 所以, 这四位不会一同显示
bit.bnot(bit.bit(quence)
再左移8位和第一片单片机控制的阳极合并就得到了最终的传递值
tmr.stop(0)
tmr.stop(1)
--数值
number = 0
--0~9 num[1]=0
num = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}
--设置ds位
latch_pin = 2
gpio.mode(latch_pin, gpio.OUTPUT)
gpio.write(latch_pin,gpio.LOW)
--不联网方式开始计时, 从0秒开始
rtctime.set(0,0,0)
--初始化spi通信, 默认时钟低电位, 默认高电位写入数据, 传递一次16位, 也就是0xFFFF~0x0000
result = spi.setup(1,spi.MASTER,spi.CPOL_LOW,spi.CPHA_HIGH,16,8)
--更新显示
function updateDisplay()
--将四个数码管循环一遍
for quence=0,3 do
index = math.floor(number/10^(3-quence))%10
finalNum = bit.bor(bit.lshift(bit.bnot(bit.bit(quence)),8),num[index+1])
-- print(index, string.format("0x%02X", finalNum ))
--发送数据
spi.send(1,finalNum)
--激活显示
gpio.write(latch_pin,gpio.HIGH)
gpio.write(latch_pin,gpio.LOW)
--每个数码管维持时间平分
tmr.delay(2500)
end
end
--更新数值
function updateNum()
number, usec, rate = rtctime.get()
-- print(number)
end
updateNum()
updateDisplay()
tmr.alarm(0,10,tmr.ALARM_AUTO,updateDisplay)
tmr.alarm(1,1000,tmr.ALARM_AUTO,updateNum)
ps: 把数字高速更新中的计算, 移到刷新数值的updateNum中, 刷新数码管只用作数值传递, 这样高速处理压力大大下降, 避免了重复计算的问题, 大家可以试试看