Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <MsTimer2.h>
- int sw[5] ={2,3,4,5,6};
- int vib = 8;
- int LED[8] = {22, 24, 26, 28, 30, 32, 34, 36};
- int pin_FND_DATA[8] = {23, 25, 27, 29, 31, 33, 35, 37};
- int pin_FND_SELECT[6] = {39, 41, 43, 45, 47, 49};
- //uint8_t FND_data[16] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x27, 0x7F, 0x6F,0x77, 0x7C, 0x39, 0x5E, 0x79, 0x1};
- uint8_t FND_data[16] = {63,6,91,79,102,109,125,39,127,111,119,124,57,94,121,1};
- uint8_t data_Cipher[6] = {0,0,0,0,0,0};
- void setup() {
- int i;
- for(i=0; i<8; i++)
- {
- pinMode(LED[i],OUTPUT);
- digitalWrite(LED[i], LOW);
- }
- for(i=0; i<5; i++)
- pinMode(sw[i],INPUT_PULLUP);
- for(i=0; i<8; i++)
- pinMode(pin_FND_DATA[i], OUTPUT);
- for(i=0; i<6; i++)
- pinMode(pin_FND_SELECT[i], OUTPUT);
- pinMode(vib, OUTPUT);
- FND_select(0x3F);
- MsTimer2::set(2, FND_ISR);
- MsTimer2::start();
- }
- void loop() {
- clear();
- long num_h=0, num_m=0, num_s=0; //시간설정용 변수
- long long pss_h=0, pss_m=0, pss_s=0, pss_t = 0; //실제타이머용변수
- int stc=0, led_num=0; //기타 컨트롤용 변수
- while(1)
- {
- if(digitalRead(sw[0]) == HIGH) break; //입력후 입력창에서 나가기
- if(digitalRead(sw[1]) == HIGH){clear(); num_h=0; num_m=0; num_s=0;}
- if(digitalRead(sw[2]) == HIGH){if(num_h<99){num_h+=1;}else num_h=0;delay(200);} //시입력
- if(digitalRead(sw[4]) == HIGH){if(num_h<59){num_m+=1;}else num_m=0;delay(200);} //분입력
- if(digitalRead(sw[3]) == HIGH){if(num_h<59){num_s+=1;}else num_s=0;delay(200);} //초입력
- data_Cipher[0] = num_h/10; data_Cipher[1] = num_h%10;
- data_Cipher[2] = num_m/10; data_Cipher[3] = num_m%10;
- data_Cipher[4] = num_s/10; data_Cipher[5] = num_s%10;
- }
- clear();
- delay(500);
- pss_t=(num_h*3600) + (num_m*60) + num_s; //입력한 값을 초로 변환.
- while(2)
- {
- if(digitalRead(sw[0]) == HIGH){stc=0; continue;}
- if(digitalRead(sw[1]) == HIGH)
- {
- int sw_sec=0;
- while(3){sw_sec++; delay(1000); if(digitalRead(sw[1]) == LOW) break;}
- if(sw_sec>1) break;
- else stc=1;
- }
- if(digitalRead(sw[2]) == HIGH){pss_t+=3600; delay(200);}
- if(digitalRead(sw[4]) == HIGH){pss_t+=60; delay(200);}
- if(digitalRead(sw[3]) == HIGH){pss_t++; delay(200);}
- LED_control(0);
- if(stc==1){LED_control(255); continue;}
- else if(pss_t==0)
- {
- clear(); //FND값클리어
- delay(500);
- digitalWrite(vib,HIGH);
- delay(500);
- continue;
- }
- else
- {
- pss_h = pss_t/3600; //시구하기
- pss_m = (pss_t/60)-(pss_h*60); //분구하기
- pss_s = pss_t%60; //초구하기
- pss_t--; //1초씩 아래로
- data_Cipher[0] = pss_h/10; data_Cipher[1] = pss_h%10; //시출력
- data_Cipher[2] = pss_m/10; data_Cipher[3] = pss_m%10; //분출력
- data_Cipher[4] = pss_s/10; data_Cipher[5] = pss_s%10; //초출력
- }
- delay(1000); //최소단위가 1초이므로 Dealy을 1000ms로 설정.
- }
- }
- int clear(void) //FND화면 값을 시원하게 클리어
- {
- data_Cipher[0] = 0;
- data_Cipher[1] = 0;
- data_Cipher[2] = 0;
- data_Cipher[3] = 0;
- data_Cipher[4] = 0;
- data_Cipher[5] = 0;
- LED_control(0);
- digitalWrite(vib,LOW);
- }
- void LED_control(uint8_t da)
- {
- for(int i=0; i<8; i++)
- {
- digitalWrite(LED[i], (da >> i) & 0x1);
- }
- }
- void FND_select(uint8_t da)
- {
- for(int i=0; i<6; i++)
- digitalWrite(pin_FND_SELECT[i], (da>>i) & 0x01);
- }
- void FND_data_out(uint8_t da)
- {
- for(int i=0; i<8; i++)
- digitalWrite(pin_FND_DATA[i], (da>>i) & 0x01);
- }
- void FND_ISR(void)
- {
- static int i=0;
- FND_data_out(0);
- FND_select(~(0x001<<i));
- FND_data_out(FND_data[data_Cipher[i]]);
- if(i==5){i=0;}
- else{i++;}
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement