8051/PIC > 초보자를 위한 8051 시계키트 강좌 (1) - SE-CLOCK-ES -소개

TODAY1,081 TOTAL680,004
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 8051/PIC | 8051 | 초보자를 위한 8051 시계키트 강좌 (1) - SE-CLOCK-ES -소개

페이지 정보

작성자 키트 작성일2017-09-12 10:08 조회464회 댓글0건

본문


SE-CLOCK-ES

초등학교 특활 과제용 전자 시계 KIT

BASIC 언어를 사용한 가장 간단한 시계 KIT입니다.
Demo 버젼 컴파일러 사용으로 
누구나  쉽게 마이크로 프로세서를 배울 수 있습니다.

SE-CLOCK-ES 소스(Bascom 8051 BASIC)

BASCOM 8051 데모 버젼 컴파일러(4K 사용가능)

BASCOM 8051 컴파일러 한글 매뉴얼3660040644_G4DLfcym_pdf_icon.gif

PCB src
 
   

 

 

PCB src
 
 
Components src
 
   
  

 

 

Schematic preview
 
   
 

 

 

/********************************************************************
* Description:                                                     *
*                                                                  *
* SE-CLOCK-ES                                                      *
*                                                                  *
* 8051 프로세서를 이용한 디지털 전자시계입니다.                    *
* 알람 시각 설정이 가능합니다.                                     *
* 알람 시각이 되면 1 분 동안 부져 소리가 납니다.                   *
*                                                                  *
*  +-----------------------------------------+                     *
*  |                                         |                     *
*  |  O +----+   +----+   +----+   +----+    |                     *
*  | A.M|    |   |    | O |    |   |    |    |                     *
*  |    |    |   |    |   |    |   |    |    |                     *
*  |    +----+   +----+   +----+   +----+    |                     *
*  |    |    |   |    |   |    |   |    |    |                     *
*  | P.M|    |   |    | O |    |   |    |    |                     *
*  |  O +----+   +----+   +----+   +----+    |                     *
*  |               WWW.SAMPLE.CO.KR          |                     *
*  |  ||||  | -NNN-    | |||||||| +-+--+-- | |                     *
*  |  ZZZZ  = -NNN-    Z ZZZZZZZZ |o|  |-- = |                     *
*  |  ZZZZ  |  -NNN-   Z ZZZZZZZZ +-+--+-- | |                     *
*  |  ZZZZ      -NNN-  Z ZZZZZZZZ    7805 1uF|                     *
*  |  ||||  1uF  -NNN- | ||||||||            |                     *
*  |             -NNN-                   ||| |                     *
*  |1uF          -NNN-           O ALM|||ZZZ |                     *
*  ||                               ||ZZZZZZ |                     *
*  |=         +-------------------+ ZZZZZZZZ |                     *
*  ||  ___    |                   | ZZZZZ||| |                     *
*  |  /   \   >      8051         | ZZ|||    |                     *
*  | |     |  |                   | ||   DC9V|                     *
*  | |     |  +-------------------+     +----|                     *
*  |  \___/                       __    |    |                     *
*  |    PIEZO ALARM SAVE HOUR MIN(__)33p+----|                     *
*  |    BUZER  [  ] [  ] [  ] [  ]  -||-     |                     *
*  |                              -||- --|>|-|                     *
*  |                               33p 1N4007|                     *
*  +-----------------------------------------+                     *
*                                                                  *
* Written by Junghoon Kim 21-DEC-2005                              *
* Compiled by Crossware 8051 C Compiler Demo Version               *
*                                                                  *
* http://www.crossware.com                                         *
*                                                                  *
* Crossware 8051 ANSI C 데모버젼 컴파일러를 이용하여               *
* HEX 파일 만드는 순서:                                            *
*                                                                  *
* << 첫번째 방법 >>                                                *
* Step 1: Crossware 8051 ANSI C 컴파일러 다운로드 하고             *
*         PC 에 설치합니다.                                        *
*         http://www.crossware.co.kr/setup-demo.exe                *
*                                                                  *
* Step 2: Crossware C 컴파일러를 실행합니다.                       *
*                                                                  *        
* Step 3: 새로운 프로젝트를 만듭니다.                              *
*         1. FILE 메뉴에서 New 를 선택합니다.                      *
*            New 창이 나옵니다. Project 탭에서 Executable          *
*            Program 을 선택하고 [확인]을 클릭합니다.              *
*         2. Target Select 창이 나오며                             *
*               Target Family: 8051                                *
*               Group        : Show All                            *
*               Family Member: Generic 8051 을 선택합니다.         *
*               [다음]을 클릭합니다.                               *
*         3. Project Name and Directory 창이 나옵니다.             *
*            Project name 칸에 프로젝트 이름을                     *
*            se-clock-esc로 입력합니다.                            *
*            Project Directory를 변경하려면 [Browse]버튼을         *
*            이용하여 새로운 디렉토리를 선택합니다.                *
*            [다음] 버튼을 클릭합니다.                             *
*         4. Target Memory Configuration 창이 나옵니다.            *
*            Memory Model 을 Small 로 선택 합니다.                 *
*            [다음]을 클릭합니다.                                  *
*         5. Program File Format 창이 나오며 여기서                *
*            INTEL HEX 를 선택합니다.                              *
*            [다음]을 클릭합니다.                                  *
*         6. Start up File 창이 나옵니다.                          *
*            [마침]을 클릭하면 Project 초기화가 완료되며           *
*            main.c 기본 프로그램이 만들어 집니다.                 *
*       전부 지우고 seclkesc.txt 프로그램을 복사하여          *
*            넣습니다.                                             *
* Step 4: Build 메뉴에서 Rebuild All 을 클릭하면                   *
*         seclkesc.HEX 파일이 만들어집니다.                        *
*                                                                  *
*                                                                  *
* << 두번째 방법 >>                                                *
* Step 1: Crossware 8051 ANSI C 컴파일러 다운로드 하고             *
*         PC 에 설치합니다.                                        *
*         http://www.crossware.co.kr/setup-demo.exe                *
* Step 2: c:\estudio_demo\projects 폴더에서 새 폴더                *
*         만들기를 하고 폴더 이름을 seclkesc 로                    *
*         입력합니다.                                              *
*         seclkesc.zip 를 압축을 풀어                              *
*         c:\estudio_demo\projects\seclkesc 폴더에                 *
*         복사하여 넣습니다.                                       *
* Step 3: 1. Crossware 를 실행합니다.                              *
*         2. FILE 메뉴에서 Open Project를 클릭합니다.              *
*         3. seclkesc폴더에서 seclkesc.XMK를                       *
*            선택합니다.                                           *
* Step 4: Build 메뉴에서 Rebuild All 을 클릭하면                   *
*         seclkesc.HEX 파일이 만들어집니다.                        *
*                                                                  *
*                                                                  *
*  os.h 와 sfr.h 헤더 파일은 Crossware 8051 C 컴파일러가           *
*  설치되면 include 폴더안에 들어 있습니다.                        *
*                                                                  *
*                                                                  *
*  SAMPLE Electronics co.                                          *
*  C-18 P1-fl. Main-bd. ET-Land                                    *
*  16-9 Hangangno-3ga Yongsan-gu                                   *
*  Seoul 190-879 South KOREA                                       *
*  Tel   : +82-2-701-8051                                          *
*  Fax   : +82-2-701-8058                                          *
*  Email : sample@korea.com                                        *
*  Web   : HTTP://WWW.SAMPLE.CO.KR                                 *
*                                                                  *
********************************************************************/
/////////////////////////////////////////////////////////////
#include                   // 8051 의 SFR 이 정의된 파일
#include                    // 8051 의 인터럽트 번호 정의된 파일 
/////////////////////////////////////////////////////////////
// 7 Segment Pattern Data
#define Segpat0 0xC0              // &B11000000       0   ****A***
#define Segpat1 0xF9              // &B11111001       1   *      *
#define Segpat2 0xA4              // &B10100100       2   F      B
#define Segpat3 0xB0              // &B10110000       3   *      *
#define Segpat4 0x99              // &B10011001       4   ****G***
#define Segpat5 0x92              // &B10010010       5   *      *
#define Segpat6 0x82              // &B10000010       6   E      C
#define Segpat7 0xD8              // &B11011000       7   *      *
#define Segpat8 0x80              // &B10000000       8   ****D***
#define Segpat9 0x98              // &B10011000       9
#define Segpblk 0xFF              // &B11111111      10 BLANK
/////////////////////////////////////////////////////////////
_sfrbit hour10   =  _p1^0;        // 10시 표시 
_sfrbit led_am   =  _p1^1;        // 오전 표시 LED
_sfrbit led_pm   =  _p1^2;        // 오후 표시 LED
_sfrbit piezo    =  _p1^3;        // 피에조 부져
_sfrbit sw_alarm =  _p1^4;        // 알람 설정 
_sfrbit sw_save  =  _p1^5;        // 알람 시각 저장 
_sfrbit sw_hour  =  _p1^6;        // 시 조정
_sfrbit sw_min   =  _p1^7;        // 분 조정 
_sfrbit led_low  =  _p0^7;        // 
_sfrbit led_high =  _p2^7;        //
_sfrbit led_alrm =  _p3^7;        // 알람 표시 LED
/////////////////////////////////////////////////////////////
unsigned int  icount;           
unsigned char clock_cent;         // 1/100 초 단위(0 ~ 99)
unsigned char clock_second;       // 초 단위 변수 (0 ~ 59)
unsigned char clock_min;          // 분 단위 변수 (0 ~ 59)
unsigned char clock_hour;         // 시 단위 변수 (0 ~ 23)
unsigned char alarm_min;          // 분 단위 변수 (0 ~ 59)
unsigned char alarm_hour;         // 시 단위 변수 (0 ~ 23)
_bit beep;                        //
_bit alarm;                       // 알람 모드 
//---------------------------------------------------------------------------
unsigned char _code fnd_pattern[] = { Segpat0, Segpat1, Segpat2, Segpat3, \
         Segpat4, Segpat5, Segpat6, Segpat7, Segpat8, Segpat9, Segpblk };   // Code Memory

