답변 : atmega128 코드질문드려요
페이지 정보
작성자 master 작성일18-12-20 22:58 조회5,248회 댓글1건본문
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-12-20 오후 11:05:36
// by Ok-Hyun Park
//
#define F_CPU 7372800UL // 7.3728 MHz
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
//
volatile unsigned char FND_DATA_TBL[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x67,0x77,0x7C,0x39,0x5E,0x79,0x71,0x08,0x80};
volatile unsigned char MOTOR[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //1-2상 여자
//
volatile signed char mot_cnt=0;
volatile unsigned char dir=0,run=0,speed=0;
//
volatile unsigned char speed_table[]={ 159,144,128,112,96,80,64,48,32,16};
//
void speed_disp(){
OCR0=speed_table[speed];
PORTF=FND_DATA_TBL[speed];
}
//
ISR(TIMER0_COMP_vect){ // 22.2ms
if(run){
if(dir){
if(--mot_cnt<0)mot_cnt=7; // Right
PORTB=0xFF; // LED on
PORTE=0x08; // Buzzer on
}
else{
if(++mot_cnt>7)mot_cnt=0; // left
PORTB=0x00; // LED off
PORTE=0x00; // Buzzer off
}
PORTC=MOTOR[mot_cnt];
}
}
//
volatile char flag0=0,flag1=0,flag2=0,flag3=0;
//
ISR(TIMER1_COMPA_vect){
if(!(PIND&0x01)){ // sw0
if(flag0==0){ flag0=1; dir^=1; }
}
else{ flag0=0; }
//--------------------
if(!(PIND&0x02)){ // sw1
if(flag1==0){ flag1=1; run^=1; }
}
else{ flag1=0; }
//--------------------
if(!(PIND&0x04)){ // sw2
if(flag2==0){ flag2=1; if(speed<9)speed++; speed_disp(); }
}
else{ flag2=0; }
//--------------------
if(!(PIND&0x08)){ // sw3
if(flag3==0){ flag3=1; if(speed>0)speed--; speed_disp(); }
}
else{ flag3=0; }
//--------------------
}
//
int main(){
PORTD=0xFF; // 스위치
DDRF=0xFF; // FND
DDRB=0xFF; // LED
DDRC=0x0F; // STEP MOTOR
DDRE=0x08; // Buzzer on
speed_disp();
//
TCCR0=0x0F; OCR0=159; TIMSK=0x02; // 7372800/1024/160=45Hz=22.2ms
TCCR1B=0x0C; OCR1A=6249; TIMSK|=0x10; //100ms
SREG=0x80;
while(1);
}
댓글 : 1
조회수 : 5,248
atmegaga님의 댓글
atmegaga 작성일소스 변형 정말 감사합니다.