به نام خدا : آموزش ساخت شمارنده عدد در LCD – موضوع این پروژه avr که میخوام بگم آموزش کار با lcd کاراکتری هستش که اگه دوس ندارید این مطلب رو بخونیم میتونید پروژه رو از ته همین مطلب دانلودش کنید. الان انشاالله قراره که پروژه شمارش اعداد تو LCD رو بزارم؛ تو اینترنت یه سایتی همچین برنامه ای رو گزاشته بود ولی… جفت پروژه ها رو میزارم هم برا خودم رو و هم پروژه ای که در یکی از سایت ها هستش
آموزش ساخت شمارنده عدد در lcd
توضیح پایه های LCD
۱) VSS به زمین(قطب منفی منبع تغزیه) وصلش میکنیم و VDD رو هم به منبع ولتاژ ۵ ولت. (وقتی LCD میخواد کار کنه باید بهش منبع ولتاژ وصل کنی.)
۲) VEE هم برا فعال کردن درخشندگی LCD هستش. که به همراه یه مقاومت ۱K بای به زمین وصل کنی
(اگه روشن باشه ، LCD ما صفحه اش روشن تر میشه و اگه خاموش باشه ممکنه تو تاریکی نتونیم چیزای !!! داخل LCD رو بخونیم.====>افتاد ؟؟ )
۳) D0 تا D7 هم پایه های ارسال اطلاعات هستن که اکثرا اگه توجه کرده باشید فقط از D4 تا D7 استفاده میکنن و D0 تا D3 رو کاری بهش ندارند .
علت این موضوع اینه :
اگه بخوای اطلاعات به صورت ۸ بیتی ارسال بشه باید از کل این پایه ها ( D0 تا D7 ) استفاده کنی.
اگه هم بخوای به صورت ۴ بیتی>> باید از پایه های D4 تا D7 استفاده کنی
و چون تو حالت ۴ بیتی مقدار سیم کشی کمتره معمولا از این حالت استفاده میکنن.
۴) RW : اگه این پایه ۰ باشه: نوشتن /اگه ۱ باشه: خواندن
==> در این مورد چیزی بیش از این من تو اینترنت ندیدم ولی به نظرم : اگه ۱ باشه ما میتونیم بخونیم که تو LCD چی چی نوشته شد و اگه صفر باشه میتونیم تو LCD چیز میز بنویسیم.
۵) E : برا فعال کردن LCD هستش.
۶) RS : تو کتاب که خونده بودم نوشته بود : اگه این پایه ۰ باشه: ورودی فرمان/اگه ۱ باشه: ورودی کاراکتر
====>به نظرم و به نظر دوستان! تفسیرش این میشه ^_^ :
ورودی فرمان میشه ، یعنی اینکه میتونی مکان ، مکان نما رو تایین کنی ، یا مثلاً دستور پاک کردن صفحه نمایش رو بفرستی و …
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include <mega16.h> //کتاب خانه میکرو #include <delay.h> // کتاب خانه تاخیر زمانی #include <lcd.h> //کتاب خانه LCD #include <stdlib.h> //کتاب خانه تبدیل انواع متغییر به همدیگه /////////////////////////////////////// #asm .equ __lcd_port=0x15 ; #endasm /////////////////////////////////////// unsigned int i; /////////////////////////////////////// void main(void) { char buffer[]; lcd_init(16); // اینم از اون کد های واجب هستش که تو //هر برنامه ای که ال سی دی باشه این کد هم باید باشه //و اون عدده تعداد ستون های ال سی دی ما هستش lcd_putsf("www.DMF313.ir"); // نمایش این رشته (آدرس سایتم) در lcd delay_ms(300); //مدت زمانی کهرشته بالا نمایش داده میشود //و سپس توسط کد زیر از صفحه نمایش پاک میشود. lcd_clear(); lcd_gotoxy(0,0); // رفتن به مختصات x=0 و y=0 ال سی دی خودمون for(i=0; i<9999; i++) { lcd_clear(); //پاک کردن صفحه نمایش itoa(i,buffer);// تبدیل متغییر i به رشته و ذخیره در آرایه بافر // کتاب خانه این تابع #include <stdlib.h> میباشد lcd_putsf("number is : "); lcd_puts(buffer); delay_ms(100); } while (1){ }; } |
توضیح کد های این پروژه avr
خط ۶ و ۸ که شروع و پایان کد نویسی به زبون اسمبلی هست.
و با خط ۷ ما تعیین میکنیم که میکرو قراره به کدوم پایه ی میکرو وصل بشه.(به PORTA–PORTB و… به کدوم میخواد وصل بشه)
که با توجه به کد های زیر میفهمیم که ما تو این پروژه lcd خودمون رو به پورت سی وصل کردیم.
۰x1B= پورت A
۰x18=پورت B
۰x15=پورت C
۰x12=پورت D
مهمان
سلام عزیز میخواستم بخاطر سایتت ازت تشکر کنم خیلی سایت خوب با صفایی دارید با تمشم خیلی حال میکنم دمتون گرم
مهمان
ببخشید اگر بخوام معکوس بشمره دستورش چیه ؟ ممنون میشم بهم بگید
مهمان
اگر بخام 0 تا 9 به صورت چشمک زن نمایش بده پجوریه؟
مهمان
سلام ،این شمارنده از چند تا چند هست؟؟
شمارنده از صفر تا ۱۵ چه جوری میشه؟
مهمان
من یه آرایه دارم به این صورت
number[10]={0,9,1,2,7,4,3,0,8,2,5}
که مشاهده می کتید یه شماره موبایل هستش
میخوام این شماره رو روی ال سی دی نمایش بدم حالا باید چی کار کنم؟
خواهش می کنم کمکم کنید
نویسنده این مطلب
سلام
خب چون دیتا های بالا عدد هستن بخوای نمایششون بدی چرت پرت نمایش داده میشه باید یه کاراکتر تبدیلشون کنی – برای این کار به همشون 48 واحد اضافه کن-بعد بیا از تابع نمایش کاراکتر در lcd استفاده کن.
مهمان
سلام جناب مهنذس.ببخشید من مشابه کد شمارو نوشتم ولی کامپایلرم دو تا ایراد میگیره
Error: undefined symbol ‘buffer
ایا میتونیذ کمکم کنید؟’
نویسنده این مطلب
سلام
میگه buffer رو تعریف نکردی
مهمان
سلام میشه یک کمکی به من کنین، استاد دانشگاه سوالی به من داده که کدش رو میزارم، در انتهاس سوال گفته که کد باید طوری باشه که علاوه بر نشون دادن کلمات همزمان شمارش انجام بشه، ولی منهر کاری میکنم تو پروتوس رو ال سی دی اول کلمات پاک میشن بعد شروع به شمارش میکنه.. ممنون میشم راهنماییم کنین.
#include
#include
#include
#include
#include
#include
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
unsigned int i;
void main(void)
{
char buffer[32];
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf(“hello”);
lcd_gotoxy(9,0);
lcd_putsf(“welcome”);
for(i=0; i<99; i++){
lcd_clear();
lcd_gotoxy(6,0);
itoa(i,buffer);
lcd_puts(buffer);
delay_ms(100);
}
while(1){
}
}
مهمان
سلام روزتون بخیر میشه ساخت رقم شمارنده عدد lcd با کلید مثال بزنید…
مهمان
اقا دمتگرم باز مشکلم حل شد
مهمان
سلام

