全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4929
推到 Plurk!
推到 Facebook!

設計led顯示一問

答題得分者是:暗黑破壞神
iqsteven
一般會員


發表:4
回覆:9
積分:2
註冊:2007-10-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-21 15:36:16 IP:59.149.xxx.xxx 訂閱
小弟欲研究用8051作一立體的led圖案顯示器,但矩陣led顯示過於呆板及光度不足,請問各大大,可否用多個led組成一電路代替矩陣led顯示作出可顯示不同圖案的效果,或會否有其他解決方法?
編輯記錄
iqsteven 重新編輯於 2007-10-21 15:41:29, 註解 無‧
iqsteven 重新編輯於 2007-10-21 16:00:24, 註解 無‧
iqsteven 重新編輯於 2007-10-21 16:20:48, 註解 無‧

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-21 17:02:31 IP:211.76.xxx.xxx 未訂閱
光度不足? 將它的驅動電阻換小一點就可以了.

也可以用多個 LED 代替. 不過驅動電路跟解碼掃瞄電路你就要自己設計了.
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
iqsteven
一般會員


發表:4
回覆:9
積分:2
註冊:2007-10-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-21 18:56:10 IP:59.149.xxx.xxx 訂閱
謝謝大大,
另請問大大是不是可以用74164來控制多個led出示不同的圖案呢~!?
因為我看書74164是可以控制8x8的矩陣led顯示,若可以的話可否控制更多的led,例如:16x16呢?
及可否介紹一下相關網頁讓我學習一下
十分感謝
編輯記錄
iqsteven 重新編輯於 2007-10-21 19:18:35, 註解 無‧
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-10-21 20:07:49 IP:61.225.xxx.xxx 未訂閱
164 當然可以一直擴充下去.
只是你的 clock 要快一點.不然閃動的情況會很嚴重.
bernie_w39
資深會員


發表:3
回覆:199
積分:280
註冊:2007-10-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-10-21 21:17:33 IP:59.115.xxx.xxx 訂閱
如果你要用 8051 驅動 16x16 個 LED, 可以用 3 個 port 來控制兩組 74164.
共用 clock 線, data 線各自獨立. 達到 column 的控制, 但是另一邊的 row,
最好是用 2 組 8bit 的 8051 輸出來控制, 如果要省 8051 的 port, 就用兩顆
74138. 不要再用 74164

因為 74164 既沒有 latch, 也沒有 OE, 所以無法暫時 disable 輸出. 這樣在
column 資料變換的時候, row 無法 disable, 會造成畫面很混亂.
iqsteven
一般會員


發表:4
回覆:9
積分:2
註冊:2007-10-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-10-21 21:59:51 IP:59.149.xxx.xxx 訂閱
因為小弟是電子新手..
請問各大大可有相關網頁讓小弟學習如何利用74164
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-10-22 08:52:02 IP:61.225.xxx.xxx 未訂閱
74164 為什麼不能用?
為什麼會混亂??
以共陽的led。你想要做 data change 時。只要把共陽的 power 關閉就好了。
等你把資料變換完畢。你再去把電源打開就達到你的功能了。

===================引 用 bernie_w39 文 章===================
如果你要用 8051 驅動 16x16 個 LED, 可以用 3 個 port 來控制兩組 74164.
共用 clock 線, data 線各自獨立. 達到 column 的控制, 但是另一邊的 row,
最好是用 2 組 8bit 的 8051 輸出來控制, 如果要省 8051 的 port, 就用兩顆
74138. 不要再用 74164

因為 74164 既沒有 latch, 也沒有 OE, 所以無法暫時 disable 輸出. 這樣在
column 資料變換的時候, row 無法 disable, 會造成畫面很混亂.
bernie_w39
資深會員


發表:3
回覆:199
積分:280
註冊:2007-10-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-10-22 14:25:08 IP:61.218.xxx.xxx 訂閱
如果共陽端是用 74164 去推一顆 PNP, 然後再用這個 PNP 去點 LED, 然後陰極也是用 74164.
那就還要一個總電源開關才行. 否則無法 "把共陽的 power 關閉"

因為 74164 沒有 OE 線, 也不能作 LATCH

===================引 用 暗黑破壞神 文 章===================
74164 為什麼不能用?
為什麼會混亂??
以共陽的led。你想要做 data change 時。只要把共陽的 power 關閉就好了。
等你把資料變換完畢。你再去把電源打開就達到你的功能了。
foreman
高階會員


