//3個按鍵控制廣告燈程序及聲音
int latchPin = 4;
int clockPin =7;
int dataPin=8; //七段顯示器3隻腳位
unsigned char seg7[] = {0xC0,0xF9, 0x44, 0xB0,0x99,0x92,0x82, 0xF8,0X80,0X90, 0xFF}; //數字碼
unsigned char com [] = {0xF1, 0xF2,0xF4,0xF8}; //七段共同腳掃描
unsigned char digits[4] {0,0,0,0}; //數字暫存
int s,t,number=0; //整數變數
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT); //讓3隻腳都為輸出狀態
}
void loop()
{
if(digitalRead(A1)==0) { number=(number+1)%1235; }
if(digitalRead(A2)==0) { number--;if(number<0) number=1234;}
if(digitalRead(A3)==0) {for(s=0;s<3;s++){ nodisplay();delay(400);for(t=0;t<100;t++) display();}}
for(t=0;t<40;t++) display();
}
void display() //閃爍燈
{
for(char i=0; i<4; i++){
digitalWrite(latchPin, LOW); //將ST_CP上加低電位,讓晶片準備接收數據
shiftOut(dataPin,clockPin,MSBFIRST,seg7[digits[i]]);//發送顯示碼
shiftOut(dataPin,clockPin,MSBFIRST,com[i] );//發送數據給com[i]
digitalWrite(latchPin, HIGH);//將ST_CP恢復高電位
delay(1);
}
digits[3]= number % 10;
digits[2]= number % 100/10;
digits[1]= number % 1000/100;
digits[0]= number / 1000;
}
void nodisplay()
{
for(char i=0; i<4; i++)//掃描四個七段顯示器
{
digitalWrite(latchPin, LOW); //將ST_CP上加低電位,讓晶片準備接收數據
shiftOut(dataPin,clockPin,MSBFIRST,seg7[10]);//發送顯示碼
shiftOut(dataPin,clockPin,MSBFIRST,com[i] );//發送數據給com[i]
digitalWrite(latchPin, HIGH);//將ST_CP恢復高電位
delay(1);
}
}