پروژه ساعت دیجیتال با میکروکنترلر 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("Melec.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
لطفا نظر خودتان را در قسمت دیدگاه ها مطرح کنید. برای سفارس طراحی پروژه میتونید از قسمت تماس با ما اقدام کنید. آموزش پروتئوس را از اینجا میتونید مطالعه کنید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
سلام
کتابخونه keypad.h رو از کجا دانلود کنیم؟
سلام، متاسفانه فایل keypad.h را یادمون رفته آپلود کنیم و الان چک کردم فایلش را پیدا نکردم اپلود کنم. اگر پیدا کردم اینجا منتشر و براتون ایمیل میکنم.
سلام لطفا واسه منم بفرستینش.باتشکر
سلام فایل keypad.h رو نذاشتین اگه میشه یه جوری بزارینش.ممنون میشم.
سلام، گشتم از داخل کدهای موجود این فایل را جمع کردم. این توابع را داخل کد اضافه کنید درست میشه.
دانلود فایل
کدهای زیر را اول فایل اضافه کنید :
flash unsigned char keytbl[16]={0x77, 0x7B, 0x7D, 0xB7,0xBB, 0xBD,
0xD7, 0xDB,0xDD, 0xEB, 0xE7, 0xED,0x7e,0xBE, 0xDE, 0xEE};
unsigned char get_keypad(void);
unsigned char get_number(void);
و کدهای ادامه را در آخر برنامه اضافه کنید و از اول برنامه keypad.h را حذف کنید.
سلام میشه این کد این برنامه رو کامل بزارین
سلام و عرض ادب
توابع get_keypad و get_number ارور تعریف نشده دارند ممنون میشم راهنمایی کنید
سلام من این کد رو زدم چراlcdچیزی نشون نمیده؟
سلام خسته نباشید . ببخشید میشه فایل پروتئوس این پروژه رو قرار بدین ی قسمت رو داخل پروتئوس نمیتونم خودم طراحی کنم . خیلی لطف میکنین اگه قرار بدین خیلی ممنون