發表:3
回覆:124
積分:190
註冊:2004-09-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-10-23 09:39:22 IP:125.229.xxx.xxx 未訂閱
大大:
改成74595如何?雖然多使用一隻腳但很好用.
iqsteven
一般會員


發表:4
回覆:9
積分:2
註冊:2007-10-20

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-10-24 00:10:58 IP:59.149.xxx.xxx 訂閱
麻煩各大大,幫看一下電路會否有問題.
另想問一下,如何可以盡量避免有混亂發生?感謝
圖1圖2
編輯記錄
iqsteven 重新編輯於 2007-10-24 00:14:19, 註解 無‧
iqsteven 重新編輯於 2007-10-24 00:16:02, 註解 無‧
DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-10-24 06:34:30 IP:220.139.xxx.xxx 訂閱
大大先生!
若考慮壹行會同時點亮兩個LED以上,其LED分配電流會如何?LED電流決定亮度.

若在考慮將來,圖案會有上下左右移動時,程序如何處理?


addn
高階會員


發表:64
回覆:221
積分:202
註冊:2005-03-21

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-10-24 08:14:02 IP:218.171.xxx.xxx 訂閱
您好
可以試試用7219,
http://www.datasheetcatalog.com/datasheets_pdf/M/A/X/7/MAX7219.shtml
用這個的話,
1.51可以不用去管掃描顯示動作,只要將要顯示資料丟到他內部記憶體就會
自動顯示
2.可以直接接LED不用在去用電晶體來驅動,接線會較單純不複雜
3.內建16皆PWM,可以改變亮度

暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-10-24 08:25:48 IP:61.225.xxx.xxx 未訂閱
74164 可以一顆串一顆。
不用兩顆都接到 uC。
這樣就失去用它的意義了。
bernie_w39
資深會員


發表:3
回覆:199
積分:280
註冊:2007-10-07

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-10-24 11:09:25 IP:61.218.xxx.xxx 訂閱
ULN2803 的推動能力是 500mA 而已. 一排 16 顆全亮時, 電流可能飆上 (5 - 0.3 - 0.7 - 1.5) / 50 * 16 = 800mA
要小心燒掉了 ULN2803.
iqsteven
一般會員


發表:4
回覆:9
積分:2
註冊:2007-10-20

發送簡訊給我
#15 引用回覆 回覆 發表時間:2007-10-24 22:19:04 IP:59.149.xxx.xxx 訂閱
請問大大,若使用多二個2803可否避免該問題?
bernie_w39
資深會員


發表:3
回覆:199
積分:280
註冊:2007-10-07

發送簡訊給我
#16 引用回覆 回覆 發表時間:2007-10-24 22:35:28 IP:61.217.xxx.xxx 訂閱
如果電路板大小夠的話, 可以考慮用單顆的 2N2222, 雖然耐流同樣在 500mA,
但是分散之後, 散熱會好很多. 雖然 on 的時候可能過載, 但是畢竟只有 1/16 duty.
所以還有 15/16 的時間可以散熱.

但是用陣列電晶體時, 就只有 1/2 的時間是 off 的, 散熱時間明顯不足. 用兩顆
NPN 共同來推的話, 要在 E 極各加一顆 1 ohm 左右的電阻來衡. 不然 NPN 電晶體
的特性, 愈熱的 hfe 愈高. 所以兩顆 NPN 中 hfe 特性好的, 會流通比較大的電流,
然後變的更熱, 更熱後 hfe 更高, 最後可能 99% 的電流會流經這一顆, 就是所謂
"熱跑脫".
iqsteven
一般會員


發表:4
回覆:9
積分:2
註冊:2007-10-20

發送簡訊給我
#17 引用回覆 回覆 發表時間:2007-10-26 01:42:28 IP:59.149.xxx.xxx 訂閱
請問暗黑破壞神大大,74164 一顆串一顆是巨體的是如何接駁,會否是用其中一腳再駁另一個74164,及控制方法會否有分別嗎??
bernie_w39
資深會員


發表:3
回覆:199
積分:280
註冊:2007-10-07

發送簡訊給我
#18 引用回覆 回覆 發表時間:2007-10-26 05:27:56 IP:61.217.xxx.xxx 訂閱
一顆串一顆, 就是兩個 164 共用一條 clock 線, 然後其中一顆的 A, B 線接自另一顆的 QH.
這樣的好處是 8051 只佔用兩個 PORT, 即可控制 16 PORT 的 on/off. 連續送出 16 bit
的資料即可.

缺點是設定的時間變的比較長. 其實如果 8051 的 I/O port 夠用, 你原本的接法也沒什麼
不好.
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#19 引用回覆 回覆 發表時間:2007-10-26 09:00:01 IP:61.225.xxx.xxx 未訂閱
你要去運算兩顆 164 的 bit hi/low 然後送 clock 
這樣運算時間當然會長呀。
這種做法要做到一秒鐘閃 30 次以上能不能做到?
假如這個問題是串到 64x64 呢?
你要去改你的 uC 的硬體,還是要直接串接下去?
速度問題。用 165 來協助解決。比你用 uC 去算它的控制還很多。

===================引 用 bernie_w39 文 章===================
缺點是設定的時間變的比較長. 其實如果 8051 的 I/O port 夠用, 你原本的接法也沒什麼
不好.
bernie_w39
資深會員


發表:3
回覆:199
積分:280
註冊:2007-10-07

發送簡訊給我
#20 引用回覆 回覆 發表時間:2007-10-26 11:07:52 IP:61.217.xxx.xxx 訂閱
有一點看的不是很懂你的話, 我看的意思是以下這樣, 如果誤解了, 還請大大指正.

我的作法, 考慮到節省時間, 但是浪費 port; 你覺得這些時間沒有那麼大影響,
一秒閃 30 次沒什麼問題, 一旦提昇到 64 x 64 時, port 不足的問題會呈現,
這時我是該串 164 還是換 uC. 是這個意思吧?

那我們來算一下 64x64 時, 串接 164 的結果好了. 其實用每秒 30 次, 人眼一樣
會看到閃動, 我通常是用 50 次. 不過既然你說 30 次, 我們就用 30 次來算.

一秒閃 30 次, 也就是 30 輪, 一輪要改變 64 row 的資料, 所以每 row 的明亮
時間為 10 ^ 6 / 30 / 64 = 520.8 uS

在變換 row 時, 我們要利用一個 off time, 把 8 顆 column 的 164 設好, 這
8 顆 164 是串接的, 所以會有 8 bytes 的資料, 我寫一段 pseudo code

load pointer,

load counter1, #8
loop1:
load data, pointer
load counter2, #8
loop2:
set port.data, LSB of data
rr data
clr port.clock
set port.clock
djnz counter2, loop2
djnz counter1, loop1

8051 離我有點遠了, 我沒有去翻每個指令要用多少 clock. 但是 8051 每個指令大約要用 12-24
個 system clock 沒有錯吧. 以一般接 12Mhz 的 crystal 來說, 一個指令大約要 1-2uS, 我們
來看最關鍵的 loop2 要用掉幾個指令? 把 data 的 LSB 搬到 port 上, 算兩個, 右移 data
算一個, 設定 clock 一個 pulse 算兩個, 循還算兩個 (這應該是 2uS 的指令). 所以 loop2 跑
一回合要用 2 1 2 2 = 7uS

那我們可以知道, 設完 8 顆 164 所需要的時間, 至少是 loop2 一週的 64 倍 7 * 64 = 448uS
其它的, 就算整體用了 460uS, 不誇張吧.

所以在 64x64 的情況下, 一個 row 只有 520uS 的點亮時間, 但是為了設定 column, 我們就令
它要暗 460uS 的時間, 佔了 88% duty.

這樣的情況, 只怕串接也不是好的選擇.


===================引 用 暗黑破壞神 文 章===================
這種做法要做到一秒鐘閃 30 次以上能不能做到?
假如這個問題是串到 64x64 呢?
你要去改你的 uC 的硬體,還是要直接串接下去?
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#21 引用回覆 回覆 發表時間:2007-10-26 12:14:18 IP:140.120.xxx.xxx 未訂閱
你的想法有幾個問題。
如果每個 164 都要接到 uC 上面。那 164 的串接就沒充份的設計了。
再者。你每一個 164 的 data 要送出去之前,要先去算它 左移或右移的 bit 是 hi /low 才去做 output.
你這樣做會比較有效率嗎?
對你的軟體或是硬體會比較有效率嗎?

你再去查查一顆跟它相反的 74165
你看看 165 做什麼事。
是不是一次一個 port 8bit 給 74165 然後丟出 clock 給 165 它會幫你轉出 164 要的 data?
你的程式變簡單了。只要丟一個 byte 然後送出 8 次的 hi/low 就是送了一個 164 的 data
這樣的動作,做幾次,就是幾個 164 的串接。

你每顆 164 都接到 uC 那你有多少 port 來當它的 IO 用啊。

再回答你之前說的 164 還是要有一個總開關。才能做到 latch 的功能。
so what?
一個 led 的供電總開關就一個總開關。
也不過佔了一個 bit.
利害的工程師。還可以利用簡易的 RC 計算出 164 的 clock 多少沒送。
因為你要在 164 停止不送資料那段。才是要給人看的亮暗點。
所以你的 clock 在這段時間就不會變動。
就可以利用這個調出 timer 來 off 掉這個開關。
只是我熟的是寫程式解決。不去做那個數學計算。

再者,每一個 164 出去的電流。假設每顆LED 20mA
你有64顆。會用到多少電流?
64*0.02 = 1.28A
如果全亮的話。
以我玩過的經驗。我是用mos 去當這個開關。
小小一顆 mos 可以流過的。大多大於 3A。
元件的選擇比電晶體來得容易。
bernie_w39
資深會員


發表:3
回覆:199
積分:280
註冊:2007-10-07

發送簡訊給我
#22 引用回覆 回覆 發表時間:2007-10-26 15:22:46 IP:61.218.xxx.xxx 訂閱
為什麼一定要全部串起來, 才是 164 串接的充份設計? 設計時只要達到目的就好了,
何必一定要把每顆 IC 用到 "充分"?

你提到用 165 來輔助 164, 這樣的設計, 要用掉幾支 uc 的 port?
我每顆 164 都接到 uC, 總共也只用 9 port!

你的想法太硬了, 轉個彎來看看我的接法吧. 8 個 164 的 A, B 各接上某一 P? 的 .0 - .7 上,
8 個 164 的 clock 共接一個 port, 這樣我一次輸出 8 bits, 相當於前面 pseudo 的迴圈中,
loop2 整個省略, 不用 shift left/right. 不管怎麼看, 這樣的設計, 都會比較快(不用每送
一個 byte 出去, 還要附加八個 clock) , 省 IC (少了一顆 165), 也許還省了 uC 的 port.
為什麼我都已經一次輸出 8 bits 了, 還要作 shfit left/right 呢?

再者, 你提到 LED 的電流問題, 這部份雖然與樓主的問題無關, 但是既然你提了, 我還是
提出一點不同的看法. 當你的 LED 到達 64 row 時, duty 只剩 1/64 了, 在這樣的情況下,
LED 不能只用 20mA 去驅動, 否則亮度會明顯不足. 當然, 我也知道市售的 MOS, 隨便
可以找到 50A 以上的. 你注意看樓主的設計, 每 column 的 LED 都是用 PNP 去推的,
串接的電阻只有 50ohm. 之所以提這些, 也只是想要避免有人用 20mA 去點 1/16 duty
的 LED 而已. 並不是說找不到 50A 以上的 MOS, 別再誤會了.

還原樓主的題目, 是要 16x16 的, 樓主並沒有說 uC 可以用多少支腳, 大大你建議用
四顆 164 來作, 我說用四顆 164 的話, 要外加一個總開關. 我從頭到尾都沒有說你的
辦法是 (e.g. 四顆 164 的) "作不到" 的. 我只是提醒一下說如果單純用四顆 164 來作,
無法克服切換時會閃的問題, 讓樓主不要花虛功而已.

另外因為要驅動 16 顆 LED, 所以 row 事必要加上一顆電晶體, 既然已經有電晶體了,
如果 uC 的腳位不是那麼緊, 可以用兩顆 138 來換掉兩顆 164, 這樣就不用再外加一顆
總開關了, 不是嗎?

一個題目, 本來就有很多的設計方式, 各有各的優缺點. 只要能夠 work 的, 都是正確的.
像樓主自己作的方式, 用了一堆 uC 的腳, 但是省掉兩顆 164, 不是也很好? 我事前不知道
他的 uC 接腳數這麼鬆, 拿個 20 支來用都沒問題, 如果知道, 我可能也採用一樣的方式.

當然你用串接 164 的方式, 是最省 uC 腳位的, 16x16 燈, 你只要用三支 uC port 就可以
搞的定. 但是這個設計有它先天的缺點, 就是變換資料的時候, 要花比較多的時間. 這也
是設計的人心理要有準備的, 不是嗎? 至少在我精算給你看之前, 你直覺認為 64x64 LED
這樣的結構下, 串八顆 164 的作法是可行的.
lishang83
初階會員


發表:12
回覆:44
積分:31
註冊:2005-07-30

發送簡訊給我
#23 引用回覆 回覆 發表時間:2007-10-27 15:41:42 IP:123.52.xxx.xxx 訂閱
由于LED点阵使用的是动态扫描,同一时间只有一路工作,且工作时间很短,是不会烧掉的,电流为16个LED*0.003A=0.048A.
===================引 用 bernie_w39 文 章===================
ULN2803 的推動能力是 500mA 而已. 一排 16 顆全亮時, 電流可能飆上 (5 - 0.3 - 0.7 - 1.5) / 50 * 16 = 800mA
要小心燒掉了 ULN2803.
------

☆☆ 网事如潮人如水,只叹世间人几回。 ☆☆
lishang83
初階會員


發表:12
回覆:44
積分:31
註冊:2005-07-30

發送簡訊給我
#24 引用回覆 回覆 發表時間:2007-10-27 15:49:55 IP:123.52.xxx.xxx 訂閱
常用的做法是用一片154,4-16译码器,做列驱动,行驱动用2个595,就可以作成16*16的点阵了.595带有输出使能控制,在数据移位时,数据不会输出到端口上,就不会有乱码出现,这样的好处是可以在LED亮时就可以输入数据,增加LED的点亮时间,增加整体亮度.由于595的端口驱动能力只有几个MA,所以在使用5V电源时,可以不用限流电阻. 这里有驱动2个595的代码: ===================引 用 iqsteven 文 章===================
麻煩各大大,幫看一下電路會否有問題.
另想問一下,如何可以盡量避免有混亂發生?感謝
圖1圖2
------

☆☆ 网事如潮人如水,只叹世间人几回。 ☆☆
lishang83
初階會員


發表:12
回覆:44
積分:31
註冊:2005-07-30

發送簡訊給我
#25 引用回覆 回覆 發表時間:2007-10-27 15:52:18 IP:123.52.xxx.xxx 訂閱
51驱动2个595的程式:
;define bit;IN&OUT OF MICROCORTROL.
;脉冲计数装置,上升沿或下降沿均为1个脉冲,KEY1用于置零。
IN BIT P3.5
LED BIT P1.7
KEY BIT P1.5
STB BIT P1.4 ;595显示控制12脚
SSDA BIT P1.3 ;595数据引脚14脚
SCLK BIT P1.2 ;595时钟引脚11脚

KEY1_BZ BIT 21H
KEY2_BZ BIT 22H
KEY1 BIT 23H
KEY2 BIT 24H
DISP_DATA EQU 40H
DISP_COR EQU 44H
TH1_DATA EQU 45H
TL1_DATA EQU 46H
TIME_DATA EQU 47H
TIME_TEMP EQU 48H
;--------------------------------------------------------------------------------------------
;********************************************************************************************
;--------------------------------------------------------------------------------------------
ORG 0000H
AJMP START
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 001BH ;定时器1的中断向量地址
AJMP TIME1
;--------------------------------------------------------------------------------------------
ORG 0030H
START:
MOV SP,#60H
MOV IP,#08H
MOV R5,#150
;SETB MN_BZ ;模拟速度传感器检测脉冲计时标志位,0=超时,1=正常。
;SETB GS_BZ ;光栅速度传感器检测脉冲计时标志位,0=超时,1=正常。
MOV TMOD,#00010001B ;定时/计数器1工作于方式1,定时/计数器0工作于方式1
MOV TH0,#08H
MOV TL0,#00H ;晶振11.0592MHZ,定时4MS。

MOV DISP_DATA,#00H
MOV DISP_DATA 1,#00H
MOV DISP_DATA 2,#00H
MOV DISP_DATA 3,#00H
MOV DISP_COR,#00H
SETB ET0 ;开定时/计数器0中断允许
SETB TR0 ;定时/计数器0禁止运行
CLR ET1
CLR TR1
SETB EA ;开总中断允许

MAIN:
;ACALL YS500MS
TEST1:
JNB IN,ADDD1
JB KEY1,TEST1
JNB KEY1,$
MOV DISP_DATA,#00H
MOV DISP_DATA 1,#00H
MOV DISP_DATA 2,#00H
MOV DISP_DATA 3,#00H
MOV DISP_COR,#00H
AJMP MAIN
ADDD1:
INC DISP_DATA 3 ;数据加一的子程序
MOV A,DISP_DATA 3
CJNE A,#0AH,EXIT
MOV DISP_DATA 3,#00H
INC DISP_DATA 2

MOV A,DISP_DATA 2
CJNE A,#0AH,EXIT
MOV DISP_DATA 2,#00H
INC DISP_DATA 1

MOV A,DISP_DATA 1
CJNE A,#0AH,EXIT
MOV DISP_DATA 1,#00H
INC DISP_DATA

MOV A,DISP_DATA
CJNE A,#0AH,EXIT
MOV DISP_DATA,#00H
EXIT:
TEST2:
JB IN,ADDD2
JB KEY1,TEST2
JNB KEY1,$
MOV DISP_DATA,#00H
MOV DISP_DATA 1,#00H
MOV DISP_DATA 2,#00H
MOV DISP_DATA 3,#00H
MOV DISP_COR,#00H
AJMP MAIN
ADDD2:
INC DISP_DATA 3 ;数据加一的子程序
MOV A,DISP_DATA 3
CJNE A,#0AH,EXIT2
MOV DISP_DATA 3,#00H
INC DISP_DATA 2

MOV A,DISP_DATA 2
CJNE A,#0AH,EXIT2
MOV DISP_DATA 2,#00H
INC DISP_DATA 1

MOV A,DISP_DATA 1
CJNE A,#0AH,EXIT2
MOV DISP_DATA 1,#00H
INC DISP_DATA

MOV A,DISP_DATA
CJNE A,#0AH,EXIT2
MOV DISP_DATA,#00H
EXIT2:
AJMP MAIN
;--------------------------------------------------------------------------------------------
;--------------------------------------------------------------------------------------------
;********************************************************************************************
;--------------------------------------------------------------------------------------------
YS500MS:
MOV 5FH,#10
LOOP:
ACALL YS10MS
DJNZ 5FH,LOOP
RET
;--------------------------------------------------------------------------------------------
YS50MS:
MOV 5EH,#50
YS100: ACALL YS1MS
DJNZ 5EH,YS100
RET
;--------------------------------------------------------------------------------------------
YS10MS:
MOV 5DH,#10
LOOP_MS:
ACALL YS1MS
DJNZ 5DH,LOOP_MS
RET
;--------------------------------------------------------------------------------------------
YSMS:
MOV 5CH,50H
YSMS_0: ACALL YS1MS
DJNZ 5CH,YSMS_0
RET
;--------------------------------------------------------------------------------------------
YS1MS:
MOV 5BH,#183 ;TXTAL=11.0592MHZ 延时1MS
LOP1:
NOP
NOP
NOP
DJNZ 5BH,LOP1
RET
;--------------------------------------------------------------------------------------------
YS424US:
MOV 5AH,#85
XIA:
NOP
NOP
NOP
DJNZ 5AH,XIA
RET
;--------------------------------------------------------------------------------------------
YS377US:
MOV 59H,#70
XIAA:
NOP
NOP
NOP
DJNZ 59H,XIAA
RET
;--------------------------------------------------------------------------------------------
YSUS:
MOV 58H,#100 ;TXTAL=11.0592MHZ 延时1MS
YSUS1: NOP
NOP
NOP
DJNZ 58H,YSUS1
RET
;--------------------------------------------------------------------------------------------
;********************************************************************************************
;--------------------------------------------------------------------------------------------
TIME1:
CLR ET1 ;关闭定时/计数器1中断允许。
CLR TR1
MOV TH1,TH1_DATA
MOV TL1,TL1_DATA ;晶振11.0592MHZ。
DJNZ TIME_TEMP,END_EXIT
MOV TIME_TEMP,TIME_DATA
END_EXIT:
SETB ET1 ;开定时/计数器1中断允许。
SETB TR1 ;定时/计数器1开始运行。
RETI
;--------------------------------------------------------------------------------------------
;********************************************************************************************
;--------------------------------------------------------------------------------------------
TIME0:
CLR ET0 ;关闭定时/计数器0中断允许。
MOV TH0,#0F0H
MOV TL0,#00H ;晶振11.0592MHZ,定时4MS。
MOV DPTR,#TAB
MOV A,#DISP_DATA
ADD A,DISP_COR
MOV R0,A
MOV A,@R0
MOVC A,@A DPTR
DISP1: MOV R7,#08H ;移位输出一位数据代码
;MOV A,#81H
D8BIT1: RLC A
MOV SSDA,C
CLR SCLK
SETB SCLK
DJNZ R7,D8BIT1

MOV A,DISP_COR
MOV DPTR,#TAB_DK
MOVC A,@A DPTR
MOV R7,#08H ;移位输出段控代码
;MOV A,#02H ;段控代码01对应显示屏左边第一位。
S8BIT1: RLC A
MOV SSDA,C
CLR SCLK
SETB SCLK
DJNZ R7,S8BIT1
CLR STB
SETB STB
;ACALL YS1MS

;---------------------------------------------
MOV A,DISP_COR
CJNE A,#05H,KEY_NEXT
JB KEY,NO_KEY1 ;----------
JNB KEY1_BZ,KEY1_OK
CLR KEY1_BZ
AJMP END_KEY
KEY1_OK:
CLR KEY1
AJMP END_KEY
KEY_NEXT:
CJNE A,#04H,END_KEY
JB KEY,NO_KEY2 ;----------------
JNB KEY2_BZ,KEY2_OK
CLR KEY2_BZ
AJMP END_KEY
KEY2_OK:
CLR KEY2
AJMP END_KEY
NO_KEY1:
SETB KEY1_BZ
SETB KEY1
AJMP END_KEY
NO_KEY2:
SETB KEY2_BZ
SETB KEY2
END_KEY:
INC DISP_COR
MOV A,#06
CJNE A,DISP_COR,OK_NEXT
MOV DISP_COR,#00H
OK_NEXT:
NOP
SETB ET0 ;开定时/计数器0中断允许。
SETB TR0 ;定时/计数器0开始运行。
DJNZ R5,GOEND
MOV R5,#150
CPL P1.7
GOEND:
RETI
;--------------------------------------------------------------------------------------------
;********************************************************************************************
;--------------------------------------------------------------------------------------------
TAB:
DB 21H,7DH,13H,19H,4DH,89H,81H,3DH,01H,09H,0DFH,0FFH,83H,05H,00H,25H
; 0 1 2 3 4 5 6 7 8 9 - E R 8 . N
;DB 0x21,0x7D,0x13,0x19,0x4D,0x89,0x81,0x3D,0x01,0x09,0XDF,0XFF
;后四个数分别为“-”,“全灭”,“E”,“R”
;减1为带小数点。
;代码生成软件:7段数码管设计软件(吴氏工房软件)
;D7-D0:B-A-G-F-E-D-C-P
TAB_DK:
DB 01H,02H,04H,08H,0E0H,70H
;前四个数据是显示用的段控代码,后四个数据是四个按键的判断代码.
END

------

☆☆ 网事如潮人如水,只叹世间人几回。 ☆☆
bernie_w39
資深會員


發表:3
回覆:199
積分:280
註冊:2007-10-07

發送簡訊給我
#26 引用回覆 回覆 發表時間:2007-10-28 12:09:12 IP:59.121.xxx.xxx 訂閱
請問一下, 單顆 LED 的耗電流 3mA 是如何得到的呢?

===================引 用 lishang83 文 章===================
由于LED点阵使用的是动态扫描,同一时间只有一路工作,且工作时间很短,是不会烧掉的,电流为16个LED*0.003A=0.048A.
lishang83
初階會員


發表:12
回覆:44
積分:31
註冊:2005-07-30

發送簡訊給我
#27 引用回覆 回覆 發表時間:2007-10-30 22:26:50 IP:123.52.xxx.xxx 訂閱
请查看74HC595的PDF文档.
===================引 用 bernie_w39 文 章===================
請問一下, 單顆 LED 的耗電流 3mA 是如何得到的呢?

===================引 用 lishang83 文 章===================
由于LED点阵使用的是动态扫描,同一时间只有一路工作,且工作时间很短,是不会烧掉的,电流为16个LED*0.003A=0.048A.
------

☆☆ 网事如潮人如水,只叹世间人几回。 ☆☆
系統時間:2024-05-13 14:26:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!