接线方法:
1、按键接到P1口下半部分。用一条4PIN数据排线,把按键部份的JP37,接到CPU部份的P1口JP44的p1.4—p1.7.
2、接8位数码管的数据线。将数码管部份的数据口 JP5接到CPU部份的P0口JP51. 3、接8位数码管的显示位线。将数码管部份的显示位口 JP8接到CPU部份的P2口JP52. 4、用1条1PIN线把喇叭部分的JP16接单片机P3.3 5、用1条1PIN线把继电器部分的JP18接单片机P3.5
6、用一条4PIN数据排线,把DS1302部份的JP83,接到CPU部份的P1口JP44的p1.0—p1.3 汇编语言参考程序:
;8位数码管显示
;P0 为段码口、P2 为位码口 ;时钟芯片:DS1302 ;接线方法:
;八位数码管用两条8pin排线分别连p0,p2口 ;24c02 用一条2pin线连接P3.6, P3.7 ;喇叭用一条1pin线连接P3.3
;端口按键JP37用一条4PIN线连接P1.4,1.5,1.6,1.7 ;DS1302的JP83用一条4PIN线连接P1.0,1.1,1.2,1.3
;************** DS1302 端口位定义 ************** IO_DATA BIT P1.1 ; 数据传送总线 SCLK BIT P1.0 ; 时钟控制总线 RST BIT P1.2 ; 复位总线
K1 EQU P1.4 ;独立键 K2 EQU P1.5
K3 EQU P1.6 K4 EQU P1.7
BEEP EQU P3.3 ;蜂鸣器 RELAY EQU P3.5 ;继电器
T_CONU EQU 22H ;中断计数 TIME_L EQU 23H ;定时初值 TIME_H EQU 24H
TIME_DATA EQU 50H ;显示时间单元首地址 DATE_DATA EQU 60H ;显示日期单元首地址 DS_DATA EQU 58H ;显示定时时间单元首地址
;------------------------------------------------ ORG 0000H AJMP MAIN
ORG 000BH AJMP INT_T0
ORG 0080H
;------------------------------------------------ MAIN:
MOV TMOD,#01H ;T0,方式1
MOV TIME_L,#00H ;50MS定时值 MOV TIME_H,#4CH
MOV T_CONU,#00H ;中断次数 MOV IE,#82H ;EA=1,ET0=1
MOV A,#00H
MOV R0,#40H ;从40H单元开始 MOV R1,#40H ;清64个单元 M_CLEAR: MOV @R0,A INC R0
DJNZ R1,M_CLEAR
MOV 7FH,#0AH ;送熄灭符 SETB BEEP
LCALL TIME_DELAY ;调显示延时 LCALL PROSET ;DS1302初始化
MAIN1:
LCALL GET_TIME ;从DS1302读数据程序 LCALL CHULI ;实时时间数据处理
MOV R0,#TIME_DATA ;显示时、分、秒 LCALL DISP
MOV R0,#TIME_DATA LCALL TIME_DISPLAY
LCALL SET_KEY ;键功能程序
LCALL COMP ;实时时间与定时时间比较 JB K1,MAIN1 CALL BEEP_BL MAIN2:
LCALL CHULI ;日期数据处理 MOV R0,#DATE_DATA
LCALL DISP ;显示年、月、日 MOV R0,#DATE_DATA LCALL TIME_DISPLAY JB K1,MAIN2 CALL BEEP_BL MAIN3:
LCALL DS_CHULI ;定时时间数据处理 MOV R0,#DS_DATA
LCALL DS_SP ;显示定时时间 MOV R0,#DS_DATA LCALL DS_DISPLAY JB K1,MAIN3 CALL BEEP_BL AJMP MAIN1
;-------------------------------------------- ;中断服务子程序
;300MS对闪动标记取反一次
;-------------------------------------------- INT_T0: PUSH ACC PUSH PSW
MOV TL0,TIME_L MOV TH0,TIME_H INC T_CONU MOV A,T_CONU
CJNE A,#06H,INT_END MOV T_CONU,#00H CPL 0AH INT_END: POP PSW POP ACC RETI
;--------------------------------------------
;DS1302 初始化子程序 ; (R0)=数据 (R1)=地址
;-------------------------------------------- PROSET:
CLR RST ;DS1302复位 CLR SCLK NOP NOP
SETB RST
;MOV R1,#80H ;写秒寄存器 ;MOV R0,#00H ;启动振荡器 ;LCALL WRITE
;MOV R1,#82H ;写分寄存器 ;MOV R0,#58H ;LCALL WRITE
;MOV R1,#84H ;写时寄存器 ;MOV R0,#80H ;LCALL WRITE
MOV R1,#90H ;写充电寄存器 MOV R0,#0ABH LCALL WRITE RET
;=============================================== ;读时间、日期数据子程序 ;存放单元 40H - 46H
;=============================================== GET_TIME:
MOV R1,#81H ;读秒 LCALL READ MOV 40H,R0
MOV R1,#83H ;读分 LCALL READ MOV 41H,R0
MOV R1,#85H ;读时 LCALL READ MOV 42H,R0
MOV R1,#87H ;读出日期
LCALL READ MOV 43H,R0
MOV R1,#89H ;读出月份 LCALL READ MOV 44H,R0
MOV R1,#8BH ;读出星期 LCALL READ MOV 46H,R0
MOV R1,#8DH ;读出年 LCALL READ MOV 45H,R0 RET
;================================================ ;写 DS1302 子程序
;================================================ WRITE: CLR SCLK NOP NOP
SETB RST NOP
MOV A,R1 MOV R2,#08H WRI_01:
RRC A ;传输地址到DS1302 NOP NOP
CLR SCLK NOP NOP
MOV IO_DATA,C NOP NOP
SETB SCLK NOP NOP
DJNZ R2,WRI_01 CLR SCLK NOP NOP