회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
15 Software & IDEs HOT어셈블리 프로그래밍에서 질문이 있습니다.1 strongman 1154 2009.08.07
14 Software & IDEs HOT데이터 전송 모듈... 류짜장 1040 2008.12.16
13 Software & IDEs HOT8051 신호등 만들때 헤더파일 문제.1 마모루 1489 2008.11.16
12 Software & IDEs HOT길찾기 알고리즘3 인조사람 1199 2008.10.20
11 Software & IDEs HOTMFC로 길찾기 구현 남뉴 1681 2008.10.05
10 Software & IDEs HOT완전초보입니다. 잘부탁드립니다.4 초보민 993 2008.09.19
9 Software & IDEs HOTMatlab 시리얼통신을 통한 그래프만들기..;;1 GreatSSang 3704 2008.09.16
8 Software & IDEs HOT검색엔진의 문자열 논리연산 구현! 도와주세요 ㅡㅜ1 델리트 1097 2008.08.13
7 Software & IDEs HOT윈도우 상에서 비주얼 2005를 이용한 시리얼 포트 프로그래밍2 .ㅇㅈㅇㅈ 1075 2008.07.04
6 Software & IDEs HOTLCMS, DirectX SDK, Visual Studio 6, Platform SDK 호환성 문제 아크마 2256 2008.04.19
5 Software & IDEs HOT칼씨 사용법은 없나요??2 돌격대장 1080 2008.04.13
4 Software & IDEs HOT비쥬얼비튜디오 20057 あさひ 1005 2008.02.02
3 Software & IDEs HOTapi 관련해서 물어봅니당..ㅠ2 화언 735 2008.02.01
2 Software & IDEs HOT8051도트입니다1 판도라 1093 2008.01.30
1 Software & IDEs HOT나누미질문이요...4 악당 1035 2007.10.12
  • 음덕을 베푸틑 자는 반드시 양보를 받는다.
    - 회남자
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.