原创 自己做的可调的数码钟

2007-10-21 02:00 1364 1 1 分类: MCU/ 嵌入式

/*******************************************************************/
/******************P0作段码,P3位选码*******************************/
/*******************************************************************/
/*******************************************************************/
/*******************************************************************/


M  BIT P1.0  //主键
U  BIT P1.1  //+1键
D  BIT P1.2  //-1键
R  BIT P1.5  //移位键
O  BIT P1.6  //OK键


SECOND EQU  30H   //秒
MINUTE EQU  31H   //分
HOUR EQU  32H   //小时
TCNT    EQU     33H   //50毫秒到1秒的中转
SS      EQU     34H


ORG  00H
SJMP START


ORG  0BH     //T0中断
LJMP TIME0


START: MOV  DPTR,#TABLE
  MOV  HOUR,#0      ;初始化
  MOV  MINUTE,#0
  MOV  SECOND,#0
  MOV  TCNT,#0
  MOV  TMOD,#01H
  MOV  TH0,#(65536-50000)/256  ;定时50MS  
  MOV  TL0,#(65536-50000)MOD 256
  MOV  IE,#82H
  
ANJIANSAOMIAO:CLR F0
              MOV R6,#00
              SETB TR0
              LCALL DISPLAY
        JNB M,MAIN     //主键输入
        LJMP ANJIANSAOMIAO  //按键扫描
 
MAIN:
     LCALL DELAY  //按键去抖
  JB M,ANJIANSAOMIAO  //如M=1,是抖动返回
  CLR TR0
  SETB F0
WUHUI:
      LCALL DISPLAY   //数码管动态扫描
   JNB O,OK      //确定键
   JNB U,JIA      //加一键
   JNB D,JIAN     //减一键
   JNB R,YIWEI     //移位键
   SJMP WUHUI


YIWEI:
      LCALL DELAY
   JB R,WUHUI       //移位处理子程序


   INC R6  //R6用0~3作LED0~LED3位
   CJNE R6,#3,HUI
   MOV R6,#00H
  HUI:LJMP WUHUI 


OK:        //OK键处理子程序
   LCALL DELAY
   JB O,WUHUI
   LJMP ANJIANSAOMIAO 


JIA:     //加一处理子程序
    LCALL DELAY
 JB U,WUHUI
 CJNE R6,#0,YIWEIJIA
 MOV R5,HOUR     //R5作LED0~3的中转
 CJNE R5,#24,I0    //到24变0返回
 MOV HOUR,#00
 LJMP WUHUI
 I0:INC HOUR    //没有到24加1


YIWEIJIA:CJNE R6,#1,ERWEIJIA
         MOV R5,MINUTE
         CJNE R5,#59,I1
   MOV MINUTE,#00
   LJMP WUHUI
      I1:INC MINUTE


ERWEIJIA:CJNE R6,#2,GO
         MOV R5,SECOND
         CJNE R5,#59,I2
   MOV SECOND,#00
   LJMP WUHUI
      I2:INC SECOND     
       GO:LJMP WUHUI


JIAN:
     LCALL DELAY     //减一处理子程序
    JB D,WUHUI
  CJNE R6,#0,YIWEIJIAN
  MOV R5,HOUR
  CJNE R5,#0,D0
  MOV HOUR,#24
  LJMP WUHUI
  D0:DEC HOUR


YIWEIJIAN:CJNE R6,#1,ERWEIJIAN
          MOV R5,MINUTE
    CJNE R5,#0,D1
    MOV MINUTE,#59
    LJMP WUHUI
       D1:DEC MINUTE


ERWEIJIAN:CJNE R6,#2,GO1
          MOV R5,SECOND
    CJNE R5,#0,D2
    MOV SECOND,#59
    LJMP WUHUI
       D2:DEC SECOND
     
       GO1:LJMP WUHUI
 
TIME0: MOV  TH0,#(65536-50000)/256
  MOV  TL0,#(65536-50000)MOD 256  
  INC  TCNT
  MOV  A,TCNT
  CJNE A,#20,RETURN ;计时1秒


  INC  SECOND
  MOV  TCNT,#0
  MOV  A,SECOND
  CJNE A,#60,RETURN


  INC  MINUTE
  MOV  SECOND,#0
  MOV  A,MINUTE
  CJNE A,#60,RETURN


  INC  HOUR
  MOV  MINUTE,#0
  MOV  A,HOUR
  CJNE A,#24,RETURN
  MOV  HOUR,#0     
RETURN: RETI


DISPLAY:     
        MOV  A,SECOND ;显示秒
  MOV  B,#10
  DIV  AB
  CLR  P3.6
  MOVC A,@A+DPTR
  MOV  P0,A
  LCALL DELAY
  SETB P3.6
  MOV  A,B
  CLR  P3.7
  MOVC A,@A+DPTR
  JNB F0,QU
  CJNE R6,#2,QU
     ORL     A,#80H
 QU: MOV  P0,A
  LCALL DELAY
  SETB P3.7


  CLR  P3.5
  MOV  P0,#40H  ;显示分隔符
  LCALL DELAY
  SETB P3.5


  MOV  A,MINUTE ;显示分钟
  MOV  B,#10
  DIV  AB
  CLR  P3.3
  MOVC A,@A+DPTR
  MOV  P0,A
  LCALL DELAY
  SETB P3.3
  MOV  A,B
  CLR  P3.4
  MOVC A,@A+DPTR
  JNB F0,QU1
  CJNE R6,#1,QU1
  ORL A,#80H
 QU1:MOV  P0,A
  LCALL DELAY
  SETB P3.4


  CLR  P3.2
  MOV  P0,#40H  ;显示分隔符
  LCALL DELAY
  SETB P3.2


     MOV  A,HOUR  ;显示小时
  MOV  B,#10
  DIV  AB
  CLR  P3.0
  MOVC A,@A+DPTR
  MOV  P0,A
  LCALL DELAY
  SETB P3.0
  MOV  A,B
  CLR  P3.1
  MOVC A,@A+DPTR
  JNB F0,QU2
  CJNE R6,#0,QU2
  ORL A,#80H
 QU2:MOV  P0,A
  LCALL DELAY
  SETB P3.1
  RET



TABLE:  DB   3FH,06H,5BH,4FH,66H
  DB  6DH,7DH,07H,7FH,6FH


DELAY: MOV  R0,#10
D5:  MOV  R7,#250
  DJNZ R7,$
  DJNZ R0,D5
  RET


  END

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
1
关闭 站长推荐上一条 /2 下一条