51单片机汇编语言编程:开关控制计时

;在P0.0有一拨动开关;
;当开关置高电平时,接P1端口有一数码管开始计时;
;当按钮置低电平是数码管显示0。
;----------------------------
;分析:
;本题目可算是个1位数的秒表,只是把暂停和清零功能合并了。
;这种秒表,实际应用起来,好像并不方便。
;秒表走时的时候,并不便于观察数值,一旦停止,却又立刻就清零。
;没有办法,题目就是这样要求的,写程序吧。
;仿真截图如下:

51单片机汇编语言编程:开关控制计时_第1张图片

;图片链接:http://xiangce.baidu.com/picture/detail/a25c9c6836dbfcba9db242c000dfde5ded193192


;程序如下:

        ORG  0000H
        LJMP MAIN
        ORG  0030H
MAIN:
        MOV  TMOD, #01H  ;T0定时方式1
        MOV  TH0, #3CH   ;50ms@12MHz
        MOV  TL0, #0B0H
        SETB TR0
;
        MOV  R7, #20     ;50ms中断次数.
        MOV  R6, #0      ;秒数置零.
DISP:
        MOV  DPTR, #DUAN_TAB   ;段码表地址.
        MOV  A, R6
        MOVC A, @A+DPTR  ;查表.
        MOV  P1, A       ;送到P1去显示.
M_LOOP:
        JNB  TF0, $      ;50ms?
        CLR  TF0
        MOV  TL0, #0B0H  ;重写初始值.
        MOV  TH0, #3CH   ;50ms@12MHz
        DJNZ R7, M_LOOP  ;不到20次继续等待.
        MOV  R7, #20
        INC  R6          ;秒加一.
        CJNE R6, #10, DET_P00 ;不到10,就去查P0.0
        MOV  R6, #0      ;秒数置零.
DET_P00:
        JNB  P0.0, DISP  ;P0.0开关置高电平时,数码管计时.
        AJMP MAIN        ;否则重新开始.

DUAN_TAB:
        DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
        DB 80H,90H,88H,83H,86H,0A1H,86H,8EH
END 
;=============================================
;本题目来自百度知道,提问者选择了一个错误的“最佳答案”。
;大家可以按照下面的链接,运行一下错误的程序,看看会出什么结果。
;原题网址:http://zhidao.baidu.com/question/268267264.html
;=============================================

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