這里就不寫接線了, 前面文章整理了一些資料, 可以查閱
簡(jiǎn)單講一下, 兩片595級(jí)聯(lián), 第二片控制共陰極, 控制位0為有效, 1為關(guān)閉, 和第一片的陽(yáng)極控制相反, 所以0xfe是第一位顯示, 0xf7是第四位顯示, 數(shù)碼管是要高頻交替刷新, 所以, 這四位不會(huì)一同顯示
bit.bnot(bit.bit(quence)
再左移8位和第一片單片機(jī)控制的陽(yáng)極合并就得到了最終的傳遞值
tmr.stop(0)
tmr.stop(1)
--數(shù)值
number = 0
--0~9 num[1]=0
num = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}
--設(shè)置ds位
latch_pin = 2
gpio.mode(latch_pin, gpio.OUTPUT)
gpio.write(latch_pin,gpio.LOW)
--不聯(lián)網(wǎng)方式開(kāi)始計(jì)時(shí), 從0秒開(kāi)始
rtctime.set(0,0,0)
--初始化spi通信, 默認(rèn)時(shí)鐘低電位, 默認(rèn)高電位寫入數(shù)據(jù), 傳遞一次16位, 也就是0xFFFF~0x0000
result = spi.setup(1,spi.MASTER,spi.CPOL_LOW,spi.CPHA_HIGH,16,8)
--更新顯示
function updateDisplay()
--將四個(gè)數(shù)碼管循環(huán)一遍
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 ))
--發(fā)送數(shù)據(jù)
spi.send(1,finalNum)
--激活顯示
gpio.write(latch_pin,gpio.HIGH)
gpio.write(latch_pin,gpio.LOW)
--每個(gè)數(shù)碼管維持時(shí)間平分
tmr.delay(2500)
end
end
--更新數(shù)值
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: 把數(shù)字高速更新中的計(jì)算, 移到刷新數(shù)值的updateNum中, 刷新數(shù)碼管只用作數(shù)值傳遞, 這樣高速處理壓力大大下降, 避免了重復(fù)計(jì)算的問(wèn)題, 大家可以試試看