پروژه ساعت دیجیتال با میکروکنترلر ATMEGA64 و LCD 2*16 و همچنین کی پد 4*4 برای تنظیمات ساعت یک پروژه کاربردی هست که با کریستال ساعت 32768 هرتز کار میکنه و در نرمافزار پرتئوس شبیه سازی شده.
شماتیک پروژه ساعت دیجیتال با میکروکنترلر 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");
برای ایجاد زمان یک ثانیه از قابلیت اتصال کریستال ساعت تایمر 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
منبع: میکرودیزاینرالکترونیک