void _interrupt IVN_TIMER0 time_base() {          // Clock, Timer
/********************************************************************
* Timer 0 Interrupt                                                *
* 250uS 주기로 인터럽트가 발생합니다. icount 를 증가시키고         *
* beep 비트의 상태에 따라 피에보 부져를 동작시킵니다.              *
********************************************************************/
   icount++;

   if (icount > 39) {    // 인터럽트가 발생할 때마다  
      icount = 0;
      clock_cent++;
   }

   if (beep == 1) {      // BEEP 가 설정되어 있으면 피에조 부져를 
      if (piezo == 1) {  // ON/OFF 합니다. 
         piezo = 0;
      } else {
         piezo = 1;
      }
   }
}

void delay() {
/********************************************************************
* for 문을 이용한 간단한 딜레이 루틴입니다.                        *
********************************************************************/
unsigned int i;
       for (i = 0; i < 20000; i++) ;
}

void clock_run() {
/********************************************************************
* 시간을 카운트 합니다.                                            *
********************************************************************/
//
   if (clock_cent > 99) {
      clock_cent = 0;
      clock_second++;
   }
//
   if (clock_second > 59) {
      clock_second = 0;
      clock_min++;
   }
//
   if (clock_min > 59) {
      clock_min = 0;
      clock_hour++;
   }
//
   if (clock_hour > 23) {
      clock_hour = 0;
   }
}

