BASIC4MCU | 질문게시판 | codevision 값 저장 문법좀 부탁드립니다.
페이지 정보
작성자 하미레스 작성일2020-06-10 22:31 조회11,065회 댓글3건본문
#include <mega128.h>
#include <delay.h>
void main(void)
{
unsigned char seg0[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};
unsigned char seg1[4] = {0x08,0x04,0x02,0x01};
unsigned char led,qwe,asd;
unsigned int i=11, j=0;
int state = 0;
DDRF = 0xFF;
DDRA = 0xFF;
DDRC = 0x0F;
DDRG = 0xF3;
led = 0b10000000;
PORTF = led;
PORTC = 0x00;
qwe = (PING & 0x08); // pg3
while (1)
{
if(PING&0x04)
{
state = 1;
i--;
if(i == 0) i = 0;
delay_ms(100);
}
if(state == 1)
{
for(j=0; j<4; j++)
{
DDRC = seg1[j];
if(j == 3) PORTA = seg0[(i%10000)/1000];
if(j == 2) PORTA = seg0[(i%1000)/100];
if(j == 1) PORTA = seg0[(i%100)/10];
if(j == 0) PORTA = seg0[i%10];
delay_ms(5);
}
}
asd = (PING & 0x08);
if(qwe != 8&&asd == 8)
{
led = led>>1;
if(led == 0b00000001) led=0b10000000;
PORTF = led;
delay_ms(300);
i=11;
i--;
}
}
}
위 소스를 간략하게 말씀드리면,
스위치 PING&0x04를 누를시, 세그먼트의 숫자가 10부터 0까지 감소하며
스위치 PING&0x08를 누를시, PORTF에 연결된 8구 LED 모듈에서 제일 왼쪽 LED부터 하나씩만 켜지는 겁니다.
음료 자판기를 생각하시면 편안합니다.
스위치 PING&0x08이 음료수 종류이며, PING&0x04가 최대 10개가 들어있는 음료수입니다.
문제는 예를 들어
음료수 종류를 바꾸는 PING&0x08를 눌러 왼쪽 두번째 LED가 켜졌을 때,
PING&0x04를 눌러 6개로 맞춰두고 이 숫자 6을 저장시키고 싶습니다.
즉, PING&0x08을 한바퀴 돌고 왔을 때 LED 왼쪽 두번째 위치에서 세그먼트의 아까전 6이 떠있는 방식입니다.
어떤 코드를 입력해야 할지 모르겠고 어느 위치에다 하나요???
댓글 3
조회수 11,065master님의 댓글
master 작성일
i=11;
이런 문법은 질문 코드에 정말 많이 사용되고 있는데요
모두 저장하는 문법입니다.
변수를 하나 선언하고
어느 시점에서 변수를 0으로 초기화 한 후
어떤 조건에서 변수에 값을 넣어두고
또 다른 시점에서 변수 값을 체크해서 0이 아니라면 값을 표시하면 되겠죠
하미레스님의 댓글
하미레스
무슨 말씀인지 이해가 안되는데 i , j 말고 또다른 변수를 선언하라는 건가요???? 감히 안잡히네요
master님의 댓글
master
i,j 변수로 충분하다면 기존 변수를 사용하면 되지만
해당 변수가 다른 용도로 사용되고 있다면 새로운 변수를 선언해야겠죠