📄 alamr.asm
字号:
$MOD51
$TITLE(BYTE SIGNED MULTIPLY)
$DEBUG
$NOPAGING
;VECTOR
ORG 0000H
LJMP Start
;EXAMPLE MAIN ********************************************************
CSEG
;Test Program ***************
ORG 30H
Start:
MOV SP,#30H
MOV Scroll,#00H
MOV L_Str,#20
MOV R0,#Buffer
MOV R1,L_Str
MOV DPTR,#Version
L_Buffer:
MOV A,#0
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R1,L_Buffer
CALL Init_RTC
CALL Read_DTime
MOV P1,#11110000B
CLR P2.7
CALL INIT_LCD
CALL CLEAR_LCD
CALL INIT_LCD
CALL CLEAR_LCD
CLR P2.7
MOV DPTR,#Version
CALL First_line
MOV DPTR,#WCome
CALL Second_line
MOV L_Str,#1
MOV Scroll,#Buffer
MOV Scroll_f,#01H
MOV LCD_Addr,#80H
MOV Keys_f,#00H
MOV R4,#00H
MOV R5,#00H
L_T:
CALL Scan_Time
JMP L_T
RET
Scan_keys:
SETB P2.5
ANL P2,#10101111B ;CS_2
SETB CS_CHIP
SETB P1.0
NOP
MOV A,P0
CLR P1.0
CLR CS_CHIP
CJNE A,#0FFH,Keys_press
JMP Keys_Exit
Keys_press:
MOV Keys_code,A
MOV Keys_f,#01H
SETB P2.7
Keys_Exit:
RET
Scan_Time:
ANL P2,#10001111B
SETB CS_CHIP
MOV R0,#REG_A
MOVX A ,@R0
JNB ACC.7,RTC_Jmp
MOV R0,#SEC
MOVX A, @R0
MOV Sec_Cmd,A
MOV R0,#MIN
MOVX A, @R0
MOV Min_Cmd,A
MOV R0,#HOUR
MOVX A, @R0
MOV Hour_Cmd,A
MOV R0,#DAY
MOVX A, @R0
MOV Day_Cmd,A
MOV R0,#MON
MOVX A, @R0
MOV Mon_Cmd,A
MOV R0,#YEAR
MOVX A, @R0
MOV YEAR_Cmd,A
CLR CS_CHIP
CALL Show_DTime
MOV A,Keys_f
JZ RTC_Jmp
INC Keys_f
CJNE A,#5,RTC_Jmp
MOV Keys_f,#00H
CLR P2.7
RTC_Jmp:
CALL Scan_Keys
INC R4
CJNE R4,#200,Scan_Time
MOV R4,#00H
INC R5
CJNE R5,#200,Scan_Time
MOV R5,#00H
CALL Str2Left
JMP Scan_Time
RET
Date_Addr EQU 4100H
Str2Left:
MOV A,Scroll_f
CJNE A,#00H,CentralPause
MOV R0,Scroll
MOV R1,L_Str
MOV R2,LCD_Addr
CALL RWrite
DEC LCD_Addr
INC L_Str
MOV A,L_Str
CJNE A,#21,Str2L_Exit
MOV L_Str,#0
MOV LCD_Addr,#80H
MOV Scroll_f,#01H
JMP Str2L_Exit
CentralPause:
CJNE A,#01H,Central2Left
INC L_Str
MOV A,L_Str
CJNE A,#20,Str2L_Exit
MOV Scroll_f,#02H
JMP Str2L_Exit
Central2Left:
MOV DPTR,#Blank
CALL First_line
MOV R0,Scroll
MOV R1,L_Str
MOV R2,LCD_Addr
CALL RWrite
DEC L_Str
INC Scroll
MOV A,L_Str
CJNE A,#00,Str2L_Exit
MOV L_Str,#1
MOV Scroll,#Buffer
MOV Scroll_f,#00H
MOV LCD_Addr,#93H
Str2L_Exit:
RET
Show_DTime:
CLR RS
MOV A,#0C0H
CALL Write_2_Nibbles
CALL Wait_LCD
MOV A,Day_Cmd
SWAP A
ANL A,#0FH
ADD A,#48
CALL Write_TEXT
MOV A,Day_Cmd
ANL A,#0FH
ADD A,#48
CALL Write_TEXT
MOV A,#'-'
CALL Write_TEXT
MOV A,Mon_Cmd
SWAP A
ANL A,#0FH
ADD A,#48
CALL Write_TEXT
MOV A,Mon_Cmd
ANL A,#0FH
ADD A,#48
CALL Write_TEXT
MOV A,#'-'
CALL Write_TEXT
MOV A,#'2'
CALL Write_TEXT
MOV A,#'0'
CALL Write_TEXT
MOV A,Year_Cmd
SWAP A
ANL A,#0FH
ADD A,#48
CALL Write_TEXT
MOV A,Year_Cmd
ANL A,#0FH
ADD A,#48
CALL Write_TEXT
MOV A,#' '
CALL Write_TEXT
MOV A,#' '
CALL Write_TEXT
MOV A,Hour_Cmd
SWAP A
ANL A,#0FH
ADD A,#48
CALL Write_TEXT
MOV A,Hour_Cmd
ANL A,#0FH
ADD A,#48
CALL Write_TEXT
MOV A,#':'
CALL Write_TEXT
MOV A,Min_Cmd
SWAP A
ANL A,#0FH
ADD A,#48
CALL Write_TEXT
MOV A,Min_Cmd
ANL A,#0FH
ADD A,#48
CALL Write_TEXT
MOV A,#':'
CALL Write_TEXT
MOV A,Sec_Cmd
SWAP A
ANL A,#0FH
ADD A,#48
CALL Write_TEXT
MOV A,Sec_Cmd
ANL A,#0FH
ADD A,#48
CALL Write_TEXT
RET
CS_CHIP EQU P3.2
;********** Real time(RTC) valure ****************
SEC EQU 00H
SEC_AL EQU 01H
MIN EQU 02H
MIN_AL EQU 03H
HOUR EQU 04H
HOUR_AL EQU 05H
WEEKDAY EQU 06H
DAY EQU 07H
MON EQU 08H
YEAR EQU 09H
REG_A EQU 0AH
REG_B EQU 0BH
REG_C EQU 0CH
REG_D EQU 0DH
;*** Date&Time buffer ***
Hour_Cmd EQU 70H
Min_Cmd EQU 71H
Sec_Cmd EQU 72H
Day_Cmd EQU 73H
Mon_Cmd EQU 74H
Year_Cmd EQU 75H
Scroll EQU 76H
L_Str EQU 77H ; Length of string
Scroll_f EQU 78H ; flag
LCD_Addr EQU 79H
Keys_code EQU 7AH
Keys_f EQU 7BH
;*** Buffer of All ***
Buffer EQU 40H
Init_RTC:
ANL P2,#10001111B
SETB CS_Chip
MOV R0,#REG_B ; SET=1
MOV A, #10000000B
MOVX @R0,A
MOV R0,#REG_B
MOV A, #00011010B ; UIE=1, BCD Code, 24H
MOVX @R0,A
; OSC ON ==> DV2 DV1 DV0=010: OSC=ON, INT0=0.5s
MOV R0,#REG_A
MOV A, #10101111B
MOVX @R0,A
; SET TIME: 23:25:00
; MOV R0,#SEC ; SEC=00
; MOV A, #00H ; BCD
; MOVX @R0,A
; MOV R0,#MIN ; MIN=25
; MOV A, #00H ; BCD
; MOVX @R0,A
; MOV R0,#HOUR ; HOUR=04
; MOV A, #13H ; BCD
; MOVX @R0,A
; SET DATE: 15/08/06
; MOV R0,#DAY ; DAY=15
; MOV A, #11H ; BCD
; MOVX @R0,A
; MOV R0,#MON ; MON=08
; MOV A, #11H ; BCD
; MOVX @R0,A
; MOV R0,#YEAR ; YEAR=06
; MOV A, #06H ; BCD
; MOVX @R0,A
CLR CS_Chip
RET
;*********Read Date-Time on RTC**********
Read_DTime:
ANL P2,#10001111B
SETB CS_Chip
Wait_RTC:
MOV R0,#REG_A
MOVX A ,@R0
JNB ACC.7,Wait_RTC
MOV R0,#SEC
MOVX A, @R0
MOV Sec_Cmd,A
MOV R0,#MIN
MOVX A, @R0
MOV Min_Cmd,A
MOV R0,#HOUR
MOVX A, @R0
MOV Hour_Cmd,A
MOV R0,#DAY
MOVX A, @R0
MOV Day_Cmd,A
MOV R0,#MON
MOVX A, @R0
MOV Mon_Cmd,A
MOV R0,#YEAR
MOVX A, @R0
MOV YEAR_Cmd,A
CLR CS_Chip
RET
;*****************************************
; LCD
; Port Connections
; = = = = = = = = = = = = = = = = =
; P1.4 - > D4
; P1.5 - > D5
; P1.6 - > D6
; P1.7 - > D7
;
; P3.3 - > RS Register selection signal
; P3.4 - > RW Read/Write signal
; P3.5 - > EN Enable
;*******************************************************
RS EQU P3.3 ;Regster selection signal
RW EQU P3.4 ;Read/Write signal
EN EQU P3.5 ;Enable
Init_LCD:
CLR RS
CLR RW
CLR EN
SETB EN
MOV A,#00100000B ;20H 4bit
CALL Write_2_Nibbles
CLR EN
CALL Wait_LCD
MOV A,#00101000B ;28H 4bit 2line 5x7font
CALL Write_2_Nibbles
CALL Wait_LCD
MOV A,#00001100B ;0EH Cursor on
CALL Write_2_Nibbles
CALL Wait_LCD
MOV A,#00000110B ;06H
CALL Write_2_Nibbles
CALL Wait_LCD
RET
Wait_LCD:
CLR RS
SETB RW
CALL Read_2_Nibbles
JB ACC.7,Wait_LCD
CLR RW
RET
Read_2_Nibbles:
ORL P1,#0F0H
SETB EN
MOV A,P1
CLR EN
ANL A,#0F0H
PUSH ACC
SETB EN
MOV A,P1
CLR EN
ANL A,#0F0H
SWAP A
MOV R7,A
POP ACC
ORL A,R7
RET
Write_2_Nibbles:
PUSH ACC
ORL P1,#0F0H
ORL A,#0FH
ANL P1,A
SETB EN
CLR EN
POP ACC
SWAP A
ORL P1,#0F0H
ORL A,#0FH
ANL P1,A
SETB EN
CLR EN
RET
Clear_LCD:
CLR RS
MOV A,#01H
CALL Write_2_Nibbles
CALL Wait_LCD
RET
Write_TEXT:
SETB RS
CALL Write_2_Nibbles
CALL Wait_LCD
RET
Write:
MOV A,#0
MOVC A,@A+DPTR
CJNE A,#0H,Write_cont
RET
Write_cont:
CALL Write_TEXT
INC DPTR
JMP Write
RWrite: ; R0: Address of datas
CLR RS ; R1: Length of datas
MOV A,LCD_Addr ; R2: Address of LCD
CALL Write_2_Nibbles
CALL Wait_LCD
RWriteL:
MOV A,@R0
CALL Write_Text
INC R0
DJNZ R1,RWriteL
RET
First_line:
CLR RS
MOV A,#080H
CALL Write_2_Nibbles
CALL Wait_LCD
CALL Write
RET
Second_line:
CLR RS
MOV A,#0C0H
CALL Write_2_Nibbles
CALL Wait_LCD
CALL Write
RET
;****************************************
; Data Bytes
;****************************************
DTimeDB: DB '00-00-2000 00:00:00',0H
Blank: DB ' ',0H
Version: DB ' -=*NPH-PROJECTS*=- ',0H
WCome: DB 'Life is beautiful...',0H
NPH: DB 'NPH Electronics and Informatics',0H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -