티스토리 뷰

SND 와 LED 함께 동작시키기 (타이머 0 인터럽트 사용)

main() 함수는 while(); 무한루프를 실행하고 타이머 인터럽트가 발생하면 LED 를 이동하는 프로그램을 작성하였습니다. 이번 강좌에서는 main() 함수에서는 SND 에 숫자를 표시하고, 타이머 인터럽트가 발생하면 LED 를 이동하는 프로그램을 만들겠습니다. SND 를 구동하는 프로그램은 강좌 22 SND 에 숫자 표시하기 (2) - 함수만들기 에서 만들었던 것을 사용합니다. #include char snd_num[10]={0x3f,0x06,0x5B,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f}; char snd_loc[6]={0x04,0x08,0x10,0x20,0x40,0x80}; char led; void delay(char dly) { char i; do { for(i=0; i<100; i++); } while(dly--); } void T0_int() interrupt 1 { TR0=0; led = (led << 1) | 0x01; if(led == 0xff)led = 0xfe; P1 = led; TH0=0xb1; TL0=0xe0; TR0=1; } void snd_set(char *dta) { char cnt,loc,num; for (cnt=0; cnt<50; cnt++) for (loc=0; loc<6; loc++) { num = dta[loc]; P2 = snd_num[num]; P3 = ~snd_loc[loc]; delay(10); } } void main(void) { char pos,i; char snd_data[6]={0,0,0,0,0,0}; TMOD=0x01; TH0=0xb1; TL0=0xe0; PT0=1; ET0=1; EA=1; led = 0xfe; P1 = led; TR0 = 1; while(1) { for(pos=0;pos<6;pos++) { for(i=1;i<10;i++) { snd_data[pos] = i; snd_set(snd_data); } snd_data[pos] = 0; } } } 위 프로그램을 실행시키면 SND 는 한 자리씩 숫자가 증가되고, LED 는 우로 이동하면서 점멸하는 동작을 불 수 있습니다. LED 의 이동속도를 감소시키려면 이전 강좌를 참조하세요. SND 의 동작속도를 조절하려면 void snd_set(byte *dta) 함수의 for 문의 cnt>50 에서 50 을 다른 값으로 변경하면 됩니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함