BASIC4MCU | 질문게시판 | atmega128 세븐세그먼트 preset 가능한 카운터 만들기
페이지 정보
작성자 길원춘 작성일2020-11-13 22:32 조회4,109회 댓글1건본문
1. 숫자는 자동으로 증가하며 0~999까지 증가한다. 999에서는 다시 0이 된다.
2. PG3을 누르면 10의 자리 값이 증가한다. 이 때, 다른 자리의 값은 바뀌면 안되며, PG3을 놓으면 그 상태의 값에서 카운터가 증가한다.
3. PG2를 누르면 100의 자리 값이 증가한다. 이 때, 다른 자리의 값은 바뀌면 안되며, PG2를 놓으면 그 상태의 값에서 카운터가 증가한다.
주의) 버튼을 누를 때, 다른 값이 변화하면 안된다.
#include (avr/io.h)
#include (avr/interrupt.h)
#include (stdio.h)
#include (math.h)
#include (util/delay.h) //괄호()이거 아니고 <>입니다. 글쓰니까 자꾸 지워지네요
#define DIGITS 4
const char a[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x67};
void delay_us(unsigned int time_us) // Time delay For 1us(8MHz)
{
register unsigned int i;
for(i=0; i asm volatile("PUSH R0"); // 2 cycle+
asm volatile("POP R0"); // 2 cycle = 8cycle = 1us
} // for 8MHz
};>
void delay_ms(unsigned int time_ms)
{
register unsigned int i;
for(i=0; i delay_us(1000);
}
};>
int main(void)
{
char in,out;
char Digit[3];
int CountNo=0, DelayTime=1;
int CountKeyPress=0;
DDRG=0x03;
DDRA=0xff;
DDRC=0xff;
while(1){
while (CountKeyPress>1000)
{
in=PING;
in&=0x0c;
if(in==0x04)
{
CountNo++;
if(CountNo>999)
{
CountNo=0;
}
}
else if(in==0x08)
{
CountNo--;
if(CountNo<0)
{
CountNo=999;
}
}
else if(in==0x0c)
{
CountNo=0;
}
CountKeyPress=0;Digit[0]=CountNo%10;
Digit[1]=(CountNo/10)%10;
Digit[2]=(CountNo/100)%10;
}
CountKeyPress++;
if(CountNo>99){
PORTC=0xfd; //1111 1101
PORTA=a[Digit[2]];
}
_delay_ms(DelayTime);if(CountNo>9){
PORTC=0xfb; //1111 1011
PORTA=a[Digit[1]];
}
_delay_ms(DelayTime);
PORTC=0xF7; //1111 0111
PORTA=a[Digit[0]];
_delay_ms(DelayTime);
}
return 0;
}
위에 코딩(스위치누르면 카운트 업다운 되는)은 기본틀? 같은 거 입니다. 최소한 저 코딩 안에서 바꿔주세요
코드비젼 안쓰고 AVRstudio 4 씁니다
제발 알려주세요...
댓글 1
조회수 4,109master님의 댓글
master 작성일
https://cafe.naver.com/circuitsmanual/217482
이 질문글 올린 분일까요?