我想用4位元的7段顯示器來顯示微發電機產生的電壓,但數值顯示得好快,眼睛無法看到實際數字,請問該如何寫
int i,j,k; //索引值
//0000~9999 顯示值
double number; //0000~9999 顯示值
unsigned long time=0; //計時
const byte num[10]= //0~9 顯示碼
{ B01111110,B00110000,B01101101,B01111001,B00110011,B01011011,B01011111,B01110000,B01111111,B01110011 };
const int seg[]={ 2,3,4,5,6,7,8,9 }; //abcdefgp
const int digit[]={ 10,11,12,13 }; //D1~D4
void setup()
{
for(i=0;i<8;i++)
pinMode(seg[i],OUTPUT); //設定數位接腳 2~9 為輸出模式
for(i=0;i<4;i++)
{
pinMode(digit[i],OUTPUT); //設定數位接腳 10~13 為輸出模式
digitalWrite(digit[i],HIGH); //掃描信號初值
}
}
void loop()
{
number=1000-analogRead(A0)*1000.0/1023.0;
//delay(25);
for(i=3;i>=0;i--) //四位數 D1~D4
{
for(j=0;j<8;j++) //八位元顯示碼 abcdefgp
{
if(bitRead(num[int(number)%10],j)) //讀取目前七段顯示器掃描位元數位元 j
digitalWrite(seg[j],HIGH); //若位元為 1 則 LED 狀態為 HIGH
else
digitalWrite(seg[j],LOW); //若位元為 0 則 LED 狀態為 LOW
}
if (i==1)digitalWrite(9,HIGH);
else digitalWrite(9,LOW);
digitalWrite(digit[i],LOW); //掃描第 i 行顯示器
delay(5); //掃描時間 5ms
digitalWrite(digit[i],HIGH); //關閉掃描第 i 行顯示器,消除顯示鬼影
number=number/10; //掃描下一位數
}
}
由於Arduino有搭配硬體的特性,你還是得了解實際的效果,比較容易學習。
以你的例子來說:
void setup() // 這邊主要是七段顯示器腳位的宣告
void loop() // 這邊主要是功能執行部分,重覆讀取A0的值,顯示在七段上
接下來分兩段來說明:
number=1000-analogRead(A0)*1000.0/1023.0;
//delay(25);
for(i=3;i>=0;i--) //四位數 D1~D4
{
for(j=0;j<8;j++) //八位元顯示碼 abcdefgp
{
if(bitRead(num[int(number)%10],j)) //讀取目前七段顯示器掃描位元數位元 j
digitalWrite(seg[j],HIGH); //若位元為 1 則 LED 狀態為 HIGH
else
digitalWrite(seg[j],LOW); //若位元為 0 則 LED 狀態為 LOW
}
if (i==1)digitalWrite(9,HIGH);
else digitalWrite(9,LOW);
digitalWrite(digit[i],LOW); //掃描第 i 行顯示器
delay(5); //掃描時間 5ms
digitalWrite(digit[i],HIGH); //關閉掃描第 i 行顯示器,消除顯示鬼影
number=number/10; //掃描下一位數
}
再來回到你的問題"但數值顯示得好快,眼睛無法看到實際數字,請問該如何寫?"
若你兩個功能區塊內容"皆正確",你只需讓讀取的部分延遲,就可以達到你的需求。
聰明的你應該知道怎做了吧!