#93 MilanL
Vím vím odpovídala jsem takkdzy tka tam
Příspěvky odeslané z IP adresy 77.48.31.–
mam tak trochu zmatek v tech kodec -,- tak ktery mam ppouzit
mno jasny ja vbychazim ztoho co jsme programovali :) zitra vyzjkousim :)
Ale ja ten kod nedam do tohodle ne ?
KLAV EQU P2 ;port s klávesnicí
DISP EQU P0 ;port s displejem
MARK EQU 6CH ;ukazatel videoRAM
JED EQU 35H ;registr jednotek
DES EQU 34H ;registr desítek
STO EQU 33H ;registr stovek
TIS EQU 32H ;registr tisíců
DIS EQU 31H ;registr desítek tisíc
DAT EQU DISP.0 ;data pro displej
CLK EQU DISP.1 ;hodiny pro displej
BLANK EQU DISP.2 ;strobovací pulzy pro displej
STISK BIT 6CH ;byl zachycen stisk
IDENT BIT 6EH ;klávesa byla rozpoznána
POCET EQU 36H
VSTUP DATA 30H
;Nulování VIDEORAM
ZAC: MOV JED,#0
MOV DES,#0
MOV STO,#0
MOV TIS,#0
MOV DIS,#0
JMP HLAVNI1
start_pismeno: jmp hlavni1
jmp start_cislo
start_cislo: jmp hlavni0
jmp start_cislo
HLAVNI1:CALL TEST ;test klávesnice
JNB STISK,HLAVNI1;nebyl-li stisk, opakuj test
CALL DEKOD_pismena ;dekódování SCAN kódu
JNB IDENT,HLAVNI1;kontrola
ORL A,#10H ;aktivizace znaku (v 5. bitu H)
MOV DIS,A ;znak na pozici desítek
CALL DISPLEJ ;zobrazení znaku
CALL DELAY ;podržení znaku na displeji
CLR STISK
JMP start_cislo
;------------------------------------------------------------pismeno-----------------
HLAVNI0:CALL TEST ;test klávesnice
JNB STISK,HLAVNI0;nebyl-li stisk, opakuj test
CALL DEKOD ;dekódování SCAN kódu
JNB IDENT,HLAVNI0;kontrola
ORL A,#10H ;aktivizace znaku (v 5. bitu H)
MOV DIS,A ;znak na pozici desítek
CALL DISPLEJ ;zobrazení znaku
CALL DELAY ;podržení znaku na displeji
CLR STISK
HLAVNI2:CALL TEST ;test klávesnice
JNB STISK,HLAVNI2;nebyl-li stisk, opakuj test
CALL DEKOD ;dekódování SCAN kódu
JNB IDENT,HLAVNI2;kontrola
ORL A,#10H ;aktivizace znaku (v 5. bitu H)
MOV TIS,A ;znak na pozici stovek
CALL DISPLEJ ;zobrazení znaku
CALL DELAY ;podržení znaku na displeji
CLR STISK
HLAVNI3:CALL TEST ;test klávesnice
JNB STISK,HLAVNI3;nebyl-li stisk, opakuj test
CALL DEKOD ;dekódování SCAN kódu
JNB IDENT,HLAVNI3;kontrola
ORL A,#10H ;aktivizace znaku (v 5. bitu H)
MOV STO,A ;znak na pozici tisíc
CALL DISPLEJ ;zobrazení znaku
CALL DELAY ;podržení znaku na displeji
CLR STISK
HLAVNI4:CALL TEST ;test klávesnice
JNB STISK,HLAVNI4;nebyl-li stisk, opakuj test
CALL DEKOD ;dekódování SCAN kódu
JNB IDENT,HLAVNI4;kontrola
ORL A,#10H ;aktivizace znaku (v 5. bitu H)
MOV DES,A ;znak na pozici deset tisíc
CALL DISPLEJ ;zobrazení znaku
CALL DELAY ;podržení znaku na displeji
CLR STISK
HLAVNI5:CALL TEST ;test klávesnice
JNB STISK,HLAVNI5;nebyl-li stisk, opakuj test
CALL DEKOD ;dekódování SCAN kódu
JNB IDENT,HLAVNI5;kontrola
ORL A,#10H ;aktivizace znaku (v 5. bitu H)
MOV JED,A ;znak na pozici deset tisíc
CALL DISPLEJ ;zobrazení znaku
CALL DELAY ;podržení znaku na displeji
CLR STISK
JMP hlavni0
;----------------------cisla---------------
TEST: MOV R7,#4 ;počet rotací
MOV A,#0F7H ;příprava testovacího slova (11110111)
KL2: MOV KLAV,A ;pro 1. sloupec
KL5: CJNE A,KLAV,KL3 ;byl zachycen stisk, sejmi SCAN a konec
DJNZ R7,KL1 ;byly otestovány všechny sloupce?
CLR STISK ;vynulování příznakového bitu - nebyl stisk
JMP KL4 ;byly otestovány všechny sloupce - konec testu
KL1: RR A ;pochodující 0 na další sloupec
JMP KL2 ;test dalšího sloupce
KL3: MOV A,KLAV ;sejmutí SCAN kódu
SETB STISK ;nastavení příznakového bitu - byl stisk
KL4: RET
;-----------------------------------------kontrola----------------------------
DEKod_pismena: CJNE A,#0E7H,DEK13
MOV A,#12 ;stisknuta A (displej U)
JMP DEK_EN
DEK13: CJNE A,#0D7H,DEK14
MOV A,#13 ;stisknuta B (displej d)
JMP DEK_END
DEK14: CJNE A,#0B7H,DEK15
MOV A,#14 ;stisknuta C (displej c)
JMP DEK_EN
DEK15: CJNE A,#77H,DEK_16
MOV A,#15 ;stisknuta D (displej A)
JMP DEK_EN
DEK_16: CLR IDENT ;chyby nalezeny, klávesnice neidentifikována
JMP DEK_17
DEK_EN:SETB IDENT ;klávesnice byly úspěšně identifikovány
DEK_17: RET
;--------------doked pismena-------------------------
DEKOD: CJNE A,#7DH,DEK1
MOV A,#0 ;stisknuta 0
JMP DEK_END ;konec analýzy
DEK1: CJNE A,#0EEH,DEK2
MOV A,#1 ;stisknuta 1
JMP DEK_END
DEK2: CJNE A,#0EDH,DEK3
MOV A,#2 ;stisknuta 2
JMP DEK_END
DEK3: CJNE A,#0EBH,DEK4
MOV A,#3 ;stisknuta 3
JMP DEK_END
DEK4: CJNE A,#0DEH,DEK5
MOV A,#4 ;stisknuta 4
JMP DEK_END
DEK5: CJNE A,#0DDH,DEK6
MOV A,#5 ;stisknuta 5
JMP DEK_END
DEK6: CJNE A,#0DBH,DEK7
MOV A,#6 ;stisknuta 6
JMP DEK_END
DEK7: CJNE A,#0BEH,DEK8
MOV A,#7 ;stisknuta 7
JMP DEK_END
DEK8: CJNE A,#0BDH,DEK9
MOV A,#8 ;stisknuta 8
JMP DEK_END
DEK9: CJNE A,#0BBH,DEK_20
MOV A,#9 ;stisknuta 9
JMP DEK_END
DEK_20: CLR IDENT ;chyby nalezeny, klávesnice neidentifikována
JMP DEK_21
DEK_END:SETB IDENT ;klávesnice byly úspěšně identifikovány
DEK_21: RET
;------------dekod cisla---------------------------
DISPLEJ:CLR CLK ;CLK
SETB BLANK ;zablokování anod
MOV R6,#5 ;počet míst displeje
MOV R0,#JED ;ukazatel videopaměti
DIS4: MOV A,@R0 ;číslo do ACC
MOV R7,#5 ;počet rotací (posuvný registr displeje je 5bitový)
DIS1: RRC A ;rotace přes CARRY
MOV DAT,C ;bit na port
SETB CLK ;čele posunovacího pulzu
CLR CLK ;týl posunovacího pulzu
DJNZ R7,DIS1 ;kontrola počtu rotací
DJNZ R6,DIS2 ;kontrola počtu odeslaných znaků
CLR BLANK ;odblokování anod
JMP DIS3
DIS2: DEC R0 ;posuv ukazatele na další znak
JMP DIS4
DIS3: RET
;------------- Zpoždění -----------------------------
;Podprogram DELAY má zpoždění asi 65 ms (pro f = 12 MHz)
DELAY: MOV R0,#255
DEL1: MOV R1,#255
DJNZ R1,$
DJNZ R0,DEL1
RET
BACK: MOV A,POCET
END
tak jinak :D
proste kdyz zmacknu a tak se ma zadat heslo 5 mistne (maji se uakzovat jen pomlcky ale to se doladi)
tak ze kdyz zapojim program zmacknu (treba) A a pak to to po mne bude chtit heslo (treba 58963) a pak to zablika za houka ( to houkani neresim) a pokud to heslo bude spatny nezablika to a jen dlouze za houka
tak že ja jednoduse potrebuji abych mohla dat heslo na A
LAV EQU P2 ;port s klávesnicí
DISP EQU P0 ;port s displejem
MARK EQU 6CH ;ukazatel videoRAM
JED EQU 35H ;registr jednotek
DES EQU 34H ;registr desítek
STO EQU 33H ;registr stovek
TIS EQU 32H ;registr tisíců
DIS EQU 31H ;registr desítek tisíc
STD EQU 30H
DAT EQU DISP.0 ;data pro displej
CLK EQU DISP.1 ;hodiny pro displej
BLANK EQU DISP.2 ;strobovací pulzy pro displej
STISK BIT 6CH ;byl zachycen stisk
IDENT BIT 6EH ;klávesa byla rozpoznána
POCET EQU 36H
VSTUP DATA 30H
;Nulování VIDEORAM
ZAC: MOV JED,#0
MOV DES,#0
MOV STO,#0
MOV TIS,#0
MOV DIS,#0
JMP HLAVNI
start_pismeno: call hlavni
jmp start_cislo
start_cislo: call start
JMP_HLAVNI
HLAVNI: CALL TEST ;test klávesnice
JNB STISK,HLAVNI;nebyl-li stisk, opakuj test
CALL DEKOD_pismena ;dekódování SCAN kódu
JNB IDENT,HLAVNI;kontrola
ORL A,#10H ;aktivizace znaku (v 5. bitu H)
MOV STD,A ;znak na pozici jednotek
CALL DISPLEJ ;zobrazení znaku
CALL DELAY ;podržení znaku na displeji
CLR STISK
JMP HLAVNI1
HLAVNI1:CALL TEST ;test klávesnice
JNB STISK,HLAVNI1;nebyl-li stisk, opakuj test
CALL DEKOD_pismena ;dekódování SCAN kódu
JNB IDENT,HLAVNI1;kontrola
ORL A,#10H ;aktivizace znaku (v 5. bitu H)
MOV DIS,A ;znak na pozici desítek
CALL DISPLEJ ;zobrazení znaku
CALL DELAY ;podržení znaku na displeji
CLR STISK
JMP start_cislo
;------------------------------------------------------------pismeno-----------------
start: CALL TEST ;test klávesnice
JNB STISK,start;nebyl-li stisk, opakuj test
CALL DEKOD ;dekódování SCAN kódu
JNB IDENT,start;kontrola
ORL A,#10H ;aktivizace znaku (v 5. bitu H)
MOV STD,A ;znak na pozici jednotek
CALL DISPLEJ ;zobrazení znaku
CALL DELAY ;podržení znaku na displeji
CLR STISK
JMP HLAVNI0
HLAVNI0:CALL TEST ;test klávesnice
JNB STISK,HLAVNI0;nebyl-li stisk, opakuj test
CALL DEKOD ;dekódování SCAN kódu
JNB IDENT,HLAVNI0;kontrola
ORL A,#10H ;aktivizace znaku (v 5. bitu H)
MOV DIS,A ;znak na pozici desítek
CALL DISPLEJ ;zobrazení znaku
CALL DELAY ;podržení znaku na displeji
CLR STISK
JMP HLAVNI2
HLAVNI2:CALL TEST ;test klávesnice
JNB STISK,HLAVNI2;nebyl-li stisk, opakuj test
CALL DEKOD ;dekódování SCAN kódu
JNB IDENT,HLAVNI2;kontrola
ORL A,#10H ;aktivizace znaku (v 5. bitu H)
MOV TIS,A ;znak na pozici stovek
CALL DISPLEJ ;zobrazení znaku
CALL DELAY ;podržení znaku na displeji
CLR STISK
JMP HLAVNI3
HLAVNI3:CALL TEST ;test klávesnice
JNB STISK,HLAVNI3;nebyl-li stisk, opakuj test
CALL DEKOD ;dekódování SCAN kódu
JNB IDENT,HLAVNI3;kontrola
ORL A,#10H ;aktivizace znaku (v 5. bitu H)
MOV STO,A ;znak na pozici tisíc
CALL DISPLEJ ;zobrazení znaku
CALL DELAY ;podržení znaku na displeji
CLR STISK
JMP HLAVNI4
HLAVNI4:CALL TEST ;test klávesnice
JNB STISK,HLAVNI4;nebyl-li stisk, opakuj test
CALL DEKOD ;dekódování SCAN kódu
JNB IDENT,HLAVNI4;kontrola
ORL A,#10H ;aktivizace znaku (v 5. bitu H)
MOV DES,A ;znak na pozici deset tisíc
CALL DISPLEJ ;zobrazení znaku
CALL DELAY ;podržení znaku na displeji
CLR STISK
JMP HLAVNI5
HLAVNI5:CALL TEST ;test klávesnice
JNB STISK,HLAVNI5;nebyl-li stisk, opakuj test
CALL DEKOD ;dekódování SCAN kódu
JNB IDENT,HLAVNI5;kontrola
ORL A,#10H ;aktivizace znaku (v 5. bitu H)
MOV JED,A ;znak na pozici deset tisíc
CALL DISPLEJ ;zobrazení znaku
CALL DELAY ;podržení znaku na displeji
CLR STISK
JMP start
;----------------------cisla---------------
TEST: MOV R7,#4 ;počet rotací
MOV A,#0F7H ;příprava testovacího slova (11110111)
KL2: MOV KLAV,A ;pro 1. sloupec
KL5: CJNE A,KLAV,KL3 ;byl zachycen stisk, sejmi SCAN a konec
DJNZ R7,KL1 ;byly otestovány všechny sloupce?
CLR STISK ;vynulování příznakového bitu - nebyl stisk
JMP KL4 ;byly otestovány všechny sloupce - konec testu
KL1: RR A ;pochodující 0 na další sloupec
JMP KL2 ;test dalšího sloupce
KL3: MOV A,KLAV ;sejmutí SCAN kódu
SETB STISK ;nastavení příznakového bitu - byl stisk
KL4: RET
;-----------------------------------------kontrola----------------------------
DEKod_pismena: CJNE A,#0E7H,DEK13
MOV A,#12 ;stisknuta A (displej U)
JMP DEK_EN
DEK13: CJNE A,#0D7H,DEK14
MOV A,#13 ;stisknuta B (displej d)
JMP DEK_END
DEK14: CJNE A,#0B7H,DEK15
MOV A,#14 ;stisknuta C (displej c)
JMP DEK_EN
DEK15: CJNE A,#77H,DEK_16
MOV A,#15 ;stisknuta D (displej A)
JMP DEK_EN
DEK_16: CLR IDENT ;chyby nalezeny, klávesnice neidentifikována
JMP DEK_17
DEK_EN:SETB IDENT ;klávesnice byly úspěšně identifikovány
DEK_17: RET
;--------------doked pismena-------------------------
DEKOD: CJNE A,#7DH,DEK1
MOV A,#0 ;stisknuta 0
JMP DEK_END ;konec analýzy
DEK1: CJNE A,#0EEH,DEK2
MOV A,#1 ;stisknuta 1
JMP DEK_END
DEK2: CJNE A,#0EDH,DEK3
MOV A,#2 ;stisknuta 2
JMP DEK_END
DEK3: CJNE A,#0EBH,DEK4
MOV A,#3 ;stisknuta 3
JMP DEK_END
DEK4: CJNE A,#0DEH,DEK5
MOV A,#4 ;stisknuta 4
JMP DEK_END
DEK5: CJNE A,#0DDH,DEK6
MOV A,#5 ;stisknuta 5
JMP DEK_END
DEK6: CJNE A,#0DBH,DEK7
MOV A,#6 ;stisknuta 6
JMP DEK_END
DEK7: CJNE A,#0BEH,DEK8
MOV A,#7 ;stisknuta 7
JMP DEK_END
DEK8: CJNE A,#0BDH,DEK9
MOV A,#8 ;stisknuta 8
JMP DEK_END
DEK9: CJNE A,#0BBH,DEK_20
MOV A,#9 ;stisknuta 9
JMP DEK_END
DEK_20: CLR IDENT ;chyby nalezeny, klávesnice neidentifikována
JMP DEK_21
DEK_END:SETB IDENT ;klávesnice byly úspěšně identifikovány
DEK_21: RET
;------------dekod cisla---------------------------
DISPLEJ:CLR CLK ;CLK
SETB BLANK ;zablokování anod
MOV R6,#5 ;počet míst displeje
MOV R0,#JED ;ukazatel videopaměti
DIS4: MOV A,@R0 ;číslo do ACC
MOV R7,#5 ;počet rotací (posuvný registr displeje je 5bitový)
DIS1: RRC A ;rotace přes CARRY
MOV DAT,C ;bit na port
SETB CLK ;čele posunovacího pulzu
CLR CLK ;týl posunovacího pulzu
DJNZ R7,DIS1 ;kontrola počtu rotací
DJNZ R6,DIS2 ;kontrola počtu odeslaných znaků
CLR BLANK ;odblokování anod
JMP DIS3
DIS2: DEC R0 ;posuv ukazatele na další znak
JMP DIS4
DIS3: RET
;------------- Zpoždění -----------------------------
;Podprogram DELAY má zpoždění asi 65 ms (pro f = 12 MHz)
DELAY: MOV R0,#255
DEL1: MOV R1,#255
DJNZ R1,$
DJNZ R0,DEL1
RET
BACK: MOV A,POCET
END
ALE NWM KAm to zaradit
Mno pro mně je boj cele tohle :D
tak ze i kdyz zmacknu jine tlacitko pujde to jo ?
My jsme žádné schéma nedostali.
Mám zadaný příklad, aby po pripojeni napajecich napeti blikala na displeji desetina tecka. Nevite nekdo jak to naprogramovat ? Máme to ted ve skole, a ja jsem na to nejak chybel, tak nevím co s tim.
Já bych se to chtěla naučit ale bohužel nemám nikoho kdo by mi poradil s tím.
Dobrý den ,
neuměl by tu někdo dobře programovat Intel 8051.Potřebovala bych poradit pár věcí.