ch5_1開關控制蜂鳴器與四位數七段顯示器上下數
老蔡mytsaii教學網頁,hi 你好,我是老蔡mytsaii
四位數七段顯示器預設0000
按upCounter時蜂鳴器發出1kHz聲音,七段顯示器+1
按downCounter時蜂鳴器發出1kHz聲音,七段顯示器-1
七段顯示器數值範圍0000~9999
//ch5_1
const int upCount=A0;//開關上數接A0
const int downCount=A1;//開關下數接A1
const int scan[4]={5,6,7,8};//pin5~pin8 = scan[0]~scan[3]
const int dataPin=10;//串列資料
const int latchPin=11;//栓鎖訊號
const int clockPin=12;//接腳移位脈波訊號
const int segCode[10]= {//0~9編碼低態作動
0xC0,//0,11000000
0xF9,//1,11111001
0xA4,//2,10100100
0xB0,//3,10110000
0x99,//4,10011001
0x92,//5,10010010
0x82,//6,10000010
0xF8,//7,11111000
0x80,//8,10000000
0x90//9,10010000
};
int dispData[4]={0,0,0,0};
const int buzzerPin=13;//蜂鳴器接13。
int counter=0;//計數器從0開始
void Transfer(void);//宣告Transfer
void doDownCounter(void);//宣告下數函數
void doUpCounter(void);//宣告上數函數
void scan7seg(void);//宣告掃scan7seg函數
void setup()
{
for(int i=0;i<4;i++)
{
pinMode(scan[i],OUTPUT);
digitalWrite(scan[i],1);
}
pinMode(dataPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(latchPin,OUTPUT);
digitalWrite(latchPin,0);
Serial.begin(9600);
pinMode(buzzerPin,OUTPUT);
digitalWrite(buzzerPin,0);//buzzerPin預設0
}
void loop()
{
scan7seg();
int i=digitalRead(upCount);
if(!i)
{
doUpCount();
beep();
while(!i)
{
i=digitalRead(upCount);
scan7seg();
}
}
else
{
int i=digitalRead(downCount);
if(!i)
{
doDownCount();
beep();
while(!i)
{
i=digitalRead(downCount);
scan7seg();
}
}
}
}
void beep(void)
{
tone(buzzerPin,1000);//產生1kHz聲音
delay(100);
noTone(buzzerPin);//聲音停止
}
void scan7seg()
{
for(int i=0;i<4;i++)
{
digitalWrite(latchPin,0);
shiftOut(dataPin,clockPin,MSBFIRST,segCode[dispData[i]]);
digitalWrite(latchPin,1);
digitalWrite(scan[3-i],0);
delay(1);
digitalWrite(scan[3-i],1);
}
}
void doUpCount()
{
counter++;
if(counter>=10000)
{
counter=0;
}
Transfer();
}
void doDownCount()
{
counter--;
if(counter<0)
{
counter=9999;
}
Transfer();
}
void Transfer()
{
dispData[0]=counter/1000;
dispData[1]=counter/100%10;
dispData[2]=counter/10%10;
dispData[3]=counter%10;
}
留言
張貼留言