회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
14 구인구직 HOT사람인 - 월급 1000만원 프로젝트, 프로그래머 모집 쭈니닷 5052 2012.06.18
13 구인구직 HOT(주)엑스큐어넷 - 소프트웨어 개발자(프로그래머) 채용 쭈니닷 4921 2012.06.12
12 구인구직 HOT(주)시뮬라인 - 기술개발본부 소프트웨어 팀 신입/경력사원 채용공고 쭈니닷 5483 2012.06.11
11 구인구직 HOT㈜엔써즈 - 시스템엔지니어 신입사원 모집 쭈니닷 6356 2012.06.08
10 구인구직 HOT㈜고우넷 - unix 엔지니어 채용 콘마개마 3839 2012.06.05
9 구인구직 HOT전액무료 자바(java)기반 하이브리드 프레임웍개발 안드로이드 개발교육과정 cocoa13 3402 2012.05.14
8 구인구직 HOT[교육부담 0%] 이공계 전액무료 하이브리드 앱 개발자 취업확정자 교육연수과정 cocoa13 4070 2012.05.01
7 구인구직 HOT[전액무료교육] 구로디지털 단지 자바개발 업체 채용확정자 취업교육” 안드로이드 개발 및 프로젝트 과정 cocoa13 3633 2012.04.30
6 구인구직 HOT[전액무료과정] 웹디자이너 양성교육 비주얼 컨텐츠 디자인 과정 안내 cocoa13 4625 2012.04.26
5 구인구직 HOTPOWER설계 및 하드웨어 경력자 찾아요. 박우종 4999 2012.03.07
4 구인구직 HOT회로수리 및 수땜, ECO작업등 필요하시면 연락주세요. 세윤파파 8662 2012.01.27
3 구인구직 HOT실력있는 펌웨어 엔지니어를 모집합니다. JamesHan 8119 2011.12.27
2 구인구직 HOT(주)로벤 연구소에서 연구원을 모집합니다. maddog 6498 2011.11.10
1 구인구직 HOT[급구] PCB 설계 경력자 & H/W 및 펌웨어 엔지니어 모집 용가리3 13454 2010.12.23
Prev 1 ... 5 6 7 8 9 10 11 12 13 14 Next
  • 어떤 책들은 맛만 보고, 나머지 책들은 삼켜버리고, 몇몇 소수의 책은 잘 씹어서 소화시켜야 한다.
    - 베이컨
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.