BASIC4MCU | 디스플레이 | FND | 7세그먼트 스톱워치 (인터럽트 없이 구동)
페이지 정보
작성자 키트 작성일2017-08-31 16:40 조회1,489회 댓글0건본문
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 //---------------------------------------------------------------// CVAVR//---------------------------------------------------------------#include <mega128.h>#include <delay.h>//#define COM1 (PORTA&=~0x80)#define COM2 (PORTA&=~0x40)#define COM3 (PORTA&=~0x20)#define COM4 (PORTA&=~0x10)//char seg_pat[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//signed char run=0,msec=0,sec=0;//void main(){PORTE=0x30; // 스위치풀업저항DDRA=0xF0; // TR21 7-segment common anode, low activeDDRB=0xFF; // ULN2803 7-segment a~g, high activewhile(1){PORTB=seg_pat[ sec/10]; COM1; delay_us(2500); PORTA|=0xF0;PORTB=seg_pat[ sec%10]; COM2; delay_us(2500); PORTA|=0xF0;PORTB=seg_pat[msec/10]; COM3; delay_us(2500); PORTA|=0xF0;PORTB=seg_pat[msec%10]; COM4; delay_us(2500); PORTA|=0xF0;//if(run){ // run=1일 때만 카운터 증가if(++msec>99){ msec=0;if(++sec>99)sec=0; // 59로 바꾸면 0~59}}//if(!(PINE&0x10)){ // PE4, 스타트/스톱run^=1; // 1은 0으로, 0은 1로 변경delay_ms(100); while(!(PINE&0x10)); delay_ms(100); // 채터링,디바운스}if(!(PINE&0x20)){ sec=0,msec=0; stop=1; } // PE5, 리셋}}//---------------------------------------------------------------// AVRStudio//---------------------------------------------------------------#include <avr/io.h>#define F_CPU 16000000UL // 16 MHz#include <util/delay.h>//#define FND_COM1 (PORTA&=~0x80)#define FND_COM2 (PORTA&=~0x40)#define FND_COM3 (PORTA&=~0x20)#define FND_COM4 (PORTA&=~0x10)//char seg_pat[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//signed char run=0,msec=0,sec=0;//int main(){PORTE=0x30; // 스위치풀업저항DDRB=0xFF; // ULN2803 7-segment a~g, high activeDDRA=0xF0; // TR21 7-segment common anode, low activewhile(1){PORTB=seg_pat[ sec/10]; COM1; _delay_us(2500); PORTA|=0xF0;PORTB=seg_pat[ sec%10]; COM2; _delay_us(2500); PORTA|=0xF0;PORTB=seg_pat[msec/10]; COM3; _delay_us(2500); PORTA|=0xF0;PORTB=seg_pat[msec%10]; COM4; _delay_us(2500); PORTA|=0xF0;//if(run){ // run=1일 때만 카운터 증가if(++msec>99){ msec=0;if(++sec>99)sec=0; // 59로 바꾸면 0~59}}//if(!(PINE&0x10)){ // PE4, 스타트/스톱run^=1; // 1은 0으로, 0은 1로 변경_delay_ms(100); while(!(PINE&0x10)); _delay_ms(100); // 채터링,디바운스}if(!(PINE&0x20)){ sec=0,msec=0; stop=1; } // PE5, 리셋}}cs 바로 위 예제에서포트F를 포트A로 변경하고led를 제거했습니다.
댓글 0
조회수 1,489등록된 댓글이 없습니다.