void fnd_display(unsigned char hour, unsigned char min, bit a) {
/********************************************************************
* FND 에 시간을 표시 합니다.                                       *
* 비트 변수 a 는 시 분 사이의 LED 의 점멸 상태를 선택합니다.       *
* a = 0: Low, High LED 를 끕니다.                                  *
* a = 1: Low, High LED 를 점멸합니다.                              *
********************************************************************/
unsigned char t, v;
//
   t = min % 10; 
   t = fnd_pattern[t];
//
   if (alarm == 1) {
      t = t & 0x7F;
   }
  _p3 = t;
//
   t = min / 10;
   t = fnd_pattern[t];
//
   if (a == 0) {
      if ((clock_cent < 50) || (clock_second > 30)) {   // High LED Blink
         t = t & 0x7F;
      }
   }
  _p2 = t;
//
   if (hour < 12) {
      led_am = 0; led_pm = 1;     // AM Led 점등
      v = hour;
   } else { 
      led_am = 1; led_pm = 0;     // PM Led 점등
      v = hour - 12;
   }
//
   if (v == 0) {                  // 0 시는 12 시로 교정하여 표시 
      v = 12;
   }
// 
   t = v % 10;
   t = fnd_pattern[t]; 
//
   if (a == 0) {
      if ((clock_cent < 50) || (clock_second <= 30)) {   // Low LED Blink
         t = t & 0x7F;
      }
   }
  _p0 = t;
//
   t = v / 10;
//
   if (t == 1) {
      hour10 = 0;
   } else {
      hour10 = 1;
   }
//
}

void alarm_proc() {
/********************************************************************
* 알람 시각을 설정합니다.                                          *
* Hour, MIn 스위치를 사용하여 알람 시각을 설정합니다.              *
* SAVE 키를 누르면 알람 시각이 저장 됩니다.                        *
* Alarm 키를 누르면 알람 모드가 해제 됩니다.                       *
********************************************************************/
   fnd_display(alarm_hour, alarm_min, 1);
   delay();

   while(1) {

      fnd_display(alarm_hour, alarm_min, 1);
      if (sw_hour == 0) {
         alarm_hour++;
         if (alarm_hour > 23) {
            alarm_hour = 0;
         }
         delay();
      }
      if (sw_min == 0) {
         alarm_min++;
         if (alarm_min > 59) {
            alarm_min = 0;
         }
         delay();
      }
      if (sw_save == 0) {      // Save 키 검사
         alarm = 1;            // 알람 모드 설정
         break;
      }
      if (sw_alarm == 0) {     // Alarm 키 검사
         alarm = 0;            // 알람 모드 해제
         break
      }
   }
   delay();
}
   
////////////////////////////////
void main() {
/********************************************************************
* CPU가 리셋되면 main()함수가 처음으로 실행됩니다.                 *
* Timer 0를 초기화하고 변수 값을 클리어 합니다.                    *
********************************************************************/
  _tmod = 0x02;           // Timer0 Mode 2 (Auto Reload Mode)
  _th0 = 0x06;            // 12MHz 크리스탈에서 250 uSec 인터럽트 주기 
  _tr0 = 1;               // Timer 0 동작시작 
  _et0 = 1;           // 타이머  인터럽트 가능상태 설정   
  _ea = 1;           // 글로벌 인터럽트 가능상태 설정
 

댓글 0

조회수 464

등록된 댓글이 없습니다.

8051/PICHOME > 8051/PIC > 전체 목록

게시물 검색

2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2017
모바일버전으로보기