# Imports go at the top # 7segv5 6/11/2022 # comments added. # This version uses pin1 - which is used by the timing gate software # Common Anode 4-digit LED display from microbit import * # give names to the segment output pins.. segA=pin3 # top middle segB=pin0 # upper right segC=pin4 # lower right segD=pin6 # lower centre segE=pin7 # lower left segF=pin1 # upper left segG=pin8 # middle centre DP=pin9 # decimal point # give names to the digit-enabling pins D1=pin2 # left hand digit D2=pin13 # 2nd from left D3=pin14 # 2nd from right D4=pin15 # right hand # create an array to store segment patterns segs =[0,1,2,3,4,5,6,7,8,9] # formation of each digit 0 = on, 1 = off segs[0] = [0,0,0,0,0,0,1] # pattern for digit 0 segs[1] = [1,0,0,1,1,1,1] # 1 segs[2] = [0,0,1,0,0,1,0] # 2 segs[3] = [0,0,0,0,1,1,0] # 3 segs[4] = [1,0,0,1,1,0,0] # 4 segs[5] = [0,1,0,0,1,0,0] # 5 segs[6] = [0,1,0,0,0,0,0] # 6 segs[7] = [0,0,0,1,1,1,1] # 7 segs[8] = [0,0,0,0,0,0,0] # 8 segs[9] = [0,0,0,0,1,0,0] # 9 # enablers for each difit 0 = off 1 = on Dig1=0 # left hand digit Dig2=0 Dig3=0 Dig4=0 # right hand digit # segment pattern stored for each digit (not used) Dig1segs = [0,0,0,0,0,0,1] Dig2segs = [0,0,0,0,0,0,1] Dig3segs = [0,0,0,0,0,0,1] Dig4segs = [0,0,0,0,0,0,1] # function to set up pattern for each digit 0-9 on segment controls def digit(val): zz = segs[val] segA.write_digital(zz[0]) segB.write_digital(zz[1]) segC.write_digital(zz[2]) segD.write_digital(zz[3]) segE.write_digital(zz[4]) segF.write_digital(zz[5]) segG.write_digital(zz[6]) # switch off display by disabling all 4 digits def off(): D1.write_digital(0) D2.write_digital(0) D3.write_digital(0) #D4.write_digital(0) # functions to enable 1 digit only (not used) def disp1_1(): D1.write_digital(1) D2.write_digital(0) D3.write_digital(0) D4.write_digital(0) def disp1_2(): D1.write_digital(0) D2.write_digital(1) D3.write_digital(0) D4.write_digital(0) def disp1_3(): D1.write_digital(0) D2.write_digital(0) D3.write_digital(1) D4.write_digital(0) # sets up Dig1,Dig2,Dig3,Dig4 from integer value def setup(val): global Dig1,Dig2,Dig3,Dig4 #Dig1segs,Dig2segs,Dig3segs,Dig4segs not used (yet) # extract the 4 digits Dig4 = val%10 # use % - modular division val= int(val/10) Dig3 = val%10 val= int(val/10) Dig2 = val%10 val= int(val/10) Dig1 = val%10 # set up the segments for each #Dig1segs =segs[Dig1] #Dig2segs =segs[Dig2] #Dig3segs =segs[Dig3] #Dig4segs =segs[Dig4] # function to show all 4 digits dig1 -4 , showing each for 10 milliseconds def showdigs(): digit(Dig1) # set up segments for left hand digit D1.write_digital(1) # switch on left hand digit sleep (10) # wait 10ms D1.write_digital(0) # switch off # display second digit for 10ms digit(Dig2) D2.write_digital(1) sleep (10) D2.write_digital(0) # switch off # display third digit for 10ms digit(Dig3) D3.write_digital(1) sleep (10) D3.write_digital(0) # switch off # display fourth digit for 10ms digit(Dig4) D4.write_digital(1) sleep (10) D4.write_digital(0) # switch off # disable microbit led screen display.off() # switch off all 4 digits off() # starting number to be displayed numb=0 setup(numb) # sets up dig1 - 4 x=0 while True: x=(x+1)%10 if x==0: # every 10 loops befor increasing number numb=(numb+1)%1000 # increase in rabge 0000 - 9999 setup(numb) # set up dig1 -dig4 showdigs() #show all 4 digits dig1 -4 , showing each for 10 milliseconds