二位七段顯示器計數(實習)

二位七段顯示器計數



所須材料


arduino uno x1

330歐姆電阻 x

74HC595  x1

七段顯示器 x2


接線方式




關於程式的部份


觀念速記:
增加了一個顯示器,因為無法使數字同時顯,
所以必須製造個位和十位數快速切換的效果,
使肉眼無法查覺。
如果使用delay(),在等待階段顯示器會完全
不工作,所以必須使用millis()
替代delay()來比較時間。

假設:
setTime=1000;
nowTime=millis();
lastTime=0;
if (nowTime - lastTime > =setTime){
    lastTime=nowTime;
}

關於程式裡有個——>millis()

millis()

[時間]

描述

返回自Arduino開發板開始運行當前程序以來經過的毫秒數。

大約50天后,該數字將溢出(返回零)。

語法

time = millis()


  1. const int dispPin[2]={8,9};
  2. const int numofdisp=sizeof(dispPin);
  3. int digits[2]={0,0}; //代表個位和十位的7段顯示器
  4. int number=0;
  5. const int data=2;
  6. const int latch=3;
  7. const int clk=4;
  8. const byte LEDs[10] = {
  9. 0x7E, 0x30, 0x6D, 0x79, 0x33,
  10. 0x5B, 0x5F, 0x70, 0x7F, 0x73
  11. };
  12. unsigned long lastTime=0; //最後的時間
  13. const long setTime=1000; //設定的時間
  14.  
  15. //計數的函式
  16. void counter(){
  17.  
  18. unsigned long nowTime=millis(); //取得目前的時間
  19. if (nowTime-lastTime>=setTime){
  20. lastTime=nowTime;
  21. }
  22. if (++number>99){
  23. number=0;
  24. }
  25. digits[0]=number/1%10; //取得個位數
  26. digits[1]=number/10%10; //取得十位數
  27. }
  28. //七段顯示器顯示函式
  29. void display(){
  30. int num;
  31. for (int i=0; i<numofdisp; i++){
  32. num=digits[i];
  33. digitalWrite(latch, LOW);
  34. shiftOut(data, clk, LSBFIRST, LEDs[num]);
  35. digitalWrite(latch, HIGH);
  36. digitalWrite(dispPin[i], LOW);
  37. delay(5);
  38.  
  39. for (int j=0; j<numofdisp; j++){
  40. digitalWrite(dispPin[j], HIGH);
  41. }
  42. }
  43. }
  44.  
  45. void setup(){
  46. pinMode(data, OUTPUT);
  47. pinMode(latch, OUTPUT);
  48. pinMode(clk, OUTPUT);
  49.  
  50. for (int i=0; i<numofdisp; i++){
  51. pinMode(dispPin[i], OUTPUT);
  52. digitalWrite(dispPin[i], HIGH);
  53. }
  54. }
  55. void loop(){
  56. counter();
  57. display();
  58. }

實際完成視頻






留言

這個網誌中的熱門文章

平衡小車(balance-Robot)-基本平衡-Arduino