#include <stdlib.h>
#include <time.h>
#include "smart.h"
void ito7seg_cal(unsigned int tmp);
unsigned char bitcal(unsigned char c1, unsigned char c2, unsigned char c3, unsigned char c4, unsigned char c5, unsigned char c6, unsigned char c7);
//unsigned char cRand;
void __vector_1(void)__attribute__((signal,used,externally_visible));//int0의 벡터 번호 1
void __vector_1(void)// 처리할 루트를 넣어준다. 끼어드는 조건이 만족하면 실행된다.
{
//cRand = (rand()%6 + 1);
ito7seg_cal(rand()%6 + 1);
EIFR = 0x01; //반환 값. 그쪽 인터럽트를 사용했다라는 뜻의 반환.
}
int main(void)
{
unsigned char cFlag = 0; //확실히 하기 위한 flag 변수 선언
DDRD = 0xFE; //인터럽트 핀. 펌웨어 쪽에서는 사용하지 않는 핀들을 전부 출력으로 설정해 준다.
SREG &= 0x7F; /*0111 1111, &= 이 의미는 형태 sreg 0x7F 가 앤드 형태로 들어가 있으니 다른 어떤 값이 들어오면 &시켜버린다. 즉 지금의 형태는 모든 인터럽트를 사용 안하겠다가 된다.
*/
DDRC = 0xFF; //7세그먼트 쪽 입/출력 핀을 전부 출력으로
EIMSK = 0x01; //인터럽트 핀(0) 하나 사용
EICRA = 0x02; //falling edge 사용
//SREG |= 0x80; //현재 인터럽트를 쓰지 않고 main 함수 while문에서 다 끝내려 한다
while(1)
{
if(PIND == 1 && cFlag == 0)
{
ito7seg_cal(8); // 스위치를 누르고 있는 동안 8 출력
cFlag = 1;
}
else if(PIND == 0 && cFlag == 1)
{
ito7seg_cal(rand() % 6 + 1);
cFlag = 0;
}
}
return 0;
}
void ito7seg_cal(unsigned int tmp)//7세그먼트의 카운트 형태 함수 정의
{
switch(tmp)
{
case 0 :
PORTC = bitcal(0,0,0,0,0,0,1);
break;
case 1 :
PORTC = bitcal(1,0,0,1,1,1,1);
break;
case 2 :
PORTC = bitcal(0,0,1,0,0,1,0);
break;
case 3 :
PORTC = bitcal(0,0,0,0,1,1,0);
break;
case 4 :
PORTC = bitcal(1,0,0,1,1,0,0);
break;
case 5 :
PORTC = bitcal(0,1,0,0,1,0,0);
break;
case 6 :
PORTC = bitcal(0,1,0,0,0,0,0);
break;
case 7 :
PORTC = bitcal(0,0,0,1,1,0,1);
break;
case 8 :
PORTC = bitcal(0,0,0,0,0,0,0);
break;
case 9 :
PORTC = bitcal(0,0,0,0,1,0,0);
break;
}
}
unsigned char bitcal(unsigned char c1, unsigned char c2, unsigned char c3, unsigned char c4, unsigned char c5, unsigned char c6, unsigned char c7)
{
//return ( ( !c1 << 0 ) |( !c2 << 1 ) |( !c3 << 2 ) |( !c4 << 3 ) |( !c5 << 4 ) |( !c6 << 5 ) |( !c7 << 6 ) );
return ( ( c1 << 0 ) |( c2 << 1 ) |( c3 << 2 ) |( c4 << 3 ) |( c5 << 4 ) |( c6 << 5 ) |( c7 << 6 ) );
}
'개발자 > C 언어' 카테고리의 다른 글
C언어_교환법칙, (2,3)차원 배열, 더블 포인터의 이해 (0) | 2015.04.17 |
---|---|
C언어_구조체 메모리 최적화(전처리어 pragma 사용법),구조체 활용, 공용체 사용법 (0) | 2015.04.17 |
C언어_구조체의 활용(배열 통째로 옮기기, 구조체 메모리 저장 형태) (0) | 2015.04.17 |
C언어_펌웨어_인터럽트 사용법 (0) | 2015.04.17 |
C언어_펌웨어_int0 count dn , int4 count up (0) | 2015.04.17 |