پروژه ساعت دیجیتال با میکروکنترلر ATMEGA64 و LCD 2*16

0
147
پروژه ساعت دیجیتال با میکروکنترلر ATMEGA64 و LCD 2*16
پروژه ساعت دیجیتال با میکروکنترلر ATMEGA64 و LCD 2*16

پروژه ساعت دیجیتال با میکروکنترلر ATMEGA64 و LCD 2*16 و همچنین کی پد 4*4 برای تنظیمات ساعت یک پروژه کاربردی هست که با کریستال ساعت 32768 هرتز کار می‌کنه و در نرم‌افزار پرتئوس شبیه سازی شده.

شماتیک پروژه ساعت دیجیتال با میکروکنترلر ATMEGA64 و LCD 2*16

 

پروژه ساعت دیجیتال با میکروکنترلر ATMEGA64 و LCD 2*16
پروژه ساعت دیجیتال با میکروکنترلر ATMEGA64 و LCD 2*16

برنامه‌نویسی میکروکنترلر در محیط کدویژن انجام شده و از تایمر 0 میکروکنترلر ATMEGA64 برای ساعت دقیق با کریستال 32768 هرتز استفاده کردیم. در شکل بالا شماتیک مدار را می‌بینید حالا بریم سر برنامه نویسی میکروکنترلر.

برنامه‌نویسی پروژه ساعت دیجیتال با میکروکنترلر

کتابخونه‌های مورد نیاز:

#include <mega64a.h>
#include <delay.h>
#include <alcd.h>
#include <stdio.h>
#include "keypad.h"

از متغیر‌های زیر برای ذخیره ساعت، دقیقه و ثانیه استفاده می‌کنیم:

unsigned minute,hour,second;

برای راه‌اندازی LCD 2*16 از کتابخونه خود کدویژن استفاده می‌کنیم:

lcd_init(16);
lcd_clear();
lcd_putsf("Melec.ir");

 

پروژه ساعت دیجیتال با میکروکنترلر ATMEGA64 و LCD 2*16
پروژه ساعت دیجیتال با میکروکنترلر ATMEGA64 و LCD 2*16

برای ایجاد زمان یک ثانیه از قابلیت اتصال کریستال ساعت تایمر 0 استفاده می‌کنیم.

برای فعال سازی تایمر در این حالت رجیستر‌ها را اینطوری تنظیم می‌کنیم:

ASSR=0x08;
TCCR0=0x05;
TCNT0=0x00;
OCR0=0x00;
TIMSK=0x01;

و همچنین داخل روتین وقفه اینطوری می‌نویسیم:

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
if(second==59){
second=0;
if(minute==59){
minute=0;
if(hour==23)
hour=0;
else
hour++;
}
else
minute++;
}
else
second++;
}

برای نمایش ساعت روی ال سی دی هم با تابع sprintf ساعت، دقیقه و ثانیه را فرمت‌بندی می‌کنیم و روی #ال_سی_دی نشون می‌دیم

sprintf(lcd_buffer,"Clock: %d:%d:%d",hour,minute,second);
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);
delay_ms(50);

برای اسکن کی پد از کتابخونه keypad.h که خودم نوشتم استفاده می‌کنیم و قسمت تنظیمات را با دریافت اعداد از کی پد تنظیم می‌کنیم.

#include 
#include 
#include 
#include 
#include "keypad.h"

unsigned minute,hour,second;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
    if(second==59){
      second=0;
      if(minute==59){
      minute=0;
      if(hour==23)
      hour=0;
      else
      hour++;
      }
      else
      minute++;
      }
      else
      second++; 
}
 void setting(void); 
 unsigned char get_keypad(void);   
 unsigned char get_number(void); 
void main(void){
        char lcd_buffer[17];

ASSR=0x08;
TCCR0=0x05;
TCNT0=0x00;
OCR0=0x00;


TIMSK=0x01;


lcd_init(16);
lcd_clear();
lcd_putsf("Belec.ir");
delay_ms(1);
lcd_gotoxy(0,1);
lcd_putsf("** ***");
delay_ms(1000);
  #asm("sei")                            
//  setting();
  while(1){
   sprintf(lcd_buffer,"Clock: %d:%d:%d",hour,minute,second);
      
      lcd_gotoxy(0,0);
      lcd_puts(lcd_buffer);
      delay_ms(50);     
       if(get_keypad()==13){
             setting();            
             } 
  }
}


  ///setting 
  void setting(void){
  unsigned char buff[16];
  lcd_clear();
  lcd_putsf("set system Time");
  lcd_gotoxy(5,1);
  sprintf(buff,"??:%d",minute);
  lcd_puts(buff); 
   do{  
   lcd_gotoxy(0,1);
   lcd_putsf("  ");
   hour=get_number();
   }while(hour>23);
   lcd_clear();  
    
  lcd_putsf("set system Time");
  lcd_gotoxy(5,1);
  sprintf(buff,"%d:??",hour);
  lcd_puts(buff); 
   do{  
   lcd_gotoxy(0,1);
   lcd_putsf("  ");
   minute=get_number();
   }while(minute>59);
   lcd_clear(); 

  }

 

فیلم عملکرد پروژه ساعت دیجیتال با میکروکنترلر ATMEGA64 و LCD 2*16

 

 

منبع:  میکرودیزاینرالکترونیک

 

مطلب قبلیسيستم قرائت كنتور با استفاده از ZigBee
مطلب بعدیتنظیم ضخامت خطوط در PCB آلتیوم دیزاینر

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید