Witam moze ktos mi pomoze, potrzebuje program ktory bedzie pobieral z klawiatury 1234567890#* kod (4 cyfrowy) i zapisywal, dokladnych szczegołów nie znam ;/ ale chodzi o program ktory by po wcisnieciu odp sekwencji klawiszy np #1* pobieral 4 cyfry i zapisywal do pamieci (zeby sie puzniej dalo tez te wpisy kasowac) wiem ze chaotycznie pisze, ale jestes w desperacji moze ktos pomoze ?
To jest czesc programu ktory by pobieral cyfry i sprawdzal z zapisanymi a jezeli by sie zgadzal zapalala by sie zielona dioda i uzbrajal alarm badz rozbrajal, tylko ja mam ta czesc z wpisywaniem hasla do pamieci ;/ Program mozliwie jak najprostrzy a wszystkie inne szczegoly dowolny
chcialbym zeby ktos pokazal mi jak mozna napisac taki program w asemblerze (zrodlo)
wszystko dowolne mikrokontroler ma byc z rodziny 8051
do pamieci takiej gdzie bedziemy mogli wpisywac odczytywac i kasowac(reszta dowolna)
kurde jeszcze z tym nie ruszylem i nie wiem jak sie za to wziasc :/ prosze o szybka pomoc
Edit znalazlem cos na ten temat ale sam nie wiem czy to jest to czego szukam bo troszke tego kodu nie rozumiem wklejam go ponizej:
To jest czesc programu ktory by pobieral cyfry i sprawdzal z zapisanymi a jezeli by sie zgadzal zapalala by sie zielona dioda i uzbrajal alarm badz rozbrajal, tylko ja mam ta czesc z wpisywaniem hasla do pamieci ;/ Program mozliwie jak najprostrzy a wszystkie inne szczegoly dowolny
chcialbym zeby ktos pokazal mi jak mozna napisac taki program w asemblerze (zrodlo)
wszystko dowolne mikrokontroler ma byc z rodziny 8051
do pamieci takiej gdzie bedziemy mogli wpisywac odczytywac i kasowac(reszta dowolna)
kurde jeszcze z tym nie ruszylem i nie wiem jak sie za to wziasc :/ prosze o szybka pomoc
Edit znalazlem cos na ten temat ale sam nie wiem czy to jest to czego szukam bo troszke tego kodu nie rozumiem wklejam go ponizej:
$mod51
PILOT equ P3.2
ALARM equ P3.3
LED equ P3.4
LCD_D7 equ P2.0
LCD_D6 equ P2.1
LCD_D5 equ P2.2
LCD_D4 equ p2.3
LCD_RS equ P2.4
LCD_E equ P2.5
SCL equ P2.6
SDA equ P2.7
CZUJ0 equ P1.3
CZUJ1 equ P1.4
CZUJ2 equ P1.5
CZUJ3 equ P1.6
KOL1 equ P0.0
KOL2 equ P0.1
KOL3 equ P0.2
POZ1 equ P0.5
POZ2 equ P0.4
POZ3 equ P0.3
POZ4 equ P0.6
Zaplon equ P0.7
Adres equ 50h
Bajt equ 51h
Godz equ 52h
Minu equ 53h
Status equ 54h
org 0h
clr Zaplon
clr LED
lcall WAIT2
lcall LCD_INIT
;powitanie
;czyszcenie LCD
clr C
mov A,#01h
call LCD_WRITE
lcall WAIT
;W->LCD
setb C
mov A,#57h
lcall LCD_WRITE
;I->LCD
setb C
mov A,#49h
lcall LCD_WRITE
;T->LCD
setb C
mov A,#54h
lcall LCD_WRITE
;A->LCD
setb C
mov A,#41h
lcall LCD_WRITE
;M->LCD
setb C
mov A,#4Dh
lcall LCD_WRITE
lcall WAIT2
;ustawianie czasu
return:
;czyszczenie LCD
clr C
mov A,#01h
call LCD_WRITE
lcall WAIT
;GG->LCD
setb C
mov A,#47h
lcall LCD_WRITE
setb C
mov A,#47h
lcall LCD_WRITE
;:->LCD
setb C
mov A,#3Ah
lcall LCD_WRITE
;MM->LCD
setb C
mov A,#4Dh
lcall LCD_WRITE
setb C
mov A,#4Dh
lcall LCD_WRITE
;spacja->LCD
setb C
mov A,#20h
lcall LCD_WRITE
lcall WPISZ
;pobieranie czasu do zapisu
;KEY->x10Godz
lcall WAIT2
lcall KEY_READ
mov R3,A
add A,#30h
setb C
lcall LCD_WRITE
lcall WAIT2
;KEY->x1Godz
lcall KEY_READ
mov R4,A
add A,#30h
setb C
lcall LCD_WRITE
;:->LCD
setb C
mov A,#3Ah
lcall LCD_WRITE
lcall WAIT2
;KEY->x10Minu
lcall KEY_READ
mov R5,A
add A,#30h
setb C
lcall LCD_WRITE
lcall WAIT2
;KEY->x1Minu
lcall KEY_READ
mov R6,A
add A,#30h
setb C
lcall LCD_WRITE
lcall ok_ ;OK?->LCD
lcall WAIT2
;KEY->OK
lcall KEY_READ
cjne A,#0Ch,return
;zatrzymanie zegara
mov Bajt,#80h
mov Adres,#00h
lcall TIME_S
lcall WAIT
;zapis czasu
mov A,R3
swap A
add A,R4
mov Godz,A
mov Bajt,A
mov Adres,#04h
lcall TIME_S
lcall WAIT
mov A,R5
swap A
add A,R6
mov Minu,A
mov Bajt,A
mov Adres,#03h
lcall TIME_S
lcall WAIT
;uruchomienie zegara
mov Bajt,#00h
mov Adres,#00h
lcall TIME_S
lcall WAIT
ljmp close
kod:
;wyczyść LCD
clr C
mov A,#01h
call LCD_WRITE
;K->LCD
setb C
mov A,#4Bh
lcall LCD_WRITE
;O->LCD
setb C
mov A,#4Fh
lcall LCD_WRITE
;D->LCD
setb C
mov A,#44h
lcall LCD_WRITE
;:->LCD
setb C
mov A,#3Ah
lcall LCD_WRITE
lcall WAIT2
;wprowadzanie kodu
;pierwsza cyfra
lcall KEY_READ
mov R3,A
mov A,#2Ah
setb C
lcall LCD_WRITE
lcall WAIT2
;druga cyfra
lcall KEY_READ
mov R4,A
mov A,#2Ah
setb C
lcall LCD_WRITE
lcall WAIT2
;trzecia cyfra
lcall KEY_READ
mov R5,A
mov A,#2Ah
setb C
lcall LCD_WRITE
lcall WAIT2
;czwarta cyfra
lcall KEY_READ
mov R6,A
mov A,#2Ah
setb C
lcall LCD_WRITE
lcall WAIT2
cjne R3,#02h,open ;pierwsza=2?
cjne R4,#07h,open ;druga=7?
mov A,R5
swap A
add A,R6
cjne A,Minu,open ;trzecia i czawarta=Minu??
ljmp off
open:
clr KOL3
jnb PILOT,close
lcall TIME
lcall TEST2
lcall TEST3
JNB POZ4,kod ;wprowadzić kod??
ljmp open
close:
mov A,#01h ;wygaś LCD
call LCD_WRITE
lcall WAIT
close1:
clr LED
clr Zaplon
clr C
jb PILOT,open
lcall TEST1
lcall TEST2
lcall WAIT2
ljmp close1
off: ;alarm rozbrojony
setb LED
setb Zaplon
jnb PILOT,close
lcall TIME
lcall TEST3
ljmp off
;**************************************
;procedury
;**************************************
;LCD
;**********
LCD_INIT:
clr LCD_E
clr LCD_RS
clr LCD_D7
clr LCD_D6
setb LCD_D5
setb LCD_D4
call LCD_ENABLE
call LCD_ENABLE
call LCD_ENABLE
clr LCD_D4
call LCD_ENABLE
mov A,#28h
call LCD_WRITE
mov A,#08h
call LCD_WRITE
mov A,#0Ch ;1
call LCD_WRITE
mov A,#01h
call LCD_WRITE
mov A,#07h
call LCD_WRITE
ret
LCD_WRITE:
mov LCD_RS,C
rlc A
mov LCD_D7,C
rlc A
mov LCD_D6,C
rlc A
mov LCD_D5,C
rlc A
mov LCD_D4,C
call LCD_ENABLE
rlc A
mov LCD_D7,C
rlc A
mov LCD_D6,C
rlc A
mov LCD_D5,C
rlc A
mov LCD_D4,C
call LCD_ENABLE
ret
LCD_ENABLE:
call WAIT
setb LCD_E
call WAIT
clr LCD_E
call WAIT
ret
;****
WPISZ:
;W->LCD
setb C
mov A,#57h
lcall LCD_WRITE
;P->LCD
setb C
mov A,#50h
lcall LCD_WRITE
;I->LCD
setb C
mov A,#49h
lcall LCD_WRITE
;S->LCD
setb C
mov A,#53h
lcall LCD_WRITE
;Z->LCD
setb C
mov A,#5Ah
lcall LCD_WRITE
;druga linia LCD
clr C
mov A,#0C0h
call LCD_WRITE
ret
ok_:
;spacja->LCD
setb C
mov A,#20h
lcall LCD_WRITE
;O->LCD
setb C
mov A,#4Fh
lcall LCD_WRITE
;K->LCD
setb C
mov A,#4Bh
call LCD_WRITE
;?->LCD
setb C
mov A,#3Fh
call LCD_WRITE
ret
;***********
;opoznienia
;***********
WAIT:
mov R1,#01
wewnetrzna_petelka:
mov R2,#0
djnz R2,$
djnz R1,wewnetrzna_petelka;
ret
WAIT1:
mov R1,#200
wewnetrzna_petelka1:
mov R2,#0
djnz R2,$
djnz R1,wewnetrzna_petelka1
ret
WAIT2:
mov R0,#15
wewpet1:
mov R1,#200
wewnetrzna_petelka2:
mov R2,#0
djnz R2,$
djnz R1,wewnetrzna_petelka2
djnz R0,wewpet1
ret
;**************
;PCF8583
;*************
;wyświetlenie czasu na LCD
;************
TIME:
;wyczyść LCD
clr C
mov A,#01h
call LCD_WRITE
;odczyt godzin
mov Adres,#04h
lcall TIME_R
mov Godz,A
;odczyt minut
mov Adres,#03h
lcall TIME_R
mov Minu,A
;wyświetlenie x10G
mov A,Godz
swap A
anl A,#03h
add A,#30h
setb C
lcall LCD_WRITE
;wyświetlenie x1G
mov A,Godz
anl A,#0Fh
add A,#30h
setb C
lcall LCD_WRITE
;:->LCD
setb C
mov A,#3Ah
lcall LCD_WRITE
;wyświetlenie x10M
mov A,Minu
swap A
anl A,#0Fh
add A,#30h
setb C
lcall LCD_WRITE
;wyświetlenie x1M
mov A,Minu
anl A,#0Fh
add A,#30h
setb C
lcall LCD_WRITE
lcall WAIT1
lcall WAIT1
lcall WAIT2
lcall WAIT2
ret
;**************
;odczyt dowolnej komorki PCF8583 Adres=adres A=dana
;************
TIME_R:
CALL I2C_Start ;
JC NoACK1 ; błąd
MOV A,#0A0h ; przygotowanie adresu (do zapisu)
CALL I2C_WriteByte ; zaadresowanie kości [1010]-[0,0,A0]-[R=1/W=0]
JC NoACK1 ;
MOV A,Adres ; 'Adres' - komórka do odczytania
CALL I2C_WriteByte ; wysłanie adresu odczytywanej komórki
JC NoACK1 ;
CALL I2C_Start ;
JC NoACK1 ;
MOV A,#0A1h ; przygotowanie adresu kości (do odczytu)
CALL I2C_WriteByte ; zaadresowanie [1010]-[0,0,A0]-[R=1/W=0]
JC NoACK1 ;
CALL I2C_ReadByte ; odczytanie wskazanej komórki
CALL I2C_WriteNACK ; potwierdzenie NACK
CLR C ; CY=0 - odczyt pomyślny
NoACK1: JMP I2C_Stop ;
ret
;*****************
;zapis komorki PCF8583 Adres=adres Bajt=dana
;*************
TIME_S:
CALL I2C_Start ;
JC NoACK2 ; błąd
MOV A,#0A0h ; przygotowanie adresu
CALL I2C_WriteByte ; zaadresowanie [101000]-[0]-[R=1/W=0]
JC NoACK2 ;
MOV A,Adres ; 'Adres' - komórka do zapisania
CALL I2C_WriteByte ; wysłanie adresu komórki do zapisania
JC NoACK2 ;
MOV A,Bajt ; zapisanie pod wskazany adres
CALL I2C_WriteByte ; zapisanie
NoACK2: JMP I2C_Stop
ret
;****************
;sprawdzanie czujników
;****************
TEST1:
jb CZUJ1,pomin1
clr ALARM
lcall WAIT1
setb ALARM
pomin1:
ret
TEST2:
jb CZUJ2,pomin2
clr ALARM
lcall WAIT1
setb ALARM
pomin2:
ret
TEST3:
jb CZUJ3,pomin3
lcall WAIT2 ;zwłoka na np. ucieczkę
lcall WAIT2
lcall WAIT2
clr ALARM
lcall WAIT1
setb ALARM
clr Zaplon
pomin3:
ret
$include(key.h)
$include(i2clib.h)
end