회원가입 ID/PW 찾기
AA

#include <AT89X51.h>     // I/O가 정의 되어 있는 헤더 파일
#define   I_O       P1_5
#define   SCLK      P1_4    // SCK 핀 정의
#define   RST       P1_6    // RST  핀 정의
// LCD로 디스플레이할 문자
code unsigned char msg1[]=" 2000,00,00,SUN ";
code unsigned char msg2[]="  00 : 00 : 00  ";
code unsigned char ASCTBL[] = "0123456789ABCDEF";
code char sun[]="SUN.";
code char mon[]="MON.";
code char tue[]="TUE.";
code char wed[]="WED.";
code char thu[]="THU.";
code char fri[]="FRI.";
code char sat[]="SAT.";
// P0.0-P0.7 : 데이터, P2.4=RS, P2.5=RW, P2.6=E
#include "LCD8.h"             // LCD 초기설정 루틴이 정의
// 8비트 데이터 메모리로 사용할 경우(MDA-A_D8051 TRAINER)
//#include "LCDM.h"         // LCD 초기설정 루틴이 정의
//년,월,일,요일,시간,분,초를 저장하는 버퍼
unsigned char YEAR,MONTH,DATE,DAY,HR,MIN,SEC;
// 어드레스를 받아서 리드한 데이터를 리턴
unsigned char READ(unsigned char address )
{
     unsigned char buff1,i;
     // 리셋 해제
     RST = 1;
     DELAY( 2000 );           
     // 코맨드 데이터 라이트
     for( i = 0; i < 8; i++ ){
       SCLK = 0;       // 클록 0
       if(address & 0x01) I_O = 1;  //"1"을 전송
       else I_O = 0;                //"0"을 전송
    DELAY( 2000 );           
       SCLK = 1;       // 클록 1
       address >>= 1;  // 다음 데이터
      }
      // I_O 핀 입력으로 변경
      buff1 = 0;
      // 데이터 리드
      for( i = 0; i < 8; i ++){
         SCLK = 0;                // 클록 0
         buff1 >>= 1 ;
         if(I_O) buff1 |= 0x80;   //"1"을 입력
         else buff1 &= 0x7F;      //"0"을 입력
      DELAY( 2000 );           
         SCLK = 1;                 // 클록 1
      }
      // 초기 설정
      SCLK = 0;
      RST = 0;           // 리셋
      return ( buff1 );  // 리드한 값 리턴
}
// 어드레스로 데이터를 라이트
void WRITE(unsigned char address, unsigned char out)
{
     unsigned char i;
     // 리셋 해제
     RST = 1;
     DELAY( 2000 );           
     // 코맨드 데이터 라이트
     for( i = 0; i < 8; i ++ ){
       SCLK = 0;                    // 클록 0
       if(address & 0x01) I_O = 1;  //"1"을 전송
       else I_O = 0;                //"0"을 전송
       SCLK = 1;                    // 클록 1
       DELAY( 2000 );           
       address >>= 1;               // 다음 데이터
      }
     // 데이터 라이트
     for( i = 0 ; i < 8; i ++ ){
       SCLK = 0;                   // 클록 0
       if(out & 0x01) I_O = 1;    //"1"을 전송
       else I_O = 0;               //"0"을 전송
       SCLK = 1;                   // 클록 1
       DELAY( 2000 );            
       out >>= 1;                 // 다음 데이터
      }
      // 초기 설정
      SCLK = 0;
      RST = 0;          // 리셋
}
// 달력 리드
void READ_CAL(void)
{
   DATE  = READ(0x87);   // 요일리드 
   DATE &= 0x3f;
   MONTH = READ(0x89);   // 달 리드
   MONTH &= 0x1f;
   DAY   = READ(0x8b);   // 일 리드
   DAY &= 0x07;
   YEAR  = READ(0x8d);   // 년 리드
}
// 시간 리드
void READ_CLOCK(void)
{
   SEC   = READ(0x81);   // 초 리드
   SEC &= 0x7f;
   MIN   = READ(0x83);   // 분 리드
   MIN &= 0x7f;
   HR    = READ(0x85);   // 시 리드
   HR &= 0x3f;
}
// 달력,시간 라이트
void WRITE_CLOCK(void)
{
   WRITE(0x80,SEC);   // 초 라이트
   WRITE(0x82,MIN);   // 분 라이트
   WRITE(0x84,HR);    // 시 라이트
   WRITE(0x86,DATE);  // 요일라이트
   WRITE(0x88,MONTH); // 달 라이트
   WRITE(0x8a,DAY);   // 일 라이트
   WRITE(0x8c,YEAR);  // 년 라이트
}
// 달력 디스플레이
void DISP_CAL(void)
{
   unsigned char i;
   // 년 디스플레이
   COMMAND(0x83);   // 커서 조정
   CHAR_O(((YEAR >> 4) & 0x0f) + 0x30); // 년 상위
   CHAR_O((YEAR & 0x0f) + 0x30);        // 년 하위
   // 월 디스플레이
   COMMAND(0x86);   // 커서 조정
   CHAR_O(((MONTH >> 4) & 0x0f) + 0x30); // 월 상위
   CHAR_O((MONTH & 0x0f) + 0x30);        // 월 하위
   // 일 디스플레이
   COMMAND(0x89);   // 커서 조정
   CHAR_O(((DATE >> 4) & 0x0f) + 0x30); // 일 상위
   CHAR_O((DATE & 0x0f) + 0x30);        // 일 하위
   // 요일 디스플레이
   COMMAND(0x8c);   // 커서 조정
   // "SUN" 디스플레이
   if (DAY == 1){
    for (i=0; i < 4; i++) CHAR_O(sun[i]);
   }
   // "MON" 디스플레이
   else if (DAY == 2){
    for (i=0; i < 4; i++) CHAR_O(mon[i]);
   }
   // "TUE" 디스플레이
   else if (DAY == 3){
    for (i=0; i < 4; i++) CHAR_O(tue[i]);
   }
   // "WED" 디스플레이
   else if (DAY == 4){
    for (i=0; i < 4; i++) CHAR_O(wed[i]);
   }
   // "THU" 디스플레이
   else if (DAY == 5){
    for (i=0; i < 4; i++) CHAR_O(thu[i]);
   }
   // "FRI" 디스플레이
   else if (DAY == 6){
    for (i=0; i < 4; i++) CHAR_O(fri[i]);
   }
   // "SAT" 디스플레이
   else if (DAY == 7){
    for (i=0; i < 4; i++) CHAR_O(sat[i]);
   }
}
// 시간 디스플레이
void DISP_CLOCK(void)
{
   // 시 디스플레이
   COMMAND(0xc2);   // 커서 조정
   CHAR_O(((HR >> 4) & 0x0f) + 0x30); // 시 상위
   CHAR_O((HR & 0x0f) + 0x30);        // 시 하위

   // 분 디스플레이
   COMMAND(0xc7);   // 커서 조정
   CHAR_O(((MIN >> 4) & 0x0f) + 0x30); // 분 상위
   CHAR_O((MIN & 0x0f) + 0x30);        // 분 하위
   // 초 디스플레이
   COMMAND(0xcc);   // 커서 조정
   CHAR_O(((SEC >> 4) & 0x0f) + 0x30); // 초 상위
   CHAR_O((SEC & 0x0f) + 0x30);        // 초 하위
}
// 메인
void main(void)
{
   RST = 0;        // DS1302 리셋
   SCLK = 0;       // DS1302 클록
   I_O = 1;        // DS1302 데이터 "1"
   L_INIT();       // LCD 초기 설정
   // msg1, msg2 디스플레이
   DISPLAY();
   // DS1302 초기 설정
   WRITE(0x8E,0);   // 라이트 프로텍트 해제
   WRITE(0x80,0);   // 클록 발진 인에이블
   // 버퍼 클리어
   YEAR = 0x03;
   MONTH = 0x05;
   DAY = 0x01;
   DATE = 0x04;
   HR = 0x00;
   MIN = 0x00;
   SEC= 0x00;
   WRITE_CLOCK();     // 달력 및 시간 라이트
   // 달력 디스플레이
   READ_CAL();
   DISP_CAL();
   //시간을 리드해서 디스플레이
   do{
      READ_CLOCK();
      DISP_CLOCK();
   }while(1);
}



디지털시계 프로그램 소스 입니다.

질문은 다름이 아니오라 위 소스 설명좀 해주시면 좋겠습니다

기왕이면 좀 부분부분 자세하게 프로그램 설명좀 ^^ 도와주세요~

댓글 7

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

search
번호 분류 제목 글쓴이 조회 수 날짜
14 구인구직 HOT사람인 - 월급 1000만원 프로젝트, 프로그래머 모집 쭈니닷 5053 2012.06.18
13 구인구직 HOT(주)엑스큐어넷 - 소프트웨어 개발자(프로그래머) 채용 쭈니닷 4921 2012.06.12
12 구인구직 HOT(주)시뮬라인 - 기술개발본부 소프트웨어 팀 신입/경력사원 채용공고 쭈니닷 5483 2012.06.11
11 구인구직 HOT㈜엔써즈 - 시스템엔지니어 신입사원 모집 쭈니닷 6358 2012.06.08
10 구인구직 HOT㈜고우넷 - unix 엔지니어 채용 콘마개마 3839 2012.06.05
9 구인구직 HOT전액무료 자바(java)기반 하이브리드 프레임웍개발 안드로이드 개발교육과정 cocoa13 3403 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 13456 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.