
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,...

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