专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

基础电子时钟(不带定时)

作者:佚名   来源:本站原创   点击数:  更新时间:2010年08月19日   【字体:

;  器件:共阳极8段数码管!89C51!     
;  注:控制的数码管的位上为电位反相! 
;  即引脚为高电平时,对应的位码会亮!
;  我是才学单片机的1
;  有什么不足的请大家指教,谢谢!
;  希望与单片机初学者一起学习1   

     
;P2段码,p1位码

p3.3,p3.4,p3.5按键

ds1302 :p3.6 p3.7.p3.8
 



 

;2010,1,30
;闫伟东
;QQ:543345617
;EAILL;543345617@QQ.COM
;******************************************************************************
M EQU 50H;秒
S EQU 51H;分
H EQU 52H;小时
Q EQU 53H;计数器20次标志位
KEY_H EQU P3.2;对应按键位
KEY_S EQU P3.3;
KEY_M EQU P3.4;
CTH EQU (65336-50000)/256;设置计时器初始值50MS
CTL EQU (65336-50000) MOD 256;
         ORG 0000H
         JMP START
         ORG 000BH
         JMP TIME
START:   MOV SP,#40H;
         MOV DPTR,#ABC 
         MOV M,#00H
  MOV S,#00H
  MOV H,#00H
  MOV Q,#00H
         MOV TMOD, #01H;
  MOV TH0,#CTH;初始指针
  MOV TL0,#CTL
  SETB EA;开中断
  SETB ET0
  SETB TR0
;***************主程序开始**************************   
LOOP:    LCALL DISPLAY
         JNB KEY_M,K1
         JNB KEY_S,K2
  JNB KEY_H,K3
         JMP LOOP
;*************以下按键程序************************** 
K1:      CALL DELAY
         JB KEY_M,LOOP
  INC M
  MOV A,M
         CJNE A,#60,D1
  MOV M,#00H
  JMP LOOP
K2:      CALL DELAY
         JB KEY_S,LOOP
  INC S
  MOV A,S
  CJNE A,#60,D2
  MOV S,#00H
  JMP LOOP
K3:      CALL DELAY
         JB KEY_H,LOOP
  INC H
  MOV A,H
  CJNE A,#24,D2
  MOV H,#00H
  JMP LOOP
;*************连续按键程序*************************
D1:  CALL DISPLAY 
     CALL DELAY_1
     JB KEY_S,LOOP
     
     JMP K1
D2:  CALL DISPLAY
     CALL DELAY_1
    JB KEY_M,LOOP
     
     JMP K1
D3:  CALL DISPLAY
     CALL DELAY_1
     JB KEY_H,LOOP
     
     JMP K1 
;*************以下计数器中断程序**************************             
TIME:   MOV TH0,#CTH;初始指针
  MOV TL0,#CTL 
         INC Q
         MOV A,Q
  CJNE A,#20,TIME_2;
  MOV Q,#00H
  INC M
         MOV A,M
  CJNE A,#60,TIME_2
  MOV M,#00H
  INC S
         MOV A,S
  CJNE A,#60,TIME_2;
  MOV S,#00H
  INC H
         MOV A,H
  CJNE A,#24,TIME_2;
  MOV H,#00H
  MOV M,#00H
  MOV S,#00H
         MOV Q,#00H
TIME_2:  RETI
;****************以下显示程序****************************
DISPLAY:   MOV A,M
           MOV B,#10
    DIV AB 
    MOVC A,@A+DPTR
    MOV P2,A
           SETB P1.1
    CALL DELAY
    CLR P1.1;@@@@@@@@@秒十位
    MOV A,B
    MOVC A,@A+DPTR
    MOV P2,A
    SETB P1.0
    CALL DELAY
           CLR P1.0;@@@@@@@@@@@@秒个位
    MOV P2,#0BFH
    SETB P1.2
    CALL DELAY
    CLR P1.2;@@@@@@@@@222分秒之间横杠
    MOV A,S
    MOV B,#10
    DIV AB
    MOVC A,@A+DPTR
    MOV P2,A
    SETB P1.4
    CALL DELAY
    CLR P1.4;@@@@@@@@@@分十位
    MOV A,B    
    MOVC A,@A+DPTR
    MOV P2,A
    SETB P1.3
    CALL DELAY
    CLR P1.3;@@@@@@@@@@@@分个位
    MOV P2,#0BFH
    SETB P1.5
    CALL DELAY
    CLR P1.5;@@@@@@@@@@分时横杠
    MOV A,H
    MOV B,#10
    DIV AB
    MOVC A,@A+DPTR
    MOV P2,A
    SETB P1.7
    CALL DELAY
    CLR P1.7;@@@@@@@@@@@时十位
    MOV A,B
    MOVC A,@A+DPTR
    MOV P2,A
    SETB P1.6
    CALL DELAY
    CLR P1.6
    RET
DELAY:     MOV R5,#5
    N1:    MOV R4,#250
           DJNZ R4,$
    DJNZ R5,N1
    RET
DELAY_1:   MOV R5,#5
    F1:    MOV R4,#40
    F2:    MOV R3,#250
           DJNZ R3,$
    
    DJNZ R4,F2
    
    DJNZ R5,F1
    
    RET
ABC: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
           END
;***************************************************
;经过调试后发现有很多不足:
;最大的缺陷是精度不够!
;可能必须用时钟芯片才行吧,
;                              2010.1.31.
关闭窗口

相关文章