iT邦幫忙

0

arduino 程式問題

  • 分享至 

  • xImage

我想用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;  //掃描下一位數
     
 }
    
          

}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
sfc507
iT邦新手 4 級 ‧ 2023-04-26 12:07:28

由於Arduino有搭配硬體的特性,你還是得了解實際的效果,比較容易學習。
以你的例子來說:

void setup()  // 這邊主要是七段顯示器腳位的宣告
void loop()  // 這邊主要是功能執行部分,重覆讀取A0的值,顯示在七段上

接下來分兩段來說明:

  1. 讀取Pin(A0)數值,且做處理
number=1000-analogRead(A0)*1000.0/1023.0;
//delay(25);
  1. 七段的掃描及顯示(建議這邊你要了解,為何這樣做)
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;  //掃描下一位數
     
 }

再來回到你的問題"但數值顯示得好快,眼睛無法看到實際數字,請問該如何寫?"
若你兩個功能區塊內容"皆正確",你只需讓讀取的部分延遲,就可以達到你的需求。
聰明的你應該知道怎做了吧!

sam0407 iT邦大師 1 級 ‧ 2023-04-27 11:31:18 檢舉

sfc507大真好心,把整個程式都仔細解析了,連我這完全不懂arduino程式的都知道要怎麼改了~~

我要發表回答

立即登入回答