Module #6: Alert Mode Code
; ALERT MENU (MODULE #6)
$NOMOD51 ; omit assembler micro definitions
$Include(reg515.inc) ; define 515 micro
Name ALERT_MENU
PUBLIC ALERTMENU
EXTRN CODE (KPD,LCDOUT,ALERT,LCDINIT,MAIN_LOOP)
ALRT SEGMENT CODE
RSEG ALRT ; switch to this code segment
USING 0 ; use register_bank 0
;**********************************************************************************************
ALERTMENU:
MOV A,#1AH ;CLEARS LCD SCREEN
CALL LCDOUT ;
MOV B,#4
CLR A
MOV DPTR,#ASCII ;MOVES DATA TABLE INTO DPTR
MOVC A,@A+DPTR ;MOVES DPTR INTO ACC
MOV R0,#15 ;MOVES 15 INTO REGISTER 0
ALERTMENU2:
JZ LOOPEXIT
CALL LCDOUT
INC DPTR ;INCREMENTS THE MEMORY LOCATION IN DPTR TO
;THE NEXT LETTER TO DISPLAY
MOVX A,@DPTR
ALERT_LOOP:
DJNZ R0,ALERTMENU2 ;LOOPS UNTIL R0 IS 0 IN ORDER TO DISPLAY ALL THE ;TEXT SAVED IN ACC
MOV @R1,A ;STORE ID# IN R0
CALL KPD
DJNZ B,KPD_LOOP ;WHEN THE LAST ITEM IS REACHED (B=0)
CJNE A,#45H,RETURN ;DOUBLE CHECK KEYPAD FOR E BEFORE DISPLAYING ;EACH ITEM AGAIN
SJMP ENTER ;OTHERWISE WAIT FOR KEY
RETURN:
CJNE A,#42H,ALERTMENU ;DOUBLE CHECKS THE KEYPAD BEFORE RETURNING
SJMP BACK ;TO THE TOP OF THE LIST (B = BACK TO MAIN MENU)
;WAIT FOR KEYPAD ENTRY, ENTER OR NEXT ITEM
;IF ENTER: ADD 1 TO A (PUSH A FIRST TO REOPEN SAVED VALUE)
;IF NEXT: ADD 2 TO A TO MOVE ONTO THE NEXT ITEM NAME
KPD_LOOP:
CJNE A,#42H,COMMANDS ;B = BACK TO MAIN MENU
SJMP BACK
BACK:
;IF B IS PRESSED, THE LCD WILL
MOV A,#1AH ;CLEAR THE SCREEN AND
CALL LCDOUT ;
JMP MAIN_LOOP ;DISPLAY THE MAIN MENU AGAIN
COMMANDS:
CJNE A,#46H,ENTER ;F = NEXT
SJMP NEXT
ENTER:
CJNE A,#45H,WAIT ;E = ENTER
MOV A,#0AH ;SKIPS TO THE NEXT LINE ON THE LCD
CALL LCDOUT
MOV DPTR,#TRANS ;MOVES "TRANSMITTING..." INTO DPTR
MOV A,#0DH ;MOVES CURSOR TO BEGINNING OF LINE 2
CALL LCDOUT
TRANSMITTING: ;THIS CODE DISPLAYS "Transmitting..."
;UNDER THE ITEM NAME WHEN THE ALERT
CLR A ;BUTTON IS PRESSED
MOVC A,@A+DPTR
JZ TRANSEXIT
CALL LCDOUT
INC DPTR
CALL TRANSMITTING ;LOOP UNTIL ALL LETTERS ARE DISPLAYED
CALL ALERT
MOV A,#1AH ;CLEAR LCD
CALL LCDOUT ;
JMP MAIN_LOOP ;AFTER TRANSMISSION, THE LCD WILL
;DIPLAY THE MAIN MENU AGAIN
TRANSEXIT:
RET
NEXT:
MOV A,#1AH ;CLEARS LCD FOR NEXT
CALL LCDOUT ;ITEM TO BE DISPLAYED
INC DPTR ;MOVES THE DPTR TO THE NEXT LINE ON THE ASCII ;TABLE
MOVX A,@DPTR ;STORES THE NEXT LINE IN ACC
MOV R0,#15
JNZ ALERTMENU2
SJMP ALERTMENU
WAIT:
CALL KPD
JMP KPD_LOOP
LOOPEXIT:
RET
ASCII:
;PUT ASCII TABLE HERE
;first item name(in ASCII),ID#
;DB Ph,Hh,Oh,Nh,Eh,sph,sph,sph,sph,sph,sph,sph,sph,sph,sph,IDh
;second item
;db , , , , , , , , , , , , , , , ,ID2h
db 50h,48h,4Fh,4Eh,45h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,33h ;PHONE
db 52h,45h,4Dh,4Fh,54h,45h,20h,20h,20h,20h,20h,20h,20h,20h,20h,55h ;REMOTE
db 4Bh,45h,59h,53h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,0FFh ;KEYS
db 48h,45h,41h,44h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,20h,39h ;HEAD
TRANS:
DB "Transmitting....",0 ;Displays "Transmitting...." when alert
;button is pressed
END