회원가입 ID/PW 찾기
AA

/**********************************************************************
*
*                              main.c
*
*
*
***********************************************************************/

#include <iom2560.h>
#include <stdio.h>
#include <intrinsics.h>

unsigned char sec1;
unsigned char sec2;
unsigned char sec3;
unsigned char min1;
unsigned char min2;
unsigned char hour1;
unsigned char hour2;

void init_lcd(void)
{
  DDRL = 0xff;
  DDRC = 0xff;

  PORTC = 0x04;
  PORTL = 0x38;
  __delay_cycles (8000);
  PORTC = 0x03;

  PORTC = 0x04;
  PORTL = 0x38;
  __delay_cycles (8000);
  PORTC = 0x03;

  PORTC = 0x04;
  PORTL = 0x38;
  __delay_cycles (8000);
  PORTC = 0x03;

  PORTC = 0x04;
  PORTL = 0x0c;
  __delay_cycles (8000);
  PORTC = 0x03;

  PORTC = 0x04;
  PORTL = 0x06;
  __delay_cycles (8000);
  PORTC = 0x03;

  PORTC = 0x04;
  PORTL = 0x02;
  __delay_cycles (8000);
  PORTC = 0x03;

  PORTC = 0x04;
  PORTL = 0x01;
  __delay_cycles (8000);
  PORTC = 0x03;
}

void write(unsigned int addr, unsigned int str)
{
  PORTC = 0x04;
  PORTL = addr;
  __delay_cycles (8000);
  PORTC = 0x03;

  PORTC = 0x06;
  PORTL = str;
  __delay_cycles (8000);
  PORTC = 0x03;
}

void init_timer1(void)
{
 OCR1AH = 0x2C; 
 OCR1AL = 0xFF;
 TCCR1B = 0x0B; 
        TIMSK1 = 0x02;
}

#pragma vector = TIMER1_COMPA_vect
__interrupt void timer1_compa()
{
 sec1++;
}

void init_clock()
{
  sec1 = 0x30;
  sec2 = 0x30;
  sec3 = 0x30;
  min1 = 0x30;
  min2 = 0x30;
  hour1 = 0x30;
  hour2 = 0x30;
}

void main(void)
{
  init_clock();
  SREG|=0x80;
  init_timer1();
  init_lcd();

  while(1)
  {
    write(0x89, sec1); SET RAM CONTROL
    write(0x88, 0x2e); SET_RAM_ADDRESS_CONTROL     
    write(0x87, sec2);
    write(0x86, sec3); SET_PARTIAL_DISPLAY CONTROL 
    write(0x85, 0x3a);
    write(0x84, min1);
    write(0x83, min2);
    write(0x82, 0x3a);
    write(0x81, hour1);
    write(0x80, hour2);
    if (sec1>0x39){sec1 = 0x30; sec2++;}
    if (sec2>0x39){sec2 = 0x30; sec3++;}
    if (sec3>0x35){sec3 = 0x30; min1++;}
    if (min1>0x39){min1 = 0x30; min2++;}
    if (min2>0x35){min2 = 0x30; hour1++;}
    if (hour2 == 0x30 & hour1>0x39){hour1 = 0x30; hour2 = 0x31;}
    if (hour2 == 0x31 & hour1>0x39){hour1 = 0x30; hour2 = 0x32;}
    if (hour2 == 0x32 & hour1>0x33){hour1 = 0x30; hour2 = 0x30;}
  }

}

댓글 1
  • No Profile

    #include <iom2560.h>
    #include <stdio.h>
    #include <intrinsics.h>

    위부분은 아실거라 생각합니다.명령어에 관한 함수를 호출한거고요.

    unsigned char sec1;
    unsigned char sec2;
    unsigned char sec3;
    unsigned char min1;
    unsigned char min2;
    unsigned char hour1;
    unsigned char hour2; 이부분은 메모리 크기 지정 한거구요 할당될수 있는 크기를 지정한겁니다. char정도면 문자 단위까지 지정이가능합니다.숫자만 쓰실거면 더 적은 bit단위의 표현방법도 있고요

    void init_lcd(void)
    {
    DDRL = 0xff;
    DDRC = 0xff;

    PORTC = 0x04;
    PORTL = 0x38;
    __delay_cycles (8000);
    PORTC = 0x03;

    PORTC = 0x04;
    PORTL = 0x38;
    __delay_cycles (8000);
    PORTC = 0x03;

    PORTC = 0x04;
    PORTL = 0x38;
    __delay_cycles (8000);
    PORTC = 0x03;

    PORTC = 0x04;
    PORTL = 0x0c;
    __delay_cycles (8000);
    PORTC = 0x03;

    PORTC = 0x04;
    PORTL = 0x06;
    __delay_cycles (8000);
    PORTC = 0x03;

    PORTC = 0x04;
    PORTL = 0x02;
    __delay_cycles (8000);
    PORTC = 0x03;

    PORTC = 0x04;
    PORTL = 0x01;
    __delay_cycles (8000);
    PORTC = 0x03;
    lcd사용할 어드레스 번지를 지정해 준겁니다.

    void write(unsigned int addr, unsigned int str)
    {
    PORTC = 0x04;
    PORTL = addr;
    __delay_cycles (8000);
    PORTC = 0x03;

    PORTC = 0x06;
    PORTL = str;
    __delay_cycles (8000);
    PORTC = 0x03;
    }

    쓰기관련 해서 각 포트별로 메모리에 어느 번지 부터 시작할건지 시작위치를 지정해 준겁니다. 

    void init_timer1(void)
    {
    OCR1AH = 0x2C;
    OCR1AL = 0xFF;
    TCCR1B = 0x0B;
    TIMSK1 = 0x02;
    타이머 관련해서 어느 번지를 쓰실건지 그분분 정의해 놓은거구요.

    #pragma vector = TIMER1_COMPA_vect
    __interrupt void timer1_compa()
    {
    sec1++;
    }

    void init_clock()
    {
    sec1 = 0x30;
    sec2 = 0x30;
    sec3 = 0x30;
    min1 = 0x30;
    min2 = 0x30;
    hour1 = 0x30;
    hour2 = 0x30;
    }

    이분분도

    sec1++ 이분분은 1씩 증가하라 이런식으로 타이머 동작과 클럭 번지 지정을 해 준겁니다.

    void main(void)
    {
    init_clock();
    SREG|=0x80;
    init_timer1();
    init_lcd();

    while(1)
    {
    write(0x89, sec1); SET RAM CONTROL
    write(0x88, 0x2e); SET_RAM_ADDRESS_CONTROL
    write(0x87, sec2);
    write(0x86, sec3); SET_PARTIAL_DISPLAY CONTROL
    write(0x85, 0x3a);
    write(0x84, min1);
    write(0x83, min2);
    write(0x82, 0x3a);
    write(0x81, hour1);
    write(0x80, hour2);
    if (sec1>0x39){sec1 = 0x30; sec2++;}
    if (sec2>0x39){sec2 = 0x30; sec3++;}
    if (sec3>0x35){sec3 = 0x30; min1++;}
    if (min1>0x39){min1 = 0x30; min2++;}
    if (min2>0x35){min2 = 0x30; hour1++;}
    if (hour2 == 0x30 & hour1>0x39){hour1 = 0x30; hour2 = 0x31;}
    if (hour2 == 0x31 & hour1>0x39){hour1 = 0x30; hour2 = 0x32;}
    if (hour2 == 0x32 & hour1>0x33){hour1 = 0x30; hour2 = 0x30;}
    }

    }
    이부분은 동작에 관련된 부분인데 우선 간단하게 이야기해서

    if (sec1>0x39){sec1 = 0x30; sec2++;}

    만약에 sec1 0x39번지가 0x30이면 sec2는 1증가하라 이런식으로 ... 동작에 관련된 내용입니다.

    write(0x89, sec1); 이부분은 쓰기 0x89번지가 sec1 을 저장하라 이런 문구입니다.

    정확하게는 1부터 9증가하다 0이되면 sec2를 1증가하고 다시 1씩 증가한다 이런식으로 동작이 되겠금 설계하신거 같습니다.

     

    도움이 많이 못되서 죄송합니다  c 배운지 오래되서 기본 적인 동작 이어떻게 되는지 만 감 잡으시라고 올렸습니다. .

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
1447 자유주제 HOT반갑습니다. 가입했어요. 녹슨 21480 2011.12.28
1446 자유주제 HOT페이지 가 예쁜데요.1 빛나는 영혼 24284 2011.12.29
1445 개발용역 HOT정류기 인터페이스 모듈 개발 의뢰합니다. 진수아빠 6970 2011.12.29
1444 자유주제 HOT새해를 맞이하는 하루되세요.2 하루백만원 21400 2011.12.31
1443 Analog & Mixed-Signal 설계 HOT28V를 24V로 만드는법4 qweasd 1149 2012.01.02
1442 Allegro & OrCAD HOTOrcad 16.0 SHooTERS 설치법 질문2 메탈광 4000 2012.01.04
1441 자유주제 HOT가입하게 되어 감사합니다2 어부와별님 21571 2012.01.04
1440 PADS HOTPADS 9.3설치시 Demo 로 실행할때...질문요~1 길~ 1522 2012.01.04
1439 마이크로프로세서 HOTAVR과 ARM이 다른건 알지만..1 엘케인 1235 2012.01.06
1438 마이크로프로세서 HOT완전 초보에 문의 내용입니다.1 마목 819 2012.01.07
1437 PADS HOTPADS 9.3.1 설치후 라이센싱문제입니다.2 헤라꼴레 1890 2012.01.09
1436 전기전자 아무거나 HOT다량의 RGB LED 제어!!!!!!!!!!!! 아이디어좀 주세요!!!1 꼬꼴리 2256 2012.01.10
1435 ECAD 아무거나 HOT초보입니다.. 업무상 필요한 부분이여서요 빠른 답변 부탁 드려요 ^^;;1 멜쉬 841 2012.01.10
1434 ECAD 아무거나 HOTCAM350 TOOL공유 할수있나요1 정상까지 가보자! 5100 2012.01.12
1433 Sensor 설계 HOT레귤레이터 질문입니다.1 마모루 1885 2012.01.12
마이크로프로세서 HOTlcd시계 커는 소스입니다.. 해석좀 부탁 드려요 ~1 멜쉬 4136 2012.01.17
1431 중고장터 HOTLevel shifter, Level translator 2channel 구입합니다.. 발가락마저곱지아니한가 7381 2012.01.18
1430 개발용역 HOT소형 제어용 콘트롤러 개발 의뢰합니다.1 박종근 6251 2012.01.18
1429 자유주제 HOT새 해1 견우7 17191 2012.01.19
1428 전기전자 아무거나 HOT도와주세요! 제발. 조범준 778 2012.01.19
  • 사람들의 사사로운 말도 하늘이 들으심은 우뢰와 같다. 캄캄한 방에서 마음을 속이더라도 귀신의 눈은 번개와 같다.
    - 현제
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.