显示计时的时间,最大显示为99

;用LED数码显示器显示计时的时间,显示两位即可,最大显示时间为99s;
;K1按下时,计时开始,指示灯1亮,再按一下停止计时,指示灯2亮;
;K2按下去,时间显示清0,指示灯3亮;
;延时一段时间后3个指示灯熄灭。

;两位共阳数码管
;P0接段码、P2位码

电路如下:

显示计时的时间,最大显示为99_第1张图片

图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/74d5c34f251f95cadaed7f03c9177f3e66095248.html

程序用汇编语言编写,如下所示:

sbit K1 = P3.2
sbit K2 = P3.3

sbit LED1 = P3.5
sbit LED2 = P3.6
sbit LED3 = P3.7

    ORG  0000H
    SJMP START
    ORG  000BH
    SJMP INT_T0
START:
    MOV  TMOD, #0x01    ;使用T0定时50ms
    MOV  TH0, #0x3C     ;(65536-50000)/256;
    MOV  TL0, #0xB0     ;(65536-50000)%256;
    SETB ET0            ;开启定时中断
    SETB EA
    MOV  R2, #0         ;秒数
    MOV  R3, #0
    MOV  R4, #20        ;中断次数, 20即为1s
M_LOOP:
    CALL DISP           ;显示
    JNB  K1, K11        ;K1按下转移
    JNB  K2, K21        ;K2按下转移
    SJMP M_LOOP
;------------------------------------
;K1按下时,计时开始,指示灯1亮,再按一下停止计时,指示灯2亮;

K11:CALL DISP           ;K1按下了
    CALL DISP           ;显示当做延时
    JB   K1, M_LOOP     ;松开了, 是抖动
K12:
    CALL DISP           ;显示
    JNB  K1, K12        ;等待释放
;------------------------
    JB   TR0, K13
    SETB TR0            ;开启定时器
    CLR  LED1           ;指示灯1亮
    SETB LED2           ;指示灯2灭
    SJMP LOOP1          ;完成本次操作
;------------------------
K13:CLR  TR0            ;关闭定时器
    SETB LED1           ;指示灯1灭
    CLR  LED2           ;指示灯2亮
    SJMP LOOP1          ;完成本次操作
;------------------------------------
;K2按下去时间清0,指示灯3亮

K21:CALL DISP           ;显示当做延时
    JB   K2, M_LOOP     ;松开了, 是抖动
K22:CALL DISP           ;显示
    JNB  K2, K22        ;等待释放
;------------------------
    CLR  LED3           ;指示灯3亮
    MOV  R2, #0
    MOV  R3, #0         ;时间清零
;------------------------------------
LOOP1:            ;延时一段时间后3个指示灯熄灭。
    MOV  R5, #0
W_T:CALL DISP           ;反复循环,即延时一段时间
    CALL DISP
    CALL DISP
    CALL DISP
    DJNZ R5, W_T
    MOV  P3, #255       ;指示灯全灭
    LJMP M_LOOP         ;转去等待按键
;-------------------------
INT_T0:
    MOV  TH0, #0x3C     ;(65536-50000)/256;
    MOV  TL0, #0xB7     ;(65536-50000)%256;
    DJNZ R4, E_T0
    MOV  R4, #20
    INC  R3             ;个位
    CJNE R3, #10, E_T0
    MOV  R3, #0
    INC  R2             ;十位
    CJNE R2, #10, E_T0
    MOV  R2, #0
E_T0:
    RETI
;-------------------------
DL2MS:
    MOV  R6, #2
D1: MOV  R7, #250
D2: DJNZ R7, D2
    DJNZ R6, D1
    RET
;-------------------------
DISP:
    MOV  DPTR, #TAB
    MOV  A, R2        ;取来十位数
    MOVC A, @A + DPTR
    MOV  P0, A        ;在P0口输出段码
    MOV  P2, #2       ;在P2口输出位码
    CALL DL2MS        ;发光2ms
    MOV  P2, #0
    MOV  A, R3
    MOVC A, @A + DPTR
    MOV  P0, A
    MOV  P2, #1
    CALL DL2MS
    MOV  P2, #0
    RET
;-------------------------
TAB:
    DB   0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xFF
;-------------------------
    END

本程序、电路都是正确的,可以满足题目的要求,可以提问者看到了答案,却关闭了题目。

原题网址:http://zhidao.baidu.com/question/129444921.html

你可能感兴趣的:(计时类)