회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
106 펌웨어 & 코딩언어 객체지향프로그래밍4 끼르 348 2017.06.19
105 펌웨어 & 코딩언어 적외선 센서에 대한 질문입니다.3 jaemi2010 348 2016.02.25
104 펌웨어 & 코딩언어 구조체 포인터 캐스팅??1 기다려줄래 319 2015.07.10
103 펌웨어 & 코딩언어 matlab에서 작성된 m file을 c++로 변환하고 싶습니다.1 마린스토리 287 2014.04.28
102 펌웨어 & 코딩언어 HOTC언어로된 MPPT제어 프로그램 Code Vision 으로 변환하기 찰떡젤리 584 2014.04.21
101 펌웨어 & 코딩언어 HOTC 명령어 좀 상세히 알고 싶습니다1 jsp 405 2014.04.03
100 펌웨어 & 코딩언어 HOT피보나치 수열..2 aNitMotD 558 2013.10.30
99 펌웨어 & 코딩언어 HOT1D FEM coding 문제 ..원하는 답이 안나와요 수치해석미쵸 511 2013.09.29
98 펌웨어 & 코딩언어 HOTPIC 16F628A와 CCSC 기반의 프로그래밍 질문입니다. 제발 도와주세요ㅠㅠ 신천동주민 485 2013.09.24
97 펌웨어 & 코딩언어 HOT비주얼베이직 연산 및 줄바꿈에 대한 질문입니다.1 원할머니보고쌈 686 2012.11.07
96 펌웨어 & 코딩언어 c언어 질문인데요..3 하하하하히 397 2012.09.10
95 펌웨어 & 코딩언어 HOTC언어제어3 tbwnaoslwj1 656 2012.08.09
94 펌웨어 & 코딩언어 HOTmatlab 질문입니다.. 소다수1 416 2012.06.06
93 펌웨어 & 코딩언어 HOT-(C언어(함수호출)로 만든 크리스*마스*트리*프로그램)-1 리종순2 1479 2011.12.14
92 펌웨어 & 코딩언어 HOT외부 SRAM 컨트롤하는 것좀 도와주세요.1 쩡무 1382 2011.11.15
91 펌웨어 & 코딩언어 HOTunikey program 수정 jjhuem 1129 2011.10.11
90 펌웨어 & 코딩언어 HOTAtmega128에서 Reset 하는 방법 중 궁금한 점이 있습니다!!!4 공돌이의꿈 3164 2011.06.21
89 펌웨어 & 코딩언어 HOTC언어랑 matlab의 차이?1 약곰탱이 3530 2011.06.02
88 펌웨어 & 코딩언어 HOTVHDL 전가산기 설계 질문입니다. 나트륨 2994 2011.03.26
87 펌웨어 & 코딩언어 HOTC 배열이용해서 엑셀 데이터 끌어오는 방법???2 꼬꼴리 2125 2011.03.24
  • 시간엄수는 군주의 예절이다.
    - 루이 18세
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.