int seg7[] = {2,3,4,5,6,7,8};
int scan[] = { 13, 12, 11, 10 };
int table_7seg[]=
{
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90 };
int i,j; // 迴圈用的變數
//--------------------------------------------------------------------------------------
void OutPort(byte dat)
{
for (j=0; j<7; j++) {
if (dat % 2==1) // 取出 dat 的最低位元
digitalWrite(seg7[j], LOW); // 若為 1 代表該段要亮, 輸出高準位
else
digitalWrite(seg7[j], HIGH); // 若為 0 代表該段要滅, 輸出低準位
dat=dat/2; // 除2,進行下一位元的處理
}
}
//-------------------------------------------------------------------------------------------
void blink_3time()
{
for(int a=0;a<4;a++)
{
for(int b=0;b<50;b++)
{
OutPort(table_7seg[2]);//顯示千位數
digitalWrite(scan[0], HIGH); delay(5); digitalWrite(scan[0], LOW);//com1
OutPort(table_7seg[0]);//顯示百位數
digitalWrite(scan[1], HIGH); delay(5); digitalWrite(scan[1], LOW); //com2
OutPort(table_7seg[2]);//顯示十位數
digitalWrite(scan[2], HIGH); delay(5); digitalWrite(scan[2], LOW);//com3
OutPort(table_7seg[1]);//顯示個位數
digitalWrite(scan[3], HIGH); delay(5); digitalWrite(scan[3], LOW); //com4
}
for(int c=0;c<4;c++)
{
digitalWrite(scan[c],LOW);
}
delay(500);
}
}
//----------------------------------------------------------------------------------------
void setup()
{
pinMode(9,OUTPUT); //此處沒設定輸出,led會微亮不會全亮
for (i=0; i<7; i++) {
pinMode(seg7[i], OUTPUT);
}
for (i=0; i<4; i++) {
pinMode(scan[i], OUTPUT);
digitalWrite(scan[i], LOW); // 掃描端電晶體 OFF
}
blink_3time();
}
//--------------------------------------------------------------------------------------------
void loop()
{
digitalWrite(9,HIGH);delay(1000);
digitalWrite(9,LOW);delay(1000);
}
沒有留言:
張貼留言