Hteo bih da napravim sa 7 segmentnim displejom(Comon Catode) u multiplexu da mi prikazuje brojeve koje podesim i upiše u EEprom memoriju.
Sad ja sam napisao kod u PICBasic Pro...mada je malo traljavo... koliko sam znao,... ali radi u principu.... u proteusu...jedino ako neko može da mi pomogne oko koda...da se prepravi.... pravi mi problem kada podešavam brojeve ne mogu da pritiskam taster da podešavam.... nego moram da ga držim TASTER za podešavanje da bih podesio broj.... jer nisam znao kako da rešim petlju za podešavanje i preskoči mi broj....
Npr. ako hocu da u prvoj cifri podesim broj 4...prekoči mi na broj 5.....
Treba da radi po sistemu:
Prvi taster se pritisne... ugase se sve cifre i upali se samo prva tj. ona koja se podešava...
Drugim Tasterom podesi se žejni broj... i onda opet Prvi taster na sledeći broj i tako redom... do 4 cifre....
EVO I CODA u PicBasic Pro:
Code: Select all
Cmcon = 7
TRISB =00000000 'set all PORTB pins as output
symbol brzina=10 'BRZINA PALJENJA MULTIPLEXA
SYMBOL DISPLEJ_1= PORTA.3
SYMBOL DISPLEJ_2= PORTA.2
SYMBOL DISPLEJ_3= PORTA.1
SYMBOL DISPLEJ_4= PORTA.0
SYMBOL TASTER_JEDAN = PORTA.4
SYMBOL TASTER_DVA = PORTA.7
INPUT porta.4
INPUT porta.7
output portb.0
output portb.1
output portb.2
output portb.3
output portb.4
output portb.5
output portb.6
output portb.7
LOW DISPLEJ_1
LOW DISPLEJ_2
LOW DISPLEJ_3
LOW DISPLEJ_4
PORTB=0
Mem_broj VAR BYTE
I VAR byte
TEMP VAR byte
Citaj_memoriju:
READ 0,Mem_broj(1):READ 1,Mem_broj(2):READ 2,Mem_broj(3)
READ 3,Mem_broj(4)
;**************************************************
PROGRAM:
IF TASTER_JEDAN = 0 THEN
PORTB=128
PAUSE 1000
goto SET_PRV_BR
endif
HIGH DISPLEJ_2 :HIGH DISPLEJ_3 :HIGH DISPLEJ_4
LOW DISPLEJ_1
PORTB=Mem_broj(1) :PAUSE BRZINA
HIGH DISPLEJ_1:LOW DISPLEJ_2
PORTB=Mem_broj(2):PAUSE BRZINA
PORTB=128:PAUSE BRZINA
HIGH DISPLEJ_2: LOW DISPLEJ_3
PORTB=Mem_broj(3):PAUSE BRZINA
HIGH DISPLEJ_3: LOW DISPLEJ_4
PORTB=Mem_broj(4):PAUSE BRZINA
GOTO PROGRAM
;**************************************************
SET_PRV_BR:
FOR I = 0 TO 11
IF TASTER_dva = 0 THEN
HIGH DISPLEJ_2 :HIGH DISPLEJ_3 :HIGH DISPLEJ_4
LOW DISPLEJ_1
PORTB=Mem_broj(1):PAUSE 350
HIGH DISPLEJ_1
Lookup i,[0,63,6,91,79,102,109,125,7,127,111],TEMP
Mem_broj(1) = temp
write 0,Mem_broj(1)
endif
next i
IF TASTER_JEDAN = 0 THEN
PORTB=Mem_broj(2)
PAUSE 1000
GOTO SET_DRG_BR
ENDIF
HIGH DISPLEJ_2 :HIGH DISPLEJ_3 :HIGH DISPLEJ_4
LOW DISPLEJ_1
PORTB=Mem_broj(1) :PAUSE BRZINA
HIGH DISPLEJ_1
GOTO SET_PRV_BR
;*************************************************
SET_DRG_BR:
FOR I = 1 TO 11
IF TASTER_dva = 0 THEN
HIGH DISPLEJ_1 :HIGH DISPLEJ_3 :HIGH DISPLEJ_4
LOW DISPLEJ_2
PORTB=Mem_broj(2) :PAUSE 400
HIGH DISPLEJ_2
Lookup i,[0,63,6,91,79,102,109,125,7,127,111],TEMP
Mem_broj(2) = temp
write 1,Mem_broj(2)
endif
next i
IF TASTER_JEDAN = 0 THEN
PAUSE 1000
GOTO SET_TRI_BR
ENDIF
HIGH DISPLEJ_1 :HIGH DISPLEJ_3 :HIGH DISPLEJ_4
LOW DISPLEJ_2
PORTB=Mem_broj(2) :PAUSE BRZINA
HIGH DISPLEJ_2
GOTO SET_DRG_BR
;**************************************************************
SET_TRI_BR:
FOR I = 1 TO 11
IF TASTER_dva = 0 THEN
HIGH DISPLEJ_1 :HIGH DISPLEJ_2 :HIGH DISPLEJ_4
LOW DISPLEJ_3
PORTB=Mem_broj(3) :PAUSE 400
HIGH DISPLEJ_3
Lookup i,[0,63,6,91,79,102,109,125,7,127,111],TEMP
Mem_broj(3) = temp
write 2,Mem_broj(3)
endif
next i
IF TASTER_JEDAN = 0 THEN
PAUSE 1000
GOTO SET_CET_BR
ENDIF
HIGH DISPLEJ_1 :HIGH DISPLEJ_2 :HIGH DISPLEJ_4
LOW DISPLEJ_3
PORTB=Mem_broj(3) :PAUSE BRZINA
HIGH DISPLEJ_3
GOTO SET_TRI_BR
;**************************************************************
SET_CET_BR:
FOR I = 1 TO 11
IF TASTER_dva = 0 THEN
HIGH DISPLEJ_1 :HIGH DISPLEJ_2 :HIGH DISPLEJ_3
LOW DISPLEJ_4
PORTB=Mem_broj(4) :PAUSE 400
HIGH DISPLEJ_4
Lookup i,[0,63,6,91,79,102,109,125,7,127,111],TEMP
Mem_broj(4) = temp
write 3,Mem_broj(4)
endif
next i
IF TASTER_JEDAN = 0 THEN
PAUSE 1000
GOTO Citaj_memoriju
ENDIF
HIGH DISPLEJ_1 :HIGH DISPLEJ_2 :HIGH DISPLEJ_3
LOW DISPLEJ_4
PORTB=Mem_broj(4) :PAUSE BRZINA
HIGH DISPLEJ_4
GOTO SET_CET_BR