خدا قوت
مدیر گروهمون گفته یه کانتر بسازم ک تعداد ورود و خروج و افراد داخل یه اتاق رو تا ۹۹۹ تو lcd نمایش بده
نمیدونم باید از کجا شروع کنم
اگ میشه لطف کنین راهنماییم کنین
سپاس
نویسنده این مطلب
سلام
اگه کلا کار با میکرو رو بلد نیستی – برو آموزش های aVR که تو سایت هستش رو بخون – البته هر موضوعی بدردت نمیخوره – مثلا ADC فعلا بدردت نمیخوره و …
بعد برو مطلب LCD از منو Component رو پیدا کن و بخون و بعد چند تا پروژه ساده باهاش ببند
بعد برو مطلب تایمر avr رو بخون و بعد بشین پروژت رو بنویس
اگه برنامه نوییسی سی هم بلد نیستی که اول برو اونو بخون و یاد بگیر.
مهمان
سلام داداش میشه برای glcd هم کد بنویسی یا کمکم کنی خیلی گیر کردم
باید بگم از lcd nokia 5110 استفاده میکنم
نویسنده این مطلب
سلام
اگه منظورت از glcd همون ks0108 هستش که مطلب آمزوش و پروژه ازش تو سایت زیاده.
هیمن ۵۱۱۰ هم فک کنم آموزشش تو سایت باشه
مهمان
سلام مهندس سایت خوبی دارید فقط من طرز کار کتابخونه stdlib.h رو نفهمیدم و کاربردشو تو برنامه اگه امکانش هس بیشتر توضیح بدید..ممنون
نویسنده این مطلب
سلام
تابع itoa تو کتابخونه فوق قرار داره – لذا مجبور شدم فراخونیش کنم – تابع itoa هم برا ذخیره عدد اعشاری در یه رشته هستش.
مهمان
عالی هستی پسر
مهمان
سلام-با تشکر از سایت خوبتون
میخواستم اگه میشه در مورد مشکلم کمکم کنید:lcd من یک ردیف مستطیل پر رنگ نشون میده
نویسنده این مطلب
سلام
https://dmf313.ir/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AC%D8%A7%D9%85%D8%B9-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-lcd-%DA%A9%D8%A7%D8%B1%D8%A7%DA%A9%D8%AA%D8%B1%DB%8C/
مهمان
نویسنده این مطلب
تو اون لینک مشکل علی آقا رو گفتم دیگه – این شکلکا دیگه برا چیه؟
مهمان
سلام سایت خیلی عالی درست کردی مهندس خسته نباشید
یه سوال دارم
من چه جوری میتونم عمل loading یا پر شدن رو از اول تا اخر lcd بنویسم؟
نویسنده این مطلب
سلام
والا دقیقا متوجه منظورتون نشدم – اگه ریز توضیح بدید یا عکسی فیلمی چیزی بدید ممنون میشم.
مهمان
سلام لازم نیس که حتما اون برنامه اسمبلی برا تعریف پورت باشه میتونیم از قسمت کتابخانه و سربرگ ال سیدی کارکتری پرتمونو مشخص کنیم درسته؟
نویسنده این مطلب
سلام
بله میتونید از کتابخونه Alcd استفاده کنید – از کدویزارد نسخه های جدید کدویژن استفاده کنید به صورت خودکار از همین تابع استفاده میکنه
مهمان
خدا خیرت بده . آقا اگه میشه تو پروژه هایی که آموزشی گذاشتید ال سی دی و نمایشگرهایی که استفاده شده رو مدلش رو بفرمایید و اینکه میشه از انواع دیگه استفاده کرد یا اینکه باید تو کد دست برده بشه؟ ممنونم
نویسنده این مطلب
سلام
والا تموم lcd ها lcd کاراکتری هستن و تو سایت های خرید قطعه بزنی lcd کاراکتری فقط یه نوع رو مشاهده میکنی……….تو فایل پروتئوس هم که ته مطلب پیوست کردم رو اگه ببینی متوجه میشی مدل lcd چی هستش.
مهمان
عاااااااااااااااااااااااالی دممممممممممممممممممممت گرررررررررررررم
نویسنده این مطلب
سلام با توجه به تاخیر در پاسخگویی آیا الان مشکلت حل شده یا نه؟
مهمان
دوست عزیز سلام
واقعا ممنون بخاطر آموزش هات
میشه این پروژه رو با اینتراپت هم توضیح بدی نمیدونم چطوری با اینتراپت کار کنم
ی اینتراپت بزنم شمارنده صعوذی بره بالا و ی اینتراپت زدم نزولی شه
ممنون
نویسنده این مطلب
سلام
میخوام کم کم بزارم تو سایت با وقفه
ولی فعلا میتونید مطلب وقفه ی توی سایت رو بخونید مشکلی بود در خدمتیم
نویسنده سایت
سلام و خسته نباشید

