질문게시판 > Atmega128 기억력테스트 구성중....

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 질문게시판

Atmega128 기억력테스트 구성중....

페이지 정보

작성자 GENE 작성일18-06-27 00:12 조회5,287회 댓글0건

본문

#include <stdlib.h>

#include <avr/interrupt.h>

#include <avr/io.h>

#include <avr/pgmspace.h>

//------------------------------------------------------------------

//bit제어를위해 설정

#define sbit(x,y) (x |= (1<<y))

#define cbit(x,y) (x &= ~(1<<y))

#define tbit(x,y) (x & (1<<y))

//------------------------------------------------------------------

volatile uint8_t msec,m00;

volatile int16_t seed;

volatile uint8_t key1,key1_temp,key_flag,start_flag;

volatile uint8_t key1_on,key1_up,key1_down;

volatile uint8_t data[128],data_count,data_count_end,key_data,timer;

//==================================================================

void port_init(void)

DDRD = 0xF0; // PD7-PD4 = LED output

PORTD = 0x00;

//

DDRF = 0x00; // PORTF = KEY input

PORTF = 0xFF;

}

//==================================================================

void timer_init(void)

{

TCCR0 = 0x0C;                 // 1/64

ASSR = 0x00;                  

OCR0 = 249;                    // 16MHz/64/(1+249) = 1ms

TCNT0 = 0x00;                   

 

TIMSK = 0b00000010;            // enable OC0 interrupt

TIFR = 0x00;                         

}

//------------------------------------------------------------------

prog_int8_t data_table[4] = {0x10,0x20,0x40,0x80};

//==================================================================

void keyread(void)

{

unsigned char i,j;

//

key1=~PINF&0xf0;      //값을 읽어와 필요부분만 유효화한다.

//------------------------------------------------------------------

if(key1_temp==key1)   //2회 동일값이면

{

//---------------------------------------------키를 누를때 1회 on

i=key1_on;      //이전값

j=key1_temp;    //현재값

j=(i^j)&j;       //새로운값만 유효

key1_down=j;

//---------------------------------------------키를 눌렀다 뗄때 1회ON

j=key1_temp;      //현재값

j=(i^j)&i;        //off된 이전값만 유효  

key1_up=j;

//---------------------------------------------키가눌려져 있는 동안 on

key1_on=key1_temp; //현재값

}

//---------------------------------------------이전 값과 일치하지 않으면

    else key1_temp=key1; 

}

//==================================================================

//10ms 마다 이함수로 진입

//------------------------------------------------------------------

void plc(void)

{

uint8_t i;

//------------------------------------------------------------------

if(data_count_end>100) start_flag=0;//최대 100회 반복

//start 

if(start_flag==0)

{

srand(seed);

data_count=0;

data_count_end=0;

start_flag=1;

key1_down=0;

for(i=0;i<100;i++)//난수 100개를 저장

{

data[i] = rand()%4;

}

}

//data 표시

if(start_flag==1)//

{

timer++;

if(timer<50)

{

m00=pgm_read_byte(&data_table[data[data_count_end]]);

}

else 

{

timer=0;

m00=0;

start_flag=2;

}

}

//key 변환

if(start_flag==2)//

{

 

if(key1_down>0)

{

if(tbit(key1_down,4))   key_data=0;

else if(tbit(key1_down,5)) key_data=1;

else if(tbit(key1_down,6)) key_data=2;

else key_data=3;

start_flag=3;

}

}

//check

if(start_flag==3)//

{

if(key_data==data[data_count])

{

data_count++;

start_flag=2;

if(data_count>data_count_end)

{

start_flag=1;

data_count=0;

data_count_end++;

}

}

else

{

start_flag=4;

}

}

//error

if(start_flag==4)//

{

timer++;

if(timer<100)

{

m00=0xff;

}

else if(timer<150)

{

timer=0;

m00=0x00;

start_flag=0;

}

}

//-------------------------------------------------------------------

//out

PORTD=(PORTD&0x0f)|m00;

//

key1_down=0;key1_up=0;

}

//---------------------------------------------------------------------

ISR(TIMER0_COMP_vect) // OC0 interrupt function 

{

sei(); //인터럽트 허용

 

msec++;

if(msec==10)//10ms

{

msec=0;

seed++; //난수의 씨앗

keyread();

plc(); // 10ms를 초과하지말것.(가능하면 5ms이내로할것.)

}

}

//=======================================================================

int

main (void)

