BASIC4MCU | 질문게시판 | 아트메가128 스톱워치에 대해서
페이지 정보
작성자 TheGift 작성일2019-06-03 22:18 조회3,004회 댓글0건본문
코트를 이렇게 치니까 7segment에서 숫자가 올라가더라구요. 스톱워치를 만들려고하는데 임의의 스위치를 눌렀을시 올라가는숫자가 멈추고
다른스위치를 눌렀을시 숫자가 Reset되는 소스만 조금 첨부가능할까요? 잘모르겠네욤 ㅠ
#include <avr/io.h>
#include <stdio.h>
char Seg_pat[10] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90 };
int Min =0, Sec = 0;
// Time Delay(us)
void delay_us(unsigned char time_us) {
register unsigned char i;
for(i = 0; i < time_us; i++) { // 4 cycle
asm volatile("PUSH R0 "); // + 2 cycle
asm volatile("POP R0 "); // + 2 cycle
asm volatile("PUSH R0 "); // + 2 cycle
asm volatile("POP R0 "); // + 2 cycle
asm volatile("PUSH R0 "); // + 2 cycle
asm volatile("POP R0 "); // + 2 cycle
}
}
// Time Delay(ms)
void delay_ms(unsigned int time_ms) {
register unsigned int i;
for(i = 0; i < time_ms; i++) {
delay_us(250);
delay_us(250);
delay_us(250);
delay_us(250);
}
}
void Time_out();
void timer(void)
{
delay_ms(100);
DDRB = 0xff;
DDRF = 0b11110000;
while(1){
Time_out();
Sec++;
if(Sec == 60){
Sec = 0;
Min++;
if(Min == 60) Min = 0;
}
}
}
void Time_out(void){
int i, M10, M1, S10, S1;
M10 = Min/10;
M1 = Min%10;
S10 = Sec/10;
S1 = Sec%10;
for( i =0 ; i<50; i++){
PORTF = 0b11100000;
PORTB = Seg_pat[S1];
delay_ms(5);
PORTF = 0b11010000;
PORTB = Seg_pat[S10];
delay_ms(5);
PORTF = 0b10110000;
PORTB = Seg_pat[M1];
delay_ms(5);
PORTF = 0b01110000;
PORTB = Seg_pat[M10];
delay_ms(5);
}//endfor
}
int main() {
timer();
Time_out();
while(1){
}
}
댓글 0
조회수 3,004등록된 댓글이 없습니다.