二位七段顯示器計數(實習)
二位七段顯示器計數
所須材料
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()
- const int dispPin[2]={8,9};
- const int numofdisp=sizeof(dispPin);
- int digits[2]={0,0}; //代表個位和十位的7段顯示器
- int number=0;
- const int data=2;
- const int latch=3;
- const int clk=4;
- const byte LEDs[10] = {
- 0x7E, 0x30, 0x6D, 0x79, 0x33,
- 0x5B, 0x5F, 0x70, 0x7F, 0x73
- };
- unsigned long lastTime=0; //最後的時間
- const long setTime=1000; //設定的時間
- //計數的函式
- void counter(){
- unsigned long nowTime=millis(); //取得目前的時間
- if (nowTime-lastTime>=setTime){
- lastTime=nowTime;
- }
- if (++number>99){
- number=0;
- }
- digits[0]=number/1%10; //取得個位數
- digits[1]=number/10%10; //取得十位數
- }
- //七段顯示器顯示函式
- void display(){
- int num;
- for (int i=0; i<numofdisp; i++){
- num=digits[i];
- digitalWrite(latch, LOW);
- shiftOut(data, clk, LSBFIRST, LEDs[num]);
- digitalWrite(latch, HIGH);
- digitalWrite(dispPin[i], LOW);
- delay(5);
- for (int j=0; j<numofdisp; j++){
- digitalWrite(dispPin[j], HIGH);
- }
- }
- }
- void setup(){
- pinMode(data, OUTPUT);
- pinMode(latch, OUTPUT);
- pinMode(clk, OUTPUT);
- for (int i=0; i<numofdisp; i++){
- pinMode(dispPin[i], OUTPUT);
- digitalWrite(dispPin[i], HIGH);
- }
- }
- void loop(){
- counter();
- display();
- }
留言
張貼留言