⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcdtimer.asm

📁 8位1602的程序设计.有图和源程序.并且调试成功
💻 ASM
📖 第 1 页 / 共 2 页
字号:
            ORG 0000H
            LJMP MAIN
	    ORG 0003H
	    LJMP INSERT0          ;INT0用于调节时间
	    ORG 0013H
	    LJMP INSERT1          ;INT1用于选择调节定时或时间
	    ORG 001BH
            LJMP INSERT_T1        ;T1定时
	    ORG 0050H
	    RS EQU P2.0
	    RW EQU P2.1
	    E EQU P2.2
      MAIN: ANL TMOD,#0FH
            ORL TMOD,#20H          ;T1工作于方式2
	    MOV TH1,#38H           ;定时250us
	    MOV TL1,#38H
	    SETB EA                ;中断控制初始化
	    SETB ET1
	    SETB EX0
	    SETB EX1
	    SETB IT0
	    SETB IT1
	    SETB PX0
            SETB C                 ;所用标志位初始化
	    MOV 00H,C
	    MOV 06H,C
	    CLR C 
	    MOV 01H,C
            MOV 02H,C
	    SETB E
	    MOV R2,#0              ;所用寄存器初始化
	    MOV R3,#0
	    MOV R4,#0
	    MOV R5,#12
	    MOV R6,#0
	    MOV 50H,#1
	    MOV 51H,#1
	    MOV P1,#01H             ;LCD初始化
	    LCALL ENABLE            ;调用命令生效子程序
	    LCALL DELAY             ;调用保证控制字写入的延时子程序
	    MOV P1,#06H
	    LCALL ENABLE
	    LCALL DELAY
	    MOV P1,#0CH
	    LCALL ENABLE
	    LCALL DELAY
	    MOV P1,#3CH
	    LCALL ENABLE
	    LCALL DELAY
	    MOV P1,#0C4H
	    LCALL ENABLE
	    LCALL DELAY
	    MOV DPTR,#TABLE
	    MOV R0,#8
	    MOV R1,#0
     AGAIN: MOV A,R1
            MOVC A,@A+DPTR
	    MOV P1,A
	    LCALL EABLE1             ;调用写入数据生效子程序
	    LCALL DELAY
	    INC R1
	    DJNZ R0,AGAIN
	    SETB TR1
    RETURN: jb p2.7,return1          ;判断电源是否断掉        
            JNB 06H,RETURN
	    CLR C
	    MOV 06H,C                ;电源标志清零
            mov p1,#08h              ;关LCD
	    lcall enable
	    lcall delay
	    clr ex0                  ;关外部中断
	    clr ex1
	    ajmp return
    return1:JNB P0.7,RETURN          ;判断是否允许报警
	    JNB 05H,RETURN           ;判断定时是否到达
	    CLR C
	    MOV 05H,C
	    CLR P2.5                 ;点亮二极管                
	    CLR P2.6                 ;驱动继电器
    AGAIN3: CPL P2.4                 ;驱动蜂鸣器     
            LCALL DELAY1
            jb p2.7,pow
            SETB P2.5                ;关掉二极管               
	    SETB P2.6                ;关掉继电器
	    SETB P2.4 
	    ajmp return
       pow: JB P0.7,AGAIN3
	    SETB P2.5                ;关掉二极管               
	    SETB P2.6                ;关掉继电器
	    SETB P2.4                ;关掉蜂鸣器
	    AJMP RETURN

 ;*************************
 INSERT_T1: INC 50H                  ;T1中断服务程序
            MOV A,#250
	    CJNE A,50H,EXIT11
	    MOV 50H,#1
	    INC 51H
	    MOV A,#16
	    CJNE A,51H,EXIT11
	    MOV 51H,#1
	    INC R4                   ;1s=16*250*250us
	    CJNE R4,#60,LP18
	    MOV 55H,#0
	    AJMP LP19
      LP18: MOV 55H,R4
      LP19: MOV P1,#0CAH             ;秒钟变化时显示
	    LCALL ENABLE
	    LCALL DELAY
	    LCALL DISPLAY            ;24#到12#的转换
	    JB P0.6,H2411            ;判断选择的计数进制
	    JNB 00H,LP131            ;判断上一次是否是12#,是则不进行转换,否则转换
	    CLR C
	    MOV 00H,C                ;把进制标志改为12#
	    MOV A,#11                ;大于11,显示pm,否则显示am
	    SUBB A,R2
	    JC LP14           
	    CLR C              
	    MOV 02H,C
	    MOV 01H,C
	    MOV P1,#0CEH
	    LCALL ENABLE
	    LCALL DELAY
	    MOV P1,#41H
	    LCALL EABLE1
	    LCALL DELAY
	    MOV P1,#4DH
	    LCALL EABLE1
	    LCALL DELAY
            MOV A,R2
	    JZ LP1C
     LP131: AJMP LP13
     H2411: AJMP H24
    EXIT11: AJMP EXIT1
      LP14: SETB C
            MOV 02H,C
            MOV P1,#0CEH
            LCALL ENABLE
	    LCALL DELAY
	    MOV P1,#50H
	    LCALL EABLE1
	    LCALL DELAY
	    MOV P1,#4DH
	    LCALL EABLE1
	    LCALL DELAY
	    MOV A,#12
	    CLR C
	    SUBB A,R2
	    JC LP1B             ;大于12,小时数值减12,否则不变
	    CLR C               
	    MOV 01H,C
            AJMP LP13
      LP1C: MOV A,#12
            ADD A,R2
	    MOV R2,A
	    AJMP LP1D
      LP1B: SETB C
            MOV 01H,C
	    CLR C
	    MOV A,R2
	    SUBB A,#12
	    MOV R2,A
      LP1D: MOV P1,#0C4H             ;显示小时数值
	    LCALL ENABLE
	    LCALL DELAY
            MOV A,R2                 ;小时位上第一位0不显示
            MOV B,#10
	    DIV AB
	    JZ LP20
            MOV 55H,R2
	    LCALL DISPLAY            ;调用显示2位十进制数子程序
	    AJMP LP21
      LP20: LCALL DISPLAY1           ;调用第1位为空,第2位为数值的显示子程序
      LP21: AJMP LP13                ;12#到24#的转换
       H24: JB 00H,LP13              ;判断上一次是否为24#,是则不转换,否则转换
            SETB C                   
	    MOV 00H,C                ;把进制标志改为24#
	    MOV P1,#0CEH             ;清掉显示的am/pm
	    LCALL ENABLE
	    LCALL DELAY
	    MOV P1,#20H
	    LCALL EABLE1
	    LCALL DELAY
	    MOV P1,#20H
	    LCALL EABLE1
	    LCALL DELAY
            JNB 01H,LP30            ;pm计算标志为1时,小时数值加12 
	    MOV A,#12
	    ADD A,R2
	    MOV R2,A
	    MOV A,#23              
	    CLR C
	    SUBB A,R2               ;小时数值大于23时变为0
	    JNC LP15
            MOV R2,#0
      LP15: MOV P1,#0C4H            ;显示小时数值
 	    LCALL ENABLE
	    LCALL DELAY
	    MOV A,R2                ;小时位第一位0不显示
	    MOV B,#10
	    DIV AB
	    JZ LP1E
	    MOV 55H,R2
	    LCALL DISPLAY
	    AJMP LP30 
      LP1E: LCALL DISPLAY1
      lp30: jb 02h,lp13             ;12#的上午12点转换为24#的0点
            cjne r2,#12,lp13
	    mov r2,#0
            MOV P1,#0C4H
 	    LCALL ENABLE
	    LCALL DELAY
	    MOV A,R2
	    MOV B,#10
	    DIV AB
	    JZ LP31
	    MOV 55H,R2
	    LCALL DISPLAY
	    AJMP LP13 
      LP31: LCALL DISPLAY1
      LP13: CJNE R4,#60,EXIT12       ;秒钟到60时向分钟进1
            MOV R4,#0
            INC R3
	    CJNE R3,#60,LP16
	    MOV R3,#0
	    MOV 55H,R3               ;显示调整后的分钟值
	    MOV P1,#0C7H
	    LCALL ENABLE
	    LCALL DELAY
	    LCALL DISPLAY
	    INC R2                   ;分钟位向小时位进位
            AJMP LP17
    EXIT12: AJMP EXIT1
      LP16: MOV 55H,R3               ;显示变化后的分钟值              
	    MOV P1,#0C7H
	    LCALL ENABLE
	    LCALL DELAY
	    LCALL DISPLAY
	    AJMP EXIT1
      LP17: JB P0.6,H241             ;判断当前选择的计数进制
	    CLR C                    ;12#时调整小时值以及am/pm显示和计算的标志位
	    MOV A,#11
	    SUBB A,R2
	    JNC DIS11      
            CLR C        
	    MOV A,#12
	    SUBB A,R2
	    JNC LP1A       
            MOV R2,#1      
            MOV C,01H
	    CPL C
            MOV 01H,C
            ajmp DIS11
      LP1A: MOV C,02H
            CPL C
            MOV 02H,C
	    JB 02H,LP11
	    MOV 55H,#41H
	    AJMP LP12
      LP11: MOV 55H,#50H
      LP12: MOV P1,#0CEH
            LCALL ENABLE
	    LCALL DELAY
	    MOV P1,55H
	    LCALL EABLE1
	    LCALL DELAY
	    AJMP DIS11
      H241: MOV A,#23                ;24#时调整小时值
            CLR C
	    SUBB A,R2
            JNC DIS11
	    MOV R2,#0
     DIS11: MOV P1,#0C4H            ;显示变化后的小时值
	    LCALL ENABLE
 	    LCALL DELAY
	    MOV A,R2
	    MOV B,#10
	    DIV AB
	    JZ LP1F
	    MOV 55H,R2
	    LCALL DISPLAY
	    AJMP EXIT1
      LP1F: LCALL DISPLAY1
     EXIT1: MOV A,#0                 ;判断定时是否到达
            JB 00H,NEXITT1           ;在24#下判断,若当前为12#则转换为24#
            JNB 01H,NEXITT1
            MOV A,#12
   NEXITT1: ADD A,R2
            MOV 30H,R5
            CJNE A,30H,EXIT2
	    MOV A,R3
	    MOV 30H,R6
	    CJNE A,30H,EXIT2
	    CJNE R4,#0,EXIT2
	    SETB C
	    MOV 05H,C                ;定时到达时置报警标志位为1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -