kwcow 發表於 2009-3-24 22:45:15

請問 H8/3694 兩位數字七段顯示器 怎麼做??

小弟最近在玩H8/3694這顆IC
想跟著8051的範例做做看
但是遇到一個問題
現在顯示0~F都沒問題
但是遇到兩位是就沒轍了
開發程式是 HEW


以下為目前各位數所寫的程式碼
請大家幫幫我謝謝
#include "iodefine.h"
//const char seg={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//共陰
const char seg={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//共陽

void msecwait(int msec)
{
int i,j;
for (i=0;i<msec;i++){
for (j=0;j<1588;j++); /*約1/1000s*/
}
}

int main()
{
IO.PCR8=0xFF; //輸出給七段顯示器用
IO.PCR5=0xFF; //選擇七段顯示器
while (1) {
int n;
for (n=0;n<=16;n++){
IO.PDR5.BIT.B0 = 1 ;
IO.PDR8.BYTE = seg;
msecwait(1000);
}
}
}

nichal 發表於 2009-3-25 13:29:31

兩位數要用掃瞄的方式(兩個位數交替顯示)
透過視覺暫留的效果來完成

kwcow 發表於 2009-3-25 22:47:30

那如何撰寫呢??
因為視覺暫留
需一組內部計時器(計時用)
一組掃瞄delay time(掃瞄用)

目前小弟我誠用過兩組DELAY TIME下去撰寫
但跑起來   只有一個字怪
不是輪流閃~~要不就是只閃十位數各位數全亮

nichal 發表於 2009-3-26 12:21:28

提示一下概念
兩組亮的時間要一樣長
不然就會一個亮一個暗

舉例來說
十位數亮5mS
換個位數亮5mS
接著要馬上再接十位數亮
如果接不上
那麼個位數亮完5mS就一定要先關掉
這樣就不會很怪了

如果會輪流亮
代表輪替的時間太久了!!
一個循環要<10mS
換句話說
包含點亮跟關掉
兩個位數的時間不能超過10mS
如果有八個位數
那麼八個位數的點完一輪也是10mS
再試試看吧
(1000mS真的太久了~~~)

stanley21 發表於 2009-3-26 22:55:25

本帖最後由 stanley21 於 2009-3-26 22:57 編輯

我在網路查了一下,維基百科有視覺暫留的說明喔
http://zh.wikipedia.org/wiki/視覺暫留效應
視覺滯留現象(Visual staying phenomenon),指當人眼所看到的影像消失後,人眼仍能繼續保留其影像0.1-0.5秒左右的圖像,這種現象被稱為視覺暫留現象。.......所以,要達成最基本的視覺暫留效果至少需要10fps(參考視頻的畫面更新率)。.....

就是Nichal大大所說一個循環要<10mS喔~~

kwcow 發表於 2009-4-1 19:11:26

本帖最後由 kwcow 於 2009-4-1 19:13 編輯

感謝兩位大大的講解視覺暫留的資訊

現在程式所寫的DELAY TIME是計時部分(所謂的暫停一秒)

現在的問題是

我如何呼叫內部的計時器(牽扯內部中斷)

對H8/3694語法不精

是否有人願意釋出內部計時器語法的撰寫

因為計數器秒數要跟一般時間一樣

我才有多的DELAY TIME來做視覺暫留的時間

謝謝
頁: [1]
查看完整版本: 請問 H8/3694 兩位數字七段顯示器 怎麼做??