8051轉速錶之七段顯示器問題 |
答題得分者是:ScottWang
|
gn01673868
一般會員 發表:1 回覆:3 積分:0 註冊:2009-12-26 發送簡訊給我 |
現在程式的問題是
七段顯示器會閃爍 不管怎麼調整延遲都一樣 不知道哪裡錯了 是否能請高手幫忙看一下 units equ 30H ;設定位址30H為個位數暫存器units tens equ 31H ;設定位址31H為十位數暫存器tens hundreds equ 32H ;設定位址32H為百位數暫存器hundreds scancode equ 33H ;設定位址33H為掃描值暫存器scancode org 0 ;程式由位址00H的地方開始存放 jmp start start: mov sp,#6fh ;設定堆疊存放位置從70H開始 mov tmod,#01100000b ;設定TMOD暫存器 (課本6-4) ;Timer1的工作模式為Mode2,且脈波源來自外部T1腳的數入脈波 ;Timer0的工作模式為Mode0,且脈波源來自內部晶體振盪Fosc/12 mov th1,#0 mov tl1,#0 mov r7,#200 setb tr1 call delay1 mov a,tl1 clr tr1 jmp count count: mov b,#6 ;圓盤一圈洞數6放入暫存器b div ab ;每秒訊號除以洞數6,a為商數(轉數rps),b為餘數 ;==百位數== mov b,#100 ;b放入100 div ab ;轉數除以100,a為百位數數值,b為餘數 mov hundreds,a ;百位數數值置入hundreds ;==十位數&個位數== mov a,b ;百位數計算後的餘數放入a mov b,#10 ;b放入10 div ab ;百位數計算後的餘數除以10,a為十位數,b為餘數 mov tens,a ;十位數數值置入tens mov a,b ;個位數數值放入a (因暫存器不能直接移動到另一暫存器) mov units,a ;個位數數值置入units ;==顯示七段顯示器== mov scancode,#11111110b mov r4,#3 mov r0,#2fh loop: inc r0 mov a,@r0 call accessdisplaycode mov p0,a mov p2,scancode mov a,scancode rl a mov scancode,a mov r6,#125 ;需作適當的時間延遲,掃描完4個顯示器大約花費 djnz r6,$ ;4 * 250us =1ms的時間 djnz r4,loop jmp start ;==延遲副程式1== delay1: setb tr0 timer_loop: mov tl0,#(2**13-5000).mod.32 mov th0,#(2**13-5000)/32 timer_wait: jbc tf0,timer_ok jmp timer_wait timer_ok: djnz r7,timer_loop clr tr0 ret ;==取碼副程式== accessdisplaycode: mov dptr,#displaycodetable movc a,@a dptr ret displaycodetable: db c0h db 0f9h db 0a4h db 0b0h db 99h db 92h db 83h db 0f8h db 80h db 98h .end |
ScottWang
版主 發表:32 回覆:486 積分:688 註冊:2009-04-27 發送簡訊給我 |
顯示器的掃描時間,是根據人的視覺暫留而來的,大約20mS~40mS與一般鍵盤彈跳掃描差不多.
所以每一個位數的顯示時間最好需有20mS以上.
------
高壓直流電源供應器,高壓模組,測試LED專用AC LED定電流源,全範圍可調電壓電流, 中低壓直流電源供應器,電壓放大器,電流放大器,帶通濾波器,高精度參考電壓, 標準電壓,恆流源(定電流源),恆壓源(定電壓源),大電流電源供應器. 接受訂製,設計生產各種特殊規格,高精度產品,學校實驗室,研究單位實驗設備, 另可接受其它電子專案設計,HV Power,Vmax=20KV,Imax=2000A. http://hvpower.myweb.hinet.net/ |
gn01673868
一般會員 發表:1 回覆:3 積分:0 註冊:2009-12-26 發送簡訊給我 |
|
ScottWang
版主 發表:32 回覆:486 積分:688 註冊:2009-04-27 發送簡訊給我 |
你可以把四位數的掃描程式寫成一個20mS~40mS的副程式,而這個副程式就當做是一個Delay的單元,以此單元再乘以倍數去達成所要的其它delay,這樣原來其它的delay與掃描程式就能共用,相容而不衝突了.
------
高壓直流電源供應器,高壓模組,測試LED專用AC LED定電流源,全範圍可調電壓電流, 中低壓直流電源供應器,電壓放大器,電流放大器,帶通濾波器,高精度參考電壓, 標準電壓,恆流源(定電流源),恆壓源(定電壓源),大電流電源供應器. 接受訂製,設計生產各種特殊規格,高精度產品,學校實驗室,研究單位實驗設備, 另可接受其它電子專案設計,HV Power,Vmax=20KV,Imax=2000A. http://hvpower.myweb.hinet.net/ |
gn01673868
一般會員 發表:1 回覆:3 積分:0 註冊:2009-12-26 發送簡訊給我 |
|
src
高階會員 發表:1 回覆:94 積分:154 註冊:2005-08-23 發送簡訊給我 |
[code delphi] units equ 30H ;設定位址30H為個位數暫存器units tens equ 31H ;設定位址31H為十位數暫存器tens hundreds equ 32H ;設定位址32H為百位數暫存器hundreds scancode equ 33H ;設定位址33H為掃描值暫存器scancode read_flag equ 20h.0 ;宣告讀取旗標 org 0 ;程式由位址00H的地方開始存放 jmp start org 0bh ;timer0中斷起始位址 jmp t0_int start: mov sp,#6fh ;設定堆疊存放位置從70H開始 mov tmod,#01100000b ;設定TMOD暫存器 (課本6-4) ;Timer1的工作模式為Mode2,且脈波源來自外部T1腳的數入脈波 ;Timer0的工作模式為Mode0,且脈波源來自內部晶體振盪Fosc/12 mov ie,#81h ;中斷致能 main: jb read_flag,loop setb read_flag ;設定讀取旗標 mov th1,#0 mov tl1,#0 mov r7,#200 setb tr1 setb tr0 loop: ;==顯示七段顯示器== mov scancode,#11111110b mov r4,#3 mov r0,#2fh inc r0 mov a,@r0 call accessdisplaycode mov p0,a mov p2,scancode mov a,scancode rl a mov scancode,a mov r6,#125 ;需作適當的時間延遲,掃描完4個顯示器大約花費 djnz r6,$ ;4 * 250us =1ms的時間 djnz r4,loop jmp main ;==timer0中斷程式== t0_int: mov tl0,#(8192-5000) mod 32 mov th0,#(8192-5000)/32 djnz r7,t0_ret mov a,tl1 clr tr1 mov b,#6 ;圓盤一圈洞數6放入暫存器b div ab ;每秒訊號除以洞數6,a為商數(轉數rps),b為餘數 ;==百位數== mov b,#100 ;b放入100 div ab ;轉數除以100,a為百位數數值,b為餘數 mov hundreds,a ;百位數數值置入hundreds ;==十位數&個位數== mov a,b ;百位數計算後的餘數放入a mov b,#10 ;b放入10 div ab ;百位數計算後的餘數除以10,a為十位數,b為餘數 mov tens,a ;十位數數值置入tens mov a,b ;個位數數值放入a (因暫存器不能直接移動到另一暫存器) mov units,a ;個位數數值置入units clr tr0 clr read_flag ;清除讀取旗標 t0_ret: reti ;==取碼副程式== accessdisplaycode: mov dptr,#displaycodetable movc a,@a dptr ret displaycodetable: db 0c0h db 0f9h db 0a4h db 0b0h db 99h db 92h db 83h db 0f8h db 80h db 98h end[/code] ===================引 用 gn01673868 文 章=================== ===================引 用 ScottWang 文 章=================== 你可以把四位數的掃描程式寫成一個20mS~40mS的副程式,而這個副程式就當做是一個Delay的單元,以此單元再乘以倍數去達成所要的其它delay,這樣原來其它的delay與掃描程式就能共用,相容而不衝突了. 剛剛把主程式的delay先移除掉 結果顯示器顯示就ok 可是主程式不delay的話又不能計數1s內的訊號 如果秒數調低的話那計的又不準 是否有其他方法可以解決此問題呢? |
gn01673868
一般會員 發表:1 回覆:3 積分:0 註冊:2009-12-26 發送簡訊給我 |
|
ScottWang
版主 發表:32 回覆:486 積分:688 註冊:2009-04-27 發送簡訊給我 |
有一些技巧,可能書本找不到,而你所接觸的人也不知道,因為你的確也有在自己寫程式,所以弄懂意思後,照著技巧下去寫,你就學起來了,沒在寫程式的人,只想要現成的,告訴他這些是沒有用的,希望改天你也可以把它分享給有需要的人.
------
高壓直流電源供應器,高壓模組,測試LED專用AC LED定電流源,全範圍可調電壓電流, 中低壓直流電源供應器,電壓放大器,電流放大器,帶通濾波器,高精度參考電壓, 標準電壓,恆流源(定電流源),恆壓源(定電壓源),大電流電源供應器. 接受訂製,設計生產各種特殊規格,高精度產品,學校實驗室,研究單位實驗設備, 另可接受其它電子專案設計,HV Power,Vmax=20KV,Imax=2000A. http://hvpower.myweb.hinet.net/ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |