MAX7219 - 8 siffrig LED modul bildskärmsdrivrutinen för ESP8266 (4 / 5 steg)
Steg 4: MAX7219 Driver genomförandet
För en detaljerad teknisk beskrivning av funktionen MAX7219 ta gärna en titt på de relaterade artikel och/eller datablad.
1. initiering
--MAX7219 register
MAXREG_DECODEMODE = 0X09
MAXREG_INTENSITY = 0X0A
MAXREG_SCANLIMIT = 0X0B
MAXREG_SHUTDOWN = 0X0C
MAXREG_DISPTEST = 0X0F
BULLEREN = 7--13 - data i pin
CS = 6--12 - belastning (CS) pin
CLK = 5--14 - klocka pin
gpio.mode (buller, gpio. OUTPUT)
gpio.mode (CS, gpio. OUTPUT)
gpio.mode (CLK, gpio. OUTPUT)
2. Skriv serialised data
funktion wrByte(data)
Jag = 8
medan (jag > 0)
göra
mask = bit.lshift(0x01,i-1)
--Print(mask)
gpio.write (CLK, 0)--fästing
dser = bit.band(data,mask)
om (dser > 0)
sedan gpio.write (buller, 1)--skicka 1
--Print("1")
annars gpio.write (buller, 0)--skicka 0
--Print("0")
slutet--endif
--Print(dser)
gpio.write (CLK, 1)--fästing
jag = i-1
slutet--medan
slutet
3. Ställ in Register
funktionen setReg (reg, värde)
gpio.write (CS, 0)
wrByte(reg)--ange register
TMR.Delay(10)
wrByte(value)--skicka data
gpio.write (CS, 0)
--TMR.Delay(10)
gpio.write (CS, 1)
slutet
4. konvertera anf skriva ut heltal i xxxx format
funktion print_led_int(c)
th = string.format ("%d", c/1000)
h = string.format("%d",(c-th*1000) / 100)
t = string.format ("%d", (c-th * 1000-h * 100) / 10)
u = string.format ("%d", c-th * 1000-h * 100-t * 10)
--Skriv ut (string.format ("%d %d %d %d", th, h, t, u))
setReg (4, th)
setReg (3 h)
setReg (2, t)
setReg (1 u)
slutet
5. skapa en Display "Noll" init scenen
funktion zero_all()
v = 1
medan (v < 9) göra
setReg(v,0)
v = v + 1
slutet
slutet
6. MAX7219 initiering
setReg (MAXREG_SCANLIMIT, 0x07)
TMR.Delay(100)
setReg (MAXREG_DECODEMODE, 0xFF)--full avkoda läge BCD
TMR.Delay(100)
setReg (MAXREG_SHUTDOWN, 0x01)--inte i Avslutningsläge
TMR.Delay(100)
setReg (MAXREG_DISPTEST, 0x00)--ingen display test
TMR.Delay(100)
setReg (MAXREG_INTENSITY, 0x00)--ställa in ljusstyrka
zero_all()--allt till noll
7. testa Display - 9999 counter
Count = 0
TMR.alarm (0,1000,1,
function()
antal = antal + 1.
--print(count);
print_led_int(Count)
om (count > 9999) då räknas = 0; zero_all()
slutet
avsluta)