회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
32 마이크로프로세서 HOTAVRstudio 4에서 돌려봤습니다.1 나야소달ㅋ 1672 2007.05.05
31 마이크로프로세서 HOT아, 헤더파일,,,,2 나야소달ㅋ 1608 2007.04.29
30 마이크로프로세서 HOT정말 오랜만에 또 질문...ㅎㅎ3 나야소달ㅋ 1120 2007.04.22
29 마이크로프로세서 HOT트레이서 트랙을 만들고 있어요.4 나야소달ㅋ 1138 2007.04.18
28 마이크로프로세서 HOTSST42D2120 스텝모터...2 나야소달ㅋ 1931 2007.04.15
27 마이크로프로세서 HOT모터 구동방식에 대해 다시 질문요;;;4 나야소달ㅋ 1433 2007.04.15
26 마이크로프로세서 HOT모터 선정에 있어 토크 고려 방법6 보해소주 4751 2007.05.30
25 마이크로프로세서 HOT타이머 시분할에 관한거...(초보라서.. 자세히점..가르켜주시면)2 mgcjjang 858 2007.09.07
24 마이크로프로세서 HOT(AT89S52)타이머인터럽트 제어...? 한번봐주세요7 대박 1182 2007.08.13
23 마이크로프로세서 HOT안녕하세요 질문하나 드립니다 ^_^;2 챠리스만 610 2007.08.11
22 마이크로프로세서 HOT스텝모터 관련 질문이요 ㅋ10 빠라삐리뽀 2011 2007.08.11
21 마이크로프로세서 HOTLCD 원리좀..3 은하철도9981 964 2007.08.08
20 마이크로프로세서 HOTAT89S52에서 워치독타이머로 파워절약모드 설정은?1 대박 1182 2007.08.07
19 마이크로프로세서 HOT슬립모드 제어?1 대박 924 2007.08.06
18 마이크로프로세서 HOT타이머로 짠 소스 좀 봐주세욤 ....6 뺘쑝 879 2007.08.01
17 마이크로프로세서 HOTlcd 4비트 제어에 대해서..5 뺘쑝 981 2007.07.31
16 마이크로프로세서 HOT라인트레이서 코딩에 대해서...16 뺘쑝 1152 2007.07.31
마이크로프로세서 HOT디지털 시계 소스입니다 . 질문좀..7 해드8051 2664 2007.06.10
14 마이크로프로세서 HOT레귤레이터 7805에 대해서 질문입니다4 뺘쑝 1576 2007.06.04
13 마이크로프로세서 HOT라인트레이서 회로부분에서 질문있습니다4 뺘쑝 801 2007.06.01
  • 경영인의 가장 중요한 과업중의 하나는 자기직원들의 불이행에 대한 변명을 없애는 것이다.
    - 타운센드
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.