{

port_init();

timer_init();

sei();

while(1)

{

 

}

}

 

저희가 기억력테스트랑 LCD 기능을 합쳐서 소스를 만들려고 하는데 

위 소스가 기억력 소스입니다. 혹시 Reset 후에 LCD애 START가 약 몇 초간 켜졌다가 꺼지게 만들고 싶은데 혹시 어떻게 해야 할까요? 

그리고 잘못 눌렀을 때 Game Over를 몇초간 뜨게 하고 싶습니다~ 

초심자라 하나 하나씩 배워가고 있습니다 부탁 드릴게요~~

 

다음은 LCD 소스 입니다~

 

#include <stdio.h>

#include <avr/io.h>

#define F_CPU 16000000UL // 16 MHz

#include <util/delay.h>

//

void LCD_wCmd(char c){ PORTD=0x08; PORTC=c; _delay_us(1); PORTD&=~8; _delay_ms( 3); }

void LCD_Char(char d){ PORTD=0x0A; PORTC=d; _delay_us(1); PORTD&=~8; _delay_us(50); }

void LCD_Str(char *s){ while(*s)LCD_Char(*s++); }

//

int main(void){

  DDRD=0x0E; // PD1,PD2,PD3 // RS RW E

  DDRC=0xFF;

  _delay_ms(100);

  LCD_wCmd(0x38); LCD_wCmd(0x38); LCD_wCmd(0x38); LCD_wCmd(0x38);

  LCD_wCmd(0x0c); LCD_wCmd(0x01);

  LCD_Str("if");

  while(1)

  {

_delay_ms(100);

 

  }

 

  return 0;

}


  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

댓글 : 0

조회수 : 5,287

등록된 댓글이 없습니다.

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 라즈베리파이4 신형 선택문제 댓글[1] maximum  22-06-26
질문 음전압 ADC 댓글[2] 412904  22-06-26
질문 아두이노 센서값 출력 질문입니다! 댓글[1] 아궁2  22-06-24
질문 ATmega128, ATmega28 RS232통신 첨부파일Moon4201  22-06-24
답변 답변 : ATmega128, ATmega28 RS232… 댓글[1] master  22-06-25
질문 서보모터, 온습도센서 코드 질문 댓글[2] 첨부파일kshdlfaldfh  22-06-22
답변 답변 : 서보모터, 온습도센서 코드 질문 댓글[15] master  22-06-22
질문 steppermulti5 질문 응애  22-06-21
답변 답변 : steppermulti5 질문 댓글[1] master  22-06-22
질문 atmega128 avr usart 질문 snoflak  22-06-21
답변 답변 : atmega128 avr usart 질문 댓글[5] master  22-06-21
질문 사용자 정의 함수 변환 하는 방법 댓글[2] 첨부파일da0800  22-06-21
질문 atmega128 댓글[1] 양의노래  22-06-20
질문 아두이노 동시동작 재질문 댓글[9] 첨부파일죠르디  22-06-20
질문 초음파센서로 dc모터 제어하기 댓글[1] 첨부파일난쟁2  22-06-20
질문 아두이노 동시동작 댓글[7] 죠르디  22-06-19
질문 ATMEGA128 UART,FND 연동 질문 JMOD  22-06-19
답변 답변 : ATMEGA128 UART,FND 연동 질문 댓글[1] master  22-06-20
질문 atmeg128 질문이요 댓글[1] 첨부파일공대생er  22-06-18
질문 atmega128 초음파 센서로 신호등 시간초 늘리기 서동씨  22-06-18
답변 답변 : atmega128 초음파 센서로 신호등 시간초… 댓글[1] master  22-06-18
질문 atmega128 댓글[2] 망경이  22-06-18
질문 앱인벤터 이용해서 수동 자동 할라고하는데 ..잘안됩니다… 댓글[1] 따랑해영  22-06-18
답변 질문 : 앱인벤터 이용해서 수동 자동 할라고하는데 ..… 댓글[1] 첨부파일따랑해영  22-06-19
답변 질문 : 앱인벤터 이용해서 수동 자동 할라고하는데 .… 첨부파일따랑해영  22-06-19
질문 서보모터와 초음파센서 댓글[1] 브링미히어  22-06-17
질문 LCD 도와주세요 ㅜㅠㅠㅠ 댓글[2] 첨부파일dentist22  22-06-17
질문 안녕하세요 atmega128 질문드리고 싶습니다. (자… 댓글[3] dlcldl  22-06-17
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전