1) 지식 창고는 본인이 작성한 콘텐츠(팁/노하우/리소스/강좌 등)을 무료 혹은 가상화폐인 납포인트를 통해 공유하는 공간입니다.
2) 본인이 작성한 콘텐츠에 대해서만 지식 창고에 등록할 수 있으며, 저작권에 위배되는 콘텐츠는 사전경고 없이 삭제될 수 있습니다.
3) 콘텐츠 구매 및 첨부파일 다운로드는 회원그룹 '연구원' 이상 가능하오니, 경험치를 쌓아 진급한 후에 이용 부탁드립니다.
4) 무료 콘텐츠의 본문은 구매절차 없이 즉시 이용할 수 있으며, 판매 납포인트가 있는 콘텐츠는 구매 후 이용할 수 있습니다.
5) 콘텐츠 판매에 따른 납포인트 수익은 지정한 비율(50%)에 따라 판매자에게 지급하며, 납포인트 수익을 통해 진급을 빨리할 수 있습니다.
6) 구매 후 평가를 하면 구매 납포인트의 20%를 돌려 드립니다.
판매자 | himm | 판매 납포인트 | 무료 | 평점 | 0점 / 총 0명 참여 |
---|
/************************************************* file name: prog4.c function: 7-Segment LED display Timer Interrupt(1ms) : 7-Segment Display(Scan): 012345 static LED(8) increment Main routine : RUN LED toggle 1999.11.10. By KMD-KCO **************************************************/ #include "io51.h" #define BYTE unsigned char #define WORD unsigned int #define RUN_LED T0 /* define RUN_LED = T0 */ #define TMR_CLK_1M -922 /* 1msec : (11.0592MHz / 12) * 1 msec = 921.6 */ #define TMR_CLK_10M -9216 /* 10msec: (11.0592MHz / 12) * 10 msec = 9216 */ #define SEG_DATA(val) (((BYTE *)0x010000)[0x6000] = val) #define SEG_SCAN(val) (((BYTE *)0x010000)[0x6002] = val) #define S_LED(val) (((BYTE *)0x010000)[0x6006] = val) const BYTE seg_font[] = /* HEX font */ {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80, 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; const BYTE seg_blank = 0xff; /* ' ' */ const BYTE seg_bar = 0xbf; /* '-' */ const BYTE seg_all_on = 0x00; /* '8.' */ const BYTE seg_scan[] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 }; BYTE seg_data[7]; BYTE scan_cnt=0; int i_cnt=0, m_cnt=0; void init_timer(){ TMOD = 0x01; /* timer0:모드1(16비트),타이머, */ TL0 = TMR_CLK_1M & 0xff; /* Timer cnt Low value reload */ TH0 = TMR_CLK_1M >> 8; /* Timer cnt High value reload */ TR0 = 1; /* timer0 run */ ET0 = 1; /* enable timer0 overflow interrupt */ } 8051-실습-7Segment 동작원리와 구동 프로그램 - 5 - ㈜케이엠데이타 interrupt [0x0B] void T0_int (void){/* Timer 0 Interrupt routine */ TL0 = TMR_CLK_1M & 0xff; /* Timer cnt Low value reload */ TH0 = TMR_CLK_1M >> 8; /* Timer cnt High value reload */ i_cnt++; /* increment i_cnt */ S_LED(~i_cnt); /* static LED display */ /* 7segment */ SEG_SCAN(0); /* SEG OFF */ SEG_DATA(seg_data[scan_cnt]); /* Seg Data out */ SEG_SCAN(seg_scan[scan_cnt]); /* Seg Scan out */ scan_cnt++; if(scan_cnt >= 7) scan_cnt = 0; } void main(){ int i; init_timer(); /* Initialize timer */ EA = 1; /* Enable Global Interrupt */ seg_data[0] = seg_font[0]; /* 0xc0 = 0 */ seg_data[1] = seg_font[1]; /* 0xf9 = 1 */ seg_data[2] = seg_font[2]; /* 0xa4 = 2 */ seg_data[3] = seg_font[3]; /* 0xb0 = 3 */ seg_data[4] = seg_font[4]; /* 0x99 = 4 */ seg_data[5] = seg_font[5]; /* 0x92 = 5 */ seg_data[6] = 0x00; /* All LED ON */ while(1){ m_cnt++; /* Increment m_cnt */ RUN_LED ^= 1; /* Toggle RUN_LED */ for(i=0;i<10000;i++); /* Simple delay routine */ } }자세한 내용은 첨부합니다.