SYMBOL RS = 1 ; 0 = Command 1 = Data SYMBOL E = 3 ; 0 = Idle 1 = Active SYMBOL DB4 = 4 ; LCD Data Line 4 SYMBOL DB5 = 5 ; LCD Data Line 5 SYMBOL DB6 = 6 ; LCD Data Line 6 SYMBOL DB7 = 7 ; LCD Data Line 7 SYMBOL RSCMDmask = %00000000 ; Select Command register SYMBOL RSDATmask = %00000010 ; Select Data register SYMBOL Hent = b11 SYMBOL Byt = b12 SYMBOL rsbit = b13 Symbol Gammel = W0 symbol NyVerdi = W1 Symbol Tmin = W2 Symbol Tmax = W3 Symbol I = B8 Symbol J = B9 Symbol Tone_MSB = 80 Symbol Tone_LSB = 81 Symbol Flash_MSB = 82 Symbol Flash_LSB = 83 Symbol Camera_MSB = 84 Symbol Camera_LSB = 85 Symbol Bryter_LSB = 86 Symbol BryterPin = pin3 Symbol Kamera = 0 Init: poke Tone_LSB, 0 poke Tone_MSB, 0 poke Flash_LSB, 0 poke Flash_MSB, 0 poke Camera_LSB, 0 poke Camera_MSB, 0 EEPROM 6, ("Cam Fl ") EEPROM 22,("Sound ") setint %10000000,%10000000 PowerOnReset: GOSUB InitialiseLcd main: gosub SjekkTone gosub SjekkFlash gosub SjekkKamera gosub SjekkBryter goto main '--- Funksjoner ----------------------------- SjekkTone: Readadc10 3,NyVerdi Tmin = NyVerdi -2 if Tmin > 1024 then Tmin = 1 end if Tmax = NyVerdi +2 if Tmax > 1024 then Tmax = 1024 end if 'Gammel verdi finnes i CPU register Peek Tone_LSB, b0 Peek Tone_MSB, b1 if Gammel < Tmin OR Gammel > Tmax then Poke Tone_LSB,b2 Poke Tone_MSB,b3 gosub Oppdater end if return SjekkFlash: Readadc10 1,NyVerdi Tmin = NyVerdi -2 if Tmin > 1024 then Tmin = 1 end if Tmax = NyVerdi +2 if Tmax > 1024 then Tmax = 1024 end if 'Gammel verdi finnes i CPU register Peek Flash_LSB, b0 Peek Flash_MSB, b1 if Gammel < Tmin OR Gammel > Tmax then Poke Flash_LSB,b2 Poke Flash_MSB,b3 gosub Oppdater end if return SjekkKamera: Readadc10 2,NyVerdi Tmin = NyVerdi -2 if Tmin > 1024 then Tmin = 1 end if Tmax = NyVerdi +2 if Tmax > 1024 then Tmax = 1024 end if 'Gammel verdi finnes i CPU register Peek Camera_LSB, b0 Peek Camera_MSB, b1 if Gammel < Tmin OR Gammel > Tmax then Poke Camera_LSB,b2 Poke Camera_MSB,b3 gosub Oppdater end if return SjekkBryter: b0 = BryterPin Peek Bryter_LSB, b1 if b0 <> b1 then Poke Bryter_LSB,b0 gosub Oppdater end if return Klikk: Peek Flash_LSB, b0 Peek Flash_MSB, b1 Peek Camera_LSB, b2 Peek Camera_MSB, b3 high portc 2 'kamera on pause W1 'Kamera offset før tone starter High portc 0 'tone on pause W0 'Blits offset før bilde tas high portc 1 'Blits on pause 50 low portc 0 low portc 1 low portc 2 return Oppdater: 'high portc 4 'Blinker LED 'pause 1000 'low portc 4 'Setter opp nye verdier for Kamera Peek Camera_LSB, b0 Peek Camera_MSB, b1 write 10," " 'Blanker gammelt felt write 11," " write 12," " write 13," " I = 13 'posisjon for bokstav (vi skriver bakover) CameraDigit: w1 = w0 // 10 w1 = w1 + 48 Write I, w1 I = I - 1 w0 = w0 / 10 if w0 <> 0 then CameraDigit 'Setter opp nye verdier for Flash Peek Flash_LSB, b0 Peek Flash_MSB, b1 write 18," " 'Blanker gammelt felt write 19," " write 20," " write 21," " I = 21 'posisjon for bokstav (vi skriver bakover) FlashDigit: w1 = w0 // 10 w1 = w1 + 48 Write I, w1 I = I - 1 w0 = w0 / 10 if w0 <> 0 then FlashDigit 'Setter opp nye verdier for Tone Peek Tone_LSB, b0 Peek Tone_MSB, b1 W0 = W0 / 8 write 28," " 'Blanker gammelt felt write 29," " write 30," " I = 30 'posisjon for bokstav (vi skriver bakover) ToneDigit: b1 = b0 // 10 b1 = b1 + 48 Write I, b1 I = I - 1 b0 = b0 / 10 if b0 <> 0 then ToneDigit 'Setter opp Tone / Noise Peek Bryter_LSB, b0 if b0 = 1 then write 32,"W" write 33,"h" write 34,"i" write 35,"t" write 36,"e" write 37," " else write 32,"N" write 33,"o" write 34,"t" write 35,"e" write 36," " write 37," " end if 'Skriver ut Write 6,"C" Write 7,"a" Write 8,"m" Write 9," " Byt = $80 GOSUB SendCmdByt FOR Hent = 6 TO 21 READ Hent,Byt GOSUB SendDataByt NEXT Byt = $C0 GOSUB SendCmdByt FOR Hent = 22 TO 37 READ Hent,Byt GOSUB SendDataByt NEXT return '----------- LCD rutiner ----------- InitialiseLcd: FOR Hent = 0 TO 5 READ Hent,Byt GOSUB SendInitCmdByt NEXT ' Nibble commands - To initialise 4-bit mode EEPROM 0,( $33 ) ; %0011---- %0011---- 8-bit / 8-bit EEPROM 1,( $32 ) ; %0011---- %0010---- 8-bit / 4-bit ' Byt commands - To configure the LCD EEPROM 2,( $28 ) ; %00101000 %001LNF00 Display Format EEPROM 3,( $0C ) ; %00001100 %00001DCB Display On EEPROM 4,( $06 ) ; %00000110 %000001IS Cursor Move ; L : 0 = 4-bit Mode 1 = 8-bit Mode ; N : 0 = 1 Line 1 = 2 Lines ; F : 0 = 5x7 Pixels 1 = N/A ; D : 0 = Display Off 1 = Display On ; C : 0 = Cursor Off 1 = Cursor On ; B : 0 = Cursor Steady 1 = Cursor Flash ; I : 0 = Dec Cursor 1 = Inc Cursor ; S : 0 = Cursor Move 1 = Display Shift EEPROM 5,( $01 ) ; Clear Screen RETURN SendInitCmdByt: PAUSE 15 ; Delay 15mS SendCmdByt: rsbit = RSCMDmask ; Send to Command register SendDataByt: pins = Byt & %11110000 | rsbit ; Put MSB out first PULSOUT E,1 ; Give a 10uS pulse on E pins = Byt * %00010000 | rsbit ; Put LSB out second PULSOUT E,1 ; Give a 10uS pulse on E rsbit = RSDATmask ; Send to Data register next RETURN interrupt: gosub Klikk pause 1000 setint %10000000,%10000000 return