Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (596.22 KB, 53 trang )
24
mạch thực tế. Cơ bản sử dụng thành thạo các phần mềm liên quan đến đề tài cần
sử dụng như :
-
Phần mềm viết chương trình nguồn : Notepad++
Phần mềm biên dịch chương trình : Keil uVision4
Phần mềm mơ phỏng
: Protus
Phần mềm thiết kế phần cứng
: Altium Designer
Đối với đề tài : chúng em đã xây dựng được lưu đồ thuật tốn, chương trình
nguồn, hiển thị đồng hồ số lên màn hình LCD theo đúng yêu cầu của đề tài.
Bên cạnh những việc đã làm được thì vẫn còn một vài việc chưa làm cho đề tài
được tối ưu như : Khi mạch hoạt động bình thường, nếu ngắt nguồn DC 5V ra
khỏi mạch thì mạch khơng giữ được thời gian thực đang chạy.
Hướng phát triển tiếp theo của đề tài :
- Giải quyết vấn đề đang còn tồn tại.
- Xây dựng các ứng dụng có liên quan đến thời gian, có thể ứng dụng
được trong thực tế.
Phục lục
Chương trình nguồn:
;==================== PROGRAM ===========================
;============= KHAI BAO CAC CHAN TIN HIEU ===============
RS
EQU
P2.0 ; CHAN DK LCD
RW
EQU
P2.2 ; CHAN DK LCD
EN
EQU
P2.4 ; CHAN DK LCD
DATABUS
EQU
P0
; CHAN DL LCD
SELECT
EQU
P3.3 ; KICH HOAT NGAT NGOAI
25
BACK
OK
UP
DOWN
XY
DAY
DEM_TIMER0
CD
EF
TEMP
D1
D2
D3
D4
DEM_S
ORG
LJMP
ORG
LJMP
ORG
LJMP
ORG
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
P3.4
P3.5
P3.6
P3.7
30H
31H
32H
33H
34H
35H
36H
37H
38H
39H
R0
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
PHIM THAY DOI THOI GIAN
PHIM THAY DOI THOI GIAN
PHIM THAY DOI THOI GIAN
PHIM THAY DOI THOI GIAN
VI TRI CON TRO
CHON NGAY HIEN THI
DEM SO LAN VAO NGAT
2 SO DAU CUA NAM
2 SO CUOI CUA NAM
BIEN LUU TRU CAC GIA TRI
DEM SO LAN BAM NUT SELECT
00H
MAIN
0BH
TIMER0
13H
START_CHANGE_TIME
100H
MAIN:
;=================== KHOI TAO LCD ========================
ACALL
LCDINIT
LCALL
DELAY
ACALL
INTRO
MOV
DEM_S,#0
MOV
R1,#50
;GIAY //Chu Nhat, 10/10/2010
MOV
R2,#59
;PHUT
MOV
R3,#23
;GIO
MOV
R4,#10
;NGAY
MOV
R5,#10
;THANG
MOV
CD,#20
;2 SO DAU CUA NAM
MOV
EF,#10
;2 SO CUOI CUA NAM
MOV
DAY,#1
MOV
DEM_TIMER0,#0 ; SO LAN VAO NGAT TAO 1S
MOV
R6,#0
MOV
D1,#0
MOV
D2,#0
26
MOV
MOV
D3,#0
D4,#0
;====================CAI DAT NGAT NGOAI 1=================
SETB
EA
SETB
EX1
;CHO PHEP NGAT NGOAI 1
SETB
IT1
; NGAT NGOAI THEO SUON
;==================CAI DAT NGAT TRAN TIMER 0==============
;
SETB
EA
DA KHAI BAO TRONG NGAT NGOAI
SETB
ET0
;CHO PHEP NGAT TRONG TIMER 0
MOV
TMOD,#01
;TIMER 0 CHE DO 1
MOV
TL0,#0BEH
;giai thich trong timer 0
MOV
TH0,#3CH
;=========IN CAC GIA TRI THOI GIAN KHOI TAO BAN DAU ======
ACALL
IN_DONG_1
ACALL
IN_DONG_2
;====================KHOI DONG TIMER 0 ===================
SETB
TR0
;====================KIEM TRA THOI GIAN ==================
CHECK_TIME:
CJNE
DEM_S,#0,THAY_DOI_THOI_GIAN
GIAY:
CJNE
R1,#60,SHOW_TIME
MOV
R1,#0
PHUT:
INC
R2
CJNE
R2,#60,SHOW_TIME
MOV
R2,#0
GIO:
INC
R3
CJNE
R3,#24,SHOW_TIME
MOV
R3,#0
TANG_THU:
INC
DAY
MOV
A,DAY
CJNE
A,#8,NGAY
MOV
DAY,#1
NGAY:
27
INC
R4
CJNE
R5,#2,KT_THANG_4 ;KT CO PHAI THANG 2 K
MOV
B,#4
MOV
A,EF
DIV
AB
MOV
A,B
CJNE
A,#0,KHONG_PHAI_NAM_NHUAN
CJNE
R4,#30,SHOW_TIME
MOV
R4,#1
SJMP
THANG
KHONG_PHAI_NAM_NHUAN:
CJNE
R4,#29,SHOW_TIME
MOV
R4,#1
SJMP
THANG
KT_THANG_4:
CJNE
R5,#4,KT_THANG_6
SJMP
THANG_CO_30_NGAY
KT_THANG_6:
CJNE
R5,#6,KT_THANG_9
SJMP
THANG_CO_30_NGAY
KT_THANG_9:
CJNE
R5,#9,KT_THANG_11
SJMP
THANG_CO_30_NGAY
KT_THANG_11:
CJNE
R5,#11,THANG_CO_31_NGAY
;SJMP
THANG_CO_30_NGAY
THANG_CO_30_NGAY:
CJNE
R4,#31,SHOW_TIME
MOV
R4,#1
SJMP
THANG
THANG_CO_31_NGAY:
CJNE
R4,#32,SHOW_TIME
MOV
R4,#1
THANG:
INC
R5
CJNE
R5,#13,SHOW_TIME
MOV
R5,#1
NAM:
INC
EF
MOV
A,EF
CJNE
A,#100,SHOW_TIME
MOV
EF,#0
28
MOT_TRAM_NAM_DONG_HO_HONG_ROI:
INC
CD
MOV
A,CD
CJNE
A,#100,SHOW_TIME
MOV
CD,#0
LJMP
CHECK_TIME
;==============HIEN THI THOI GIAN LEN LCD ================
SHOW_TIME:
ACALL
IN_DONG_1
ACALL
IN_DONG_2
LJMP
CHECK_TIME
;=========================================================
THAY_DOI_THOI_GIAN:
LJMP CHANGE_TIME
;NHAY DEN CHUONG TRINH THAY DOI TG
;==============HIEN THI SO BCD LEN LCD====================
SHOW_BCD:
MOV
B,#10
DIV
AB
ADD
A,#48
MOV
DATABUS,A
ACALL
SEND_DATA
MOV
A,B
ADD
A,#48
MOV
DATABUS,A
ACALL
SEND_DATA
RET
;=======================CON TRO===========================
POINTER:
MOV
A,XY
MOV
DATABUS,A
ACALL
SEND_COMMAND
MOV
DATABUS,#' '
ACALL
SEND_DATA
MOV
DATABUS,#' '
ACALL
SEND_DATA
ACALL
DELAY_SW
MOV
A,XY
MOV
DATABUS,A
29
ACALL
MOV
ACALL
ACALL
RET
SEND_COMMAND
A,TEMP
SHOW_BCD
DELAY_SW
;========================================================
POINTER_DAY:
PUSH DPH
PUSH DPL
MOV
DATABUS,#0C0H
ACALL
SEND_COMMAND
MOV
DPTR,#CHAR_SPACE
ACALL
WRITE
ACALL
DELAY_SW
MOV
DATABUS,#0C0H
ACALL
SEND_COMMAND
ACALL
DISPLAY_DAY
ACALL
DELAY_SW
POP
DPL
POP
DPH
RET
;==============HIEN
IN_DONG_1:
MOV
ACALL
IN_SETTING:
PUSH
ACALL
MOV
ACALL
MOV
ACALL
MOV
ACALL
MOV
ACALL
MOV
ACALL
MOV
THI THOI GIAN LEN LCD=================
DATABUS,#80H
SEND_COMMAND
ACC
DISPLAY_DAY
DATABUS,#' '
SEND_DATA
A,R4
SHOW_BCD
DATABUS,#'-'
SEND_DATA
A,R5
SHOW_BCD
DATABUS,#'-'
SEND_DATA
A,CD
30
ACALL
MOV
ACALL
POP
RET
IN_DONG_2:
PUSH ACC
MOV
ACALL
MOV
ACALL
MOV
ACALL
MOV
ACALL
MOV
ACALL
MOV
ACALL
POP
RET
SHOW_BCD
A,EF
SHOW_BCD
ACC
DATABUS,#0C4H
SEND_COMMAND
A,R3
SHOW_BCD
DATABUS,#':'
SEND_DATA
A,R2
SHOW_BCD
DATABUS,#':'
SEND_DATA
A,R1
SHOW_BCD
ACC
;============== CHON THU HIEN THI ========================
DISPLAY_DAY:
PUSH ACC
PUSH DPH
PUSH DPL
MOV
A,DAY
CHU_NHAT:
CJNE
A,#01,THU_2
MOV
DPTR,#CNHAT
ACALL
WRITE
SJMP
EXIT_DAY
THU_2:
CJNE
A,#02,THU_3
MOV
DPTR,#THU2
ACALL
WRITE
SJMP
EXIT_DAY
THU_3:
CJNE
A,#03,THU_4
MOV
DPTR,#THU3
ACALL
WRITE
31
SJMP
THU_4:
CJNE
MOV
ACALL
SJMP
THU_5:
CJNE
MOV
ACALL
SJMP
THU_6:
CJNE
MOV
ACALL
SJMP
THU_7:
CJNE
MOV
ACALL
EXIT_DAY:
POP
DPL
POP
DPH
POP
ACC
RET
EXIT_DAY
A,#04,THU_5
DPTR,#THU4
WRITE
EXIT_DAY
A,#05,THU_6
DPTR,#THU5
WRITE
EXIT_DAY
A,#06,THU_7
DPTR,#THU6
WRITE
EXIT_DAY
A,#07,EXIT_DAY
DPTR,#THU7
WRITE
;==============CHUONG TRINH THAY DOI THOI GIAN============
CHANGE_TIME:
PUSH ACC
PUSH DPH
PUSH DPL
CLR
ET0
CLR
TR0
BACK_S:
MOV
DATABUS,#01H
ACALL
SEND_COMMAND
ACALL
DELAY
MOV
DATABUS,#80H
ACALL
SEND_COMMAND
ACALL
DELAY
MOV
DPTR,#CHAR_CHANGE
ACALL
WRITE
32
ACALL
IN_DONG_2
SCAN_BACK:
; QUET PHIM BACK
JB
BACK,SCAN_OK
JNB
BACK,$
DEC
DEM_S
MOV
R6,#1
SCAN_OK:
; QUET PHIM OK
JB
OK,KT_DEM_S
JNB
OK,$
MOV
DATABUS,#01H
ACALL
SEND_COMMAND
ACALL
DELAY
MOV
DATABUS,#0CH
ACALL
SEND_COMMAND
ACALL
DELAY
MOV
DEM_S,#0
LJMP
EXIT_CHANGE_TIME
KT_DEM_S:
;QUAY VONG CHON GIA TRI THAY DOI
CJNE
DEM_S,#0,DEM_S1
MOV
DEM_S,#8
LJMP
LCD_PART2
DEM_S1:
;THAY DOI GIO
CJNE
DEM_S,#1,DEM_S2
CJNE
R6,#1,DEM_S11
ACALL
DISPLAY_CHANGE
MOV
R6,#0
DEM_S11:
MOV
TEMP,R3
MOV
XY,#0C4H
ACALL
POINTER
ACALL
SCAN_UP
ACALL
SCAN_DOWN
LJMP
SCAN_BACK
DEM_S2:
CJNE
CJNE
ACALL
MOV
DEM_S21:
MOV
;THAY DOI PHUT
DEM_S,#2,DEM_S3
R6,#1,DEM_S21
DISPLAY_CHANGE
R6,#0
TEMP,R2
33
MOV
ACALL
ACALL
ACALL
LJMP
XY,#0C7H
POINTER
SCAN_UP
SCAN_DOWN
SCAN_BACK
DEM_S3:
CJNE
DEM_S,#3,LCD_PART2
CJNE
R6,#1,DEM_S31
ACALL
DISPLAY_CHANGE
MOV
R6,#0
DEM_S31:
MOV
TEMP,R1
MOV
XY,#0CAH
ACALL
POINTER
ACALL
SCAN_UP
ACALL
SCAN_DOWN
LJMP
SCAN_BACK
LCD_PART2:
MOV
DATABUS,#01H
ACALL
SEND_COMMAND
ACALL
DELAY
MOV
DATABUS,#80H
ACALL
SEND_COMMAND
ACALL
DELAY
MOV
DPTR,#CHAR_CHANGE
ACALL
WRITE
MOV
DATABUS,#0C0H
ACALL
SEND_COMMAND
ACALL
DELAY
ACALL
IN_SETTING
SCAN_BACK2:
JB
BACK,SCAN_OK2
JNB
BACK,$
DEC
DEM_S
MOV
R6,#1
SCAN_OK2:
JB
JNB
MOV
ACALL
ACALL
OK,KT_DEM_S2
OK,$
DATABUS,#01H
SEND_COMMAND
DELAY
;THAY DOI GIAY
34
MOV
DATABUS,#0CH
ACALL
SEND_COMMAND
ACALL
DELAY
MOV
DEM_S,#0
LJMP
EXIT_CHANGE_TIME
KT_DEM_S2:
CJNE
DEM_S,#3,DEM_S4
LJMP
BACK_S
DEM_S4:
CJNE
DEM_S,#4,DEM_S5
CJNE
R6,#1,DEM_S41
ACALL
DISPLAY_CHANGE
MOV
R6,#0
DEM_S41:
ACALL
POINTER_DAY
ACALL
SCAN_UP
ACALL
SCAN_DOWN
LJMP
SCAN_BACK2
DEM_S5:
CJNE
DEM_S,#5,DEM_S6
CJNE
R6,#1,DEM_S51
ACALL
DISPLAY_CHANGE
MOV
R6,#0
DEM_S51:
MOV
TEMP,R4
MOV
XY,#0C6H
ACALL
POINTER
ACALL
SCAN_UP
ACALL
SCAN_DOWN
LJMP
SCAN_BACK2
DEM_S6:
CJNE
DEM_S,#6,DEM_S7
CJNE
R6,#1,DEM_S61
ACALL
DISPLAY_CHANGE
MOV
R6,#0
DEM_S61:
MOV
MOV
ACALL
ACALL
ACALL
TEMP,R5
XY,#0C9H
POINTER
SCAN_UP
SCAN_DOWN
;THAY DOI THU
;THAY DOI NGAY
;THAY DOI THANG