درباره خط 30 اگه بشه توضیح بیشتری بدید تا من که از برنام نویسی هیچی نمیفهمم یک چیزی بفهمم
نویسنده این مطلب
سلام
تو خط ۱۰–متغییر i از نوع int هستش
unsigned int i;
تو خط ۱۴ هم buffer یک آرایه هستش
char buffer[];
حالا برا نمایش متغییر i در lcd به وسیله تابع
lcd_puts();
باید ابتدا i رو به آرایه تبدیل کرده و داخل buffer ذخیره کرده که این کار رو تابع زیر انجام میده
itoa(i,buffer);
که این تابع برای کتابخونه زیر هستش
#include
مهمان
سلام اون حلقه بی نهایت اخر برای چی نوشتی
نویسنده این مطلب
سلام
گزاشتم تا برنامه بیکار نمونه….برش داری هم اشکالی نداره
مهمان
توی این پروژه فرق بین lcd_putsf و lcd_putsچیه کی و کجا باید از این دو تا استفاده کنیم؟
نویسنده این مطلب
lcd_putsf : نمایش متن ذخیره شده تو حافظه فلش
lcd_puts : تو ram
——————————–
موقع ارور ها
مهمان
سلام 1 ساعت کد برنامه که نوشتید ، بالا پایین میکنم چرا آخه چرا این بازی ها رو در میاره این کامپایلر ….
اگر دیدی توی ال سی دی چرت پرت نشون میده ….. فقط کافیه char buffer[];
مقدار دهی کنید char buffer[20
];
کارت درست میشه
مهمان
ببخشید اگ بخوام یه شمارنده درست کنم از صفر تا 59 بشمره ..میشه راهنماییم کنید
نویسنده این مطلب
اگه کد میخوای باس بگم نه