欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8729|回復: 7
收起左側

基于51單片機的99-00倒計時秒表

[復制鏈接]
ID:372070 發表于 2018-7-15 20:52 | 顯示全部樓層 |閱讀模式
;有位網友寫了一個倒計時秒表的程序,程序中的變量,采用了逐次加一的方法。;變量加一,怎么能夠倒計時呢?;原來,程序中段碼的排列次序,反過來了。;于是:;當變量是0的時候,查找出來9的段碼,送去顯示;;當變量是1的時候,查找出來8的段碼,送去顯示;;……;當變量是9的時候,查找出來1的段碼,送去顯示。

;更改一下七段碼表的次序,竟然可以使程序由正計時,變成倒計時!;構思極為巧妙。;PROTEUS 仿真截圖如下:
11.png

;程序使用匯編語言編寫,原程序的結構有些凌亂,沒有達到預期的效果。;做而論道稍加整理,可以正常工作了,全部程序如下。;硬件中,設置了一個按鍵,用以控制計時器的啟動、暫停和復位。

SECOND  EQU    30H
TCOUNT  EQU    31H
KCOUNT  EQU    32H
KEY     BIT    P3.7
    ORG   00H
    SJMP  START
    ORG   0BH
    LJMP  T0_INT
;----------------------------------------
START:
    MOV  P0, #6FH     ;開始, 數碼管顯示"99"
    MOV  P2, #6FH

    MOV  TMOD, #01H   ;T0定時方式1
    MOV  TH0, #(65536 - 50000) / 256
    MOV  TL0, #(65536 - 50000) MOD 256
    MOV  IE, #82H

    MOV  SECOND, #0
    MOV  TCOUNT, #0
    MOV  KCOUNT, #0
;----------------------------------------
K0:
    JB   KEY, $       ;等待按鍵按下
    CALL DELAY        ;延時
    JB   KEY, K0      ;沒有按下,就是抖動
    JNB  KEY, $       ;等待按鍵松開
    INC  KCOUNT       ;按鍵次數值加1
;----------------------
    MOV  A, KCOUNT    ;判斷按鍵次數
K1:
    CJNE A, #1, K2
    SETB TR0          ;第1次按鍵, 啟動定時器
    JMP  K0
;----------------------
K2:
    CJNE A, #2, START
    CLR  TR0          ;第2次按鍵, 關閉定時器
    JMP  K0
;----------------------------------------
T0_INT:
    MOV  TL0, #(65536 - 50000) MOD 256
    MOV  TH0, #(65536 - 50000) / 256
    INC  TCOUNT
    MOV  A, TCOUNT
;    CJNE A, #2, T0_END ;是否計0.1秒?
    CJNE A, #10, T0_END ;2, 速度太快,不便觀察,暫用10
    MOV  TCOUNT, #0
    INC  SECOND
    MOV  A, SECOND
    CJNE A, #100,  DISP ;是否夠10秒?
    MOV  SECOND, #0
DISP:
    MOV  DPTR, #TABLE
    MOV  A, SECOND
    MOV  B, #10
    DIV  AB
    MOVC A, @A+DPTR     ;顯示時間
    MOV  P0, A
    MOV  A, B
    MOVC A, @A+DPTR
    MOV  P2, A
T0_END:
    RETI        
;----------------------------------------
TABLE:
;9~0的段碼, 反序排序。使用反序,可顯示倒計時
    DB   6FH, 7FH, 07H, 7DH, 6DH
    DB   66H, 4FH, 5BH, 06H, 3FH
;0~9的段碼, 正序
;    DB   3FH, 06H, 5BH, 4FH, 66H
;    DB   6DH, 7DH, 07H, 7FH, 6FH
;----------------------------------------
DELAY:
    MOV  R6, #20
D1: MOV  R7, #250
    DJNZ R7, $
    DJNZ R6, D1
    RET
;----------------------------------------
    END



回復

使用道具 舉報

ID:308903 發表于 2018-7-16 16:59 | 顯示全部樓層
用以控制計時器的啟動、暫停和復位:::::::::::: 從上面程序分析,K0 是用來計數,K1 是用來啟動定時器,K2是用來關掉定時器,那前面二次還好理解,第一次按下,計數一,且打開定時,也就是倒計時開始。那么第二次按下,計數二,并且關掉定時,那倒計時定住不走。 要是,到了第三次按下,計數清零,倒計時復位99...., 也就是說,暫停之后,不是繼續倒計時,而是復位了了。

嗯準確點就是  啟動,停止,復位。  三個功能

不知道分析的對不對,盯了一下午,眼花頭暈了

評分

參與人數 1黑幣 +60 收起 理由
admin + 60 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:741432 發表于 2020-5-13 11:39 | 顯示全部樓層
tcount是代表什么?
回復

使用道具 舉報

ID:308903 發表于 2018-7-19 09:54 | 顯示全部樓層
但是,就個位在變,十位一直不動
回復

使用道具 舉報

ID:308903 發表于 2018-7-19 09:33 | 顯示全部樓層
今天又重新仿真了下,發現,昨天說錯了...., CJNE A, #2, T0_END  是記 0.1秒  CJNE A, #10, T0_END  記1秒....額,為啥呢,難道晶振選錯了? 初值付錯了?
回復

使用道具 舉報

ID:308903 發表于 2018-7-18 16:56 | 顯示全部樓層
PS: 程序一個個打出來仿真了下,有個注意點提醒下在看的同學們:=======
TO_INT:
。。。。。。。。。

;    CJNE A, #2, T0_END ;是否計0.1秒?
    CJNE A, #10, T0_END ;2, 速度太快,不便觀察,暫用10
。。。。。。。。。
========
這里面,選  CJNE A, #2, T0_END    才是按秒倒數,所以,用的時候,把前面的冒號去掉
下面那句, CJNE A, #10, T0_END    應該是放慢5倍來倒減,即5秒減一個數

另外,不知道為啥,個人遇到的問題,望知道的同學解惑下

MOV        TH0,#(65536 - 50000) / 256
MOV        TL0,#(65536 - 50000) MOD 256


賦初值 的語句,竟然在proteus 13 的自帶軟件中編譯不了,而在KEIL 中可以編譯





說超出范圍...

說超出范圍...

評分

參與人數 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:372341 發表于 2018-7-16 10:19 | 顯示全部樓層
謝謝樓主
回復

使用道具 舉報

ID:308903 發表于 2018-7-16 08:37 | 顯示全部樓層
我喜歡匯編....謝謝樓主
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表