داشتم تو فایل هام میگشتم که دیدم قبلا یه کتابخونه خوب برای این LCD ها نوشتم و گفتم اینجا هم بزارم و تا بقیه دوستان استفاده کنند.این برنامه با avr studio و به زبان سی نوشته شده است.
این کتابخونه هم میتونه از طریق سریال و هم از طریق موازی LCD ها رو راه اندازی کنه:
روش موازی:
در این روش فقط از 6 تا پایه ی میکرو استفاده شده.تو خیلی از موارد پیش اومده به خاطر استفاده از LCD دیگه نمیتونستیم از یه سری پایه ها(مثلا خروجی تایمر) استفاده کنیم. چون حتما پایه ها باید پشت سر هم می بودند. تو این کتابخونه هیچ لزومی برای پشت سر هم بودن بودن پایه ها نیست و حتی میتونید 4 پایه دیتا رو روی یه پورت و 2 تا پایه کنترلی رو روی یه پورت دیگه قرار بدید. برای استفاده از حالت موازی باید متغیری از جنس PARALLEL_LCD توی برنامه اضافه کنید.(بسته به نوع برنامه سراسری یا محلی)
بعد باید زیر عضو های این متغیر رو مقدار بدید به صورت زیر:
PARALLEL_LCD test; //تعریف متغیر
test.ctrl_port=&PORTD; //تعیین پورت کنترلی(rsو E)
test.data_port=&PORTB; //تعین پورت دیتا
test.E=6; //شماره بیت پورت که فعال ساز به اون وصل شده
test.RS=7; //شماره بیت پورت که این پایه به اون وصل شده
test.LSB0=7; //شماره بیت پورت که این پایه به اون وصل شده
test.LSB1=4; //شماره بیت پورت که این پایه به اون وصل شده
test.LSB2=5; //شماره بیت پورت که این پایه به اون وصل شده
test.LSB3=2; //شماره بیت پورت که این پایه به اون وصل شده
همون طور که میبینیدهیچ لزومی برای پشت سر هم بودن پایه ها و یا ثابت بودن پورت ها نیست. اگر نیاز به دو تا LCD داشتید یک متغیر دیگه تعریف کنید و به اون هم مقادیر دلخواه رو بدید.
و اما توابع:
همه توابع هم نام با توابع کتابخونه کد ویژن هستند ولی پسوند _PAR به آخر اون ها اضافه شده و همیشه به عنوان اولین آرگومان اون متغییری که در بالا تعریف شد رو میاریم. تابع init یه فرق کوچیکی داره که :
که منظور از تست همون متغیر بالاست و مد اشاره داره به حالت مکان نما که هر کدوم از مقادیر زیر میتونه باشه:
NO_CUR
LINE_CUR
BLOCK_CUR
که هر کدوم کاربردش معلومه!
بقیه توابع هم فرق خاصی ندارند از نظر کاربرد و خودشونم شامل اینان:
void lcd_clear_PAR(PARALLEL_LCD);
void lcd_init_PAR(PARALLEL_LCD,unsigned char mod);
void lcd_putchar_PAR(PARALLEL_LCD lcd,unsigned char charr);
void lcd_puts_PAR(PARALLEL_LCD lcd,char *str);
void lcd_putsf_PAR(PARALLEL_LCD lcd,const char *str);
void lcd_gotoxy_PAR(PARALLEL_LCD ,unsigned char x,unsigned char y);
مثالی که همراهش گزاشتم کمک میکنه که راحت تر متوجه توابع بشید.
تو فایل شبیه سازی هم 2 تا LCD به صورت موازی و 2تا به صورت سریال به یه مگا 8 وصل شده!
فعلا خسته شدم. سریال رو نیم ساعت دیگه میگم.
سوالی بود در خدمتم!
http://www.4shared.com/rar/s1oFYo8C/LCD.html
این کتابخونه هم میتونه از طریق سریال و هم از طریق موازی LCD ها رو راه اندازی کنه:
روش موازی:
در این روش فقط از 6 تا پایه ی میکرو استفاده شده.تو خیلی از موارد پیش اومده به خاطر استفاده از LCD دیگه نمیتونستیم از یه سری پایه ها(مثلا خروجی تایمر) استفاده کنیم. چون حتما پایه ها باید پشت سر هم می بودند. تو این کتابخونه هیچ لزومی برای پشت سر هم بودن بودن پایه ها نیست و حتی میتونید 4 پایه دیتا رو روی یه پورت و 2 تا پایه کنترلی رو روی یه پورت دیگه قرار بدید. برای استفاده از حالت موازی باید متغیری از جنس PARALLEL_LCD توی برنامه اضافه کنید.(بسته به نوع برنامه سراسری یا محلی)
بعد باید زیر عضو های این متغیر رو مقدار بدید به صورت زیر:
PARALLEL_LCD test; //تعریف متغیر
test.ctrl_port=&PORTD; //تعیین پورت کنترلی(rsو E)
test.data_port=&PORTB; //تعین پورت دیتا
test.E=6; //شماره بیت پورت که فعال ساز به اون وصل شده
test.RS=7; //شماره بیت پورت که این پایه به اون وصل شده
test.LSB0=7; //شماره بیت پورت که این پایه به اون وصل شده
test.LSB1=4; //شماره بیت پورت که این پایه به اون وصل شده
test.LSB2=5; //شماره بیت پورت که این پایه به اون وصل شده
test.LSB3=2; //شماره بیت پورت که این پایه به اون وصل شده
همون طور که میبینیدهیچ لزومی برای پشت سر هم بودن پایه ها و یا ثابت بودن پورت ها نیست. اگر نیاز به دو تا LCD داشتید یک متغیر دیگه تعریف کنید و به اون هم مقادیر دلخواه رو بدید.
و اما توابع:
همه توابع هم نام با توابع کتابخونه کد ویژن هستند ولی پسوند _PAR به آخر اون ها اضافه شده و همیشه به عنوان اولین آرگومان اون متغییری که در بالا تعریف شد رو میاریم. تابع init یه فرق کوچیکی داره که :
void lcd_init_PAR( test , mode)
که منظور از تست همون متغیر بالاست و مد اشاره داره به حالت مکان نما که هر کدوم از مقادیر زیر میتونه باشه:
NO_CUR
LINE_CUR
BLOCK_CUR
که هر کدوم کاربردش معلومه!
بقیه توابع هم فرق خاصی ندارند از نظر کاربرد و خودشونم شامل اینان:
void lcd_clear_PAR(PARALLEL_LCD);
void lcd_init_PAR(PARALLEL_LCD,unsigned char mod);
void lcd_putchar_PAR(PARALLEL_LCD lcd,unsigned char charr);
void lcd_puts_PAR(PARALLEL_LCD lcd,char *str);
void lcd_putsf_PAR(PARALLEL_LCD lcd,const char *str);
void lcd_gotoxy_PAR(PARALLEL_LCD ,unsigned char x,unsigned char y);
مثالی که همراهش گزاشتم کمک میکنه که راحت تر متوجه توابع بشید.
تو فایل شبیه سازی هم 2 تا LCD به صورت موازی و 2تا به صورت سریال به یه مگا 8 وصل شده!
فعلا خسته شدم. سریال رو نیم ساعت دیگه میگم.
سوالی بود در خدمتم!
http://www.4shared.com/rar/s1oFYo8C/LCD.html
دیدگاه