首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

高手帮忙看看这个程序的问题在哪里

高手帮忙看看这个程序的问题在哪里

用PROTEUS仿真出来的是乱码,有知道原因的帮忙哈!电路图很简单的,晶振那块就不用接,直接接个液晶显示器就可以,但是出来是乱码

;---------------------------------------------------
; CLL.ASM IO51 8051 LCD CLOCK
; 8051 ASM USE: KEIL
; COPYRIGHT CMY 2003
;---------------------------------------------------
; K1 : ADJ TIME K2:HOUR K3:MIN K4: OK
;----------------------------------------------
; 5 mS isr
; MOV TL0,#(8192-5000).MOD.32
; MOV TH0,#(8192-5000)/32
LO EQU 24
HI EQU 99

CO EQU 185 ; ADJ. TO MATCH TIME 200 x 5 mS=1000 mS
HOUR EQU 30H
MIN EQU 31H
SEC EQU 32H
DEDA EQU 33H ; DEDA COUNT 5 mS COUNT
SEC0 EQU 34H ; OLD SEC
X EQU 35H ; LCD X POS
;---------------------------------
; KEY4.....
K1 EQU P2.4
K2 EQU P2.5
K3 EQU P2.6
K4 EQU P2.7

; LCD .....
RS EQU P0.0
EN EQU P0.1
WLED EQU P3.7
;----------------------------------------------------------
ORG 0H
JMP START
ORG 0BH ; TIMER 0
JMP T0_INT
;-----------------------------
START:
CLR EN ; LCD OFF
CALL LED_BL
CALL SET_LCD

CALL INIT
CALL INIT_TIMER
CALL MENU

LOOP:
CALL TIME_PRO
; TEST KEY .....................
JB K1,L1
; K1 KEYED .................
CALL LED_BL
MOV DPTR,#MADJ
MOV A,#1
CALL LCD_PRINT
CALL SET_TIME ; ADJ TIME
CALL MENU
JMP LOOP

;....................
L1: JB K2,L2
; K2 KEYED..................
JMP LOOP

;.....................
L2: JB K3,L3
JNB K3,$
; K3 KEYED ..........
JMP LOOP

;.....................
L3: JB K4,L4
; K4 KEYED.............
JMP LOOP
;.........................................
L4:
JMP LOOP
;--------------------------------------------
LMESS1: DB "LCD LINE 1 .....",0
LMESS2: DB "TIME ",0
TITLE: DB "CLL.ASM 8051 CLOCK WITH LCD"
;--------------------------------------------
INIT:
MOV DEDA,#0
MOV SEC0,#0
MOV SEC,#0
MOV MIN,#0
MOV HOUR,#0
RET
;-------------------------
INIT_TIMER:
MOV TMOD,#00000000B
MOV IE, #10000010B
MOV TL0,#LO
MOV TH0,#HI
SETB TR0
RET
;----------------------
; USE TIMER MODE 0
; COUNT=5ms/1us=5000
;----------------------
T0_INT:
PUSH ACC
MOV TL0,#LO
MOV TH0,#HI
INC DEDA

; 1 SEC TIME OUT CHECK
MOV A,DEDA
CJNE A,#CO,TT
MOV DEDA, #0

CPL WLED
INC SEC
MOV A,SEC
CJNE A,#60,TT
; 1 MIN TIME OUT
INC MIN
MOV SEC,#0
MOV A, MIN
CJNE A,#60,TT
; 1 HOUR TIME OUT
INC HOUR
MOV MIN,#0
MOV A, HOUR
CJNE A,#24,TT
MOV SEC,#0 ; RESET TIME TO 0
MOV MIN,#0
MOV HOUR,#0
TT:
POP ACC
RETI
;---------------------------------------------------------------
; K2:HH K3:MM K4:OK
SET_TIME:
CLR TR0
MOV SEC,#0
; SCAN 3 KEY TO ADJ............
S0:
JB K2,S1
; K1 KEYED ADJ HH......
INC HOUR
MOV A, HOUR
CJNE A,#24,S11
MOV HOUR,#0
S11:
CALL CONV ; CONV. TO ASCII
MOV R5,#20
CALL DELAY
JMP S0

;....................
S1: JB K3,S2
; K2 KEYED ADJ MM.......
INC MIN
MOV A, MIN
CJNE A,#60,S21
MOV MIN,#0
S21:
CALL CONV ; CONV. TO ASCII
MOV R5,#20
CALL DELAY
JMP S0

;.....................
S2: JB K4,S0
JNB K4,$
; K3 KEYED OK ..........
CALL LED_BL
SETB TR0
RET
;-----------------------------------------------
; AIG X: LCD X POS
; SHOW ON LCD LINE1
SHOW_DIG:
MOV B,#10
DIV AB
ADD A,#30H
PUSH B
MOV B,X
CALL LCDP1

POP B
MOV A,B
ADD A,#30H
INC X
MOV B,X
CALL LCDP1
RET
;-------------------------
; AIG X: LCD X POS
; SHOW ON LCD LINE2
SHOW_DIG2:
MOV B,#10
DIV AB
ADD A,#30H
PUSH B
MOV B,X
CALL LCDP2

POP B
MOV A,B
ADD A,#30H
INC X
MOV B,X
CALL LCDP2
RET
;-------------------------
; LCD HH:MM:SS
; CONVERT TO ASCII AND SHOW
CONV:
; SHOW HOUR...............
MOV A,HOUR
MOV X,#5
CALL SHOW_DIG2
INC X
MOV A,#':'
MOV B,X
CALL LCDP2
; SHOW MIN...............
MOV A,MIN
INC X
CALL SHOW_DIG2
INC X
MOV A,#':'
MOV B,X
CALL LCDP2
; SHOW MIN...............
MOV A,SEC
INC X
CALL SHOW_DIG2
RET
;*******************************************************
; LCD CONTROL
;*******************************************************
SET_LCD:
CLR EN ; en=0
CALL INIT_LCD

MOV R5,#10
CALL DELAY

MOV DPTR,#LMESS1
MOV A,#1 ; LINE1
CALL LCD_PRINT

MOV DPTR,#LMESS2
MOV A,#2 ; LINE2
CALL LCD_PRINT
RET
;---------------------------------
INIT_LCD1:
MOV A,#28H
CALL WCOM
MOV A,#0CH
CALL WCOM
MOV A,#0EH
CALL WCOM
MOV A,#01H
CALL WCOM
RET
;-----------------------------------------
CLR_LINE1:
MOV A,#80H
CALL WCOM
MOV R0,#24
C1: MOV A,#' '
CALL WDATA
DJNZ R0,C1
RET
;-------------------------------
; A=LINE 1 OR 2
; DPTR = MESSAGE POINTER
LCD_PRINT:
CJNE A,#1,LINE2
LINE1: MOV A,#80H
CALL WCOM
CALL CLR_LINE
MOV A,#80H
CALL WCOM
JMP FILL

LINE2: MOV A,#0C0H
CALL WCOM
CALL CLR_LINE
MOV A,#0C0H
CALL WCOM
FILL:
CLR A
MOVC A,@A+DPTR
CJNE A,#0,LC1
RET
LC1:
CALL WDATA
INC DPTR
JMP FILL
RET
;---------------------------
CLR_LINE:
MOV R0,#24
CL1: MOV A,#' '
CALL WDATA
DJNZ R0,CL1
RET
;-------------------------------
DE: MOV R7, #5
DJNZ R7,$
RET
;--------------------
EN1:
SETB EN
CALL DE
CLR EN
CALL DE
RET
;-------------------
INIT_LCD:
MOV P0, #30H
CALL EN1
MOV P0, #30H
CALL EN1
MOV P0, #30H
CALL EN1

MOV P0, #20H
CALL EN1
CALL INIT_LCD1
RET
;----------------------------
WCOM:
; WRITE HI 4 BIT
MOV P0, A
CLR RS ; SET COMMAND
CALL EN1
RLC A
RLC A
RLC A
RLC A
; WRITE LO 4 BIT
MOV P0, A
CLR RS ; SET COMMAND
CALL EN1
RET
;--------------------------------------
WDATA:
; WRITE HI 4 BIT
MOV P0, A
SETB RS ; SET DATA
CALL EN1
RLC A
RLC A
RLC A
RLC A
; WRITE LO 4 BIT
MOV P0, A
SETB RS ; SET DATA
CALL EN1
RET
;--------------------------------------
; PRINT A CHAR ON LCD LINE 1
; A=ASC DATA
; B=LINE X POS.
LCDP1:
; LINE 1
PUSH ACC
MOV A,B
ADD A,#80H
CALL WCOM
POP ACC
CALL WDATA
RET
;-------------------------------
; PRINT A CHAR ON LCD LINE 2
; A=ASC DATA
; B=LINE X POS.
LCDP2:
; LINE 1
PUSH ACC
MOV A,B
ADD A,#0C0H
CALL WCOM
POP ACC
CALL WDATA
RET
;-----------------------------------------------------------------------
; DELAY R5*10 ms
DELAY:
MOV R6,#50
D1: MOV R7,#100
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,DELAY
RET
;--------------------------------
LED_BL:
MOV R4,#4
LE0: CPL WLED
MOV R5,#10
CALL DELAY
DJNZ R4, LE0
RET
;-----------------------------------------------
MMENU: DB "51 CLOCK K1--SET",0
MADJ: DB "K2:H K3:M K4:OK",0

MENU:
MOV DPTR,#MMENU
MOV A,#1
CALL LCD_PRINT
RET
;--------------------------
; UPDATE SEC,MIN,HR
TIME_PRO:
MOV A,SEC
MOV B,SEC0
CJNE A,B,TI1 ; TIME CHANGE
JMP TI2
TI1: CALL CONV ; CONV. TO ASCII SHOW TO LCD
MOV SEC0,SEC
TI2: RET
;--------------------------
END

返回列表