آموزش راه اندازی lcd کاراکتری با میکروکنترلر AVR + تابلو روان
امروز در آموزش راه اندازی lcd کاراکتری با میکروکنترلر AVR می خواهیم یاد بگیریم که چطور تو پروژه هامون، نوشته دلخواهمون رو روی lcd نمایش بدیم.
بطور کلی میکرو با کمک lcd میتونه با ما صحبت کنه پس با یادگیری نحوه راه اندازی lcd ما میتونیم کلی کار با حال مثل : نمایش مقادیر سنسور های مختلف ، ساخت منو (برای کنترل کارکرد دستگاه) و … رو انجام بدیم 🤩.
وسایل مورد نیاز در آموزش راه اندازی lcd کاراکتری با میکروکنترلر AVR :
[icon name=”tv” style=”solid” class=”” unprefixed_class=””] یک عدد lcd2*16
[icon name=”tv” style=”solid” class=”” unprefixed_class=””] یک برد برد (bred board )
[icon name=”tv” style=”solid” class=”” unprefixed_class=””] تعدادی سیم برد برد
[icon name=”tv” style=”solid” class=”” unprefixed_class=””] رئوستا(پتاسیومتر)
[icon name=”tv” style=”solid” class=”” unprefixed_class=””] میکروکنترلرAtmega32
خب حالا بریم 🚶♀️ سراغ وسایلی که در راه اندازی lcd کاراکتری و ساخت تابلو روان کاربرد دارند تا بیشتر با هاشون آشنا شیم .
: lcd2*16 [icon name=”cog” class=”” unprefixed_class=””]
همانطور که در تصویر هم می بینید، این lcd ها دارای 16 پایه هستند و با اتصال به پین های میکرو بوسیله سیم جامپر ،دیتا مورد نظر ما را از میکرو دریافت و نمایش می دهند.
[icon name=”cog” class=”” unprefixed_class=””] پتاسیومتر :
در تصویر بالا انواع پتانسیومتر و رئوستا را می بینید. اما اگه تازه پا به دنیا دنیای الکترونیک گذاشته باشید ممکن براتون سئوال پیش بیاد که پتاسیومتر چیه؟
پتاسیومتر چیست؟
مقاومت متغییر یا پتاسیومتر در واقع از 2 مقاومت متغییر تشکیل شده استو دارای 3پایه است، و پایه وسط آن مقاومت را کم و زیاد می کند. این قطعه وظیفه محدود كردن جريان و ايجاد ولتاژ را دارد وواحد سنجش این قطعه همانند مقاومت اهم و آن را با علامت Ω نمایش میدهند. دراثرکم و زیاد کردن مقاومت در پتاسیومتر، نور lcd هم زیاد وکم میشه.
بیاین اول باهم شکل زیر را برسی کنید، و بعد می ریم سراغ اتصالات مدار که جدول براتون آوردم.
VSS | GND |
VDD | VCC |
VEE | پایه وسط رئوستا (این همان پایه ای که مقاومت داخل رئوستا راکم وزیاد میکند) |
RS( انتخاب رجیستر) | PA.1 |
RW( انتخاب نوشتن با خواندن ) | PA.2 |
E (فعالسازی) | PA.3 |
D4 | PA.4 |
D5 | PA.5 |
D6 | PA.6 |
D7 | PA.7 |
A | VCC |
K | GND |
برای شروع ابتدا یک پروژه داخل کدویژن میسازیم. در تصویر زیرتنظیمات لازم برای راه اندازی lcd در نرم افزار کدویژن رو براتون آوردم. تنظیمات سایر بخش ها رو در آموزش های قبلی بهش اشاره کردم پس دراینجا به توضیح برخی نکات درباره تنظیمات مربوط که قبلا نگفتیم میپردازیم.
یادتون نره که بعد از اتصال پایه ها lcd به میکرو، حتما تغذیه های میکرو را متصل کنید.حالا میریم سراغ نوشتن کد های [icon name=”code” class=”” unprefixed_class=””] برنامه…
1.پروژه نوشتن کلمه robot afzar روی lcd :
[icon name=”circle-o” class=”” unprefixed_class=””] دستور :
#include <mega32.h>
.که شامل توابع این میکرو کنترلر است رابه برنامه فرا میخوانیم Atmega32 را با این دستور کتابخانه
#include <mega32.h>
[icon name=”circle-o” class=”” unprefixed_class=””] دستور :
#include <alcd.h>
با این دستور تمام توابع مربوط به lcd را فرا میخوانیم.
#include <alcd.h>
[icon name=”circle-o” class=”” unprefixed_class=””] دستور :
#include <delay.h>
این دستور تابع تاخیررا به برنامه فرامیخوان.کاراین تابع ایجاد وقفه دربرنامه است.
#include <delay.h>
[icon name=”circle-o” class=”” unprefixed_class=””] دستور :
lcd_init(16);
این دستور نوع lcd ما را مشخص میکند که در اینجا 2*16است
void main(void) { lcd_init(16);
[icon name=”circle-o” class=”” unprefixed_class=””] دستور:
while(1) {
دستورwhile یک حلقه تکرار پذیر .
while (1) {
[icon name=”circle-o” class=”” unprefixed_class=””] دستور:
lcd_clear();
این دستور هرچه روی lcd است پاک میکند .
lcd_clear(); //lcd فرمان پاک کردن
[icon name=”circle-o” class=”” unprefixed_class=””] دستور:
lcd_gotoxy(2,0);
این دستور به میکرو میگوید روی کدام سطر و ستون lcd نوشتن را شروع کند،برایدرک بهتر ترتیب نوشتن اعداد به تصویر زیر دقت کنید.
این دستور یکی از کتابخانه های lcdاست
lcd_gotoxy(2,0); //lcd سطر وستوني که ميکرو شروع ميکند به نوشتن روي
[icon name=”circle-o” class=”” unprefixed_class=””] دستور:
lcd_putsf(“robotafzar”);
این دستور به میکرو فرمان میدهد کلمه مد نظرمان را روی lcd نمایش بده.
این دستور یکی از کتابخانه های lcd است.
lcd_putsf("robotafzar"); //کلمات داخل را نمايش ميدهد
[icon name=”circle-o” class=”” unprefixed_class=””] دستور:
delay_ms(500);
.با این دستور تابع تاخیر یک وقفه500میلی ثانیه ای ایجاد میک
delay_ms(500); } } }
source کامل پروژه:
برای دانلود کامل برنامه و فایل های پروژه به صورت رایگان به پایین صفحه مراجعه کنید.
delay_ms(500); } } } #include <mega32.h> #include <alcd.h> #include <delay.h> void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Port C initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); // Port D initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00); TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Disconnected // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0<<AS2; TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20); TCNT2=0x00; OCR2=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0); // External Interrupt(s) initialization // INT0: Off // INT1: Off // INT2: Off MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00); MCUCSR=(0<<ISC2); // USART initialization // USART disabled UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); SFIOR=(0<<ACME); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); // SPI initialization // SPI disabled SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0); // TWI initialization // TWI disabled TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE); // Alphanumeric LCD initialization // Connections are specified in the // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTA Bit 1 // RD - PORTA Bit 2 // EN - PORTA Bit 3 // D4 - PORTA Bit 4 // D5 - PORTA Bit 5 // D6 - PORTA Bit 6 // D7 - PORTA Bit 7 // Characters/line: 16 lcd_init(16); while (1) { lcd_clear(); //lcd فرمان پاک کردن lcd_gotoxy(2,0); //lcd سطر وستوني که ميکرو شروع ميکند به نوشتن روي lcd_putsf("robotafzar"); //کلمات داخل را نمايش ميدهد delay_ms(500); } }
2.پروژه تابلو روان:
#include <mega32.h> #include <alcd.h> //توابع ال سي دي رافراميخوانيم #include <delay.h>
[icon name=”circle-o” class=”” unprefixed_class=””] دستور:
int i;
با این دستور متغییر i را از نوع int تعریف میکنیم.
int i; //متغييري که براي حرکت دادن حروف روي ال سي دي استفاده ميکنيم
void main(void) . . lcd_init(16); while (1) {
[icon name=”circle-o” class=”” unprefixed_class=””] دستور:
for( i=0;i<11;i++) {
این دستور حلقه for است.که داخل حلقه به این صورت است(گام حلقه;شرط حلقه;شروع حلقه)
{for( i=0;i<11;i++){ //دراينجا يک حلق داريم که مقدار اوليه اش 0 ويکي يکي زياد ميشه تا برسه به خونه 11
[icon name=”circle-o” class=”” unprefixed_class=””] دستور:
lcd_gotoxy(i,0);
. میریزیم lcd راروی i بااین دستورمتغییر
lcd_gotoxy(i,0); lcd_putsf("robotafzar"); delay_ms(500); lcd_clear(); } }
source کامل پروژه:
برای دانلود کامل برنامه و فایل های پروژه به صورت رایگان به پایین صفحه مراجعه کنید.
#include <mega32.h> #include <alcd.h> //توابع ال سي دي رافراميخوانيم #include <delay.h> int i; //متغييري که براي حرکت دادن حروف روي ال سي دي استفاده ميکنيم void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Port C initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); // Port D initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00); TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Disconnected // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0<<AS2; TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20); TCNT2=0x00; OCR2=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0); // External Interrupt(s) initialization // INT0: Off // INT1: Off // INT2: Off MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00); MCUCSR=(0<<ISC2); // USART initialization // USART disabled UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); SFIOR=(0<<ACME); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); // SPI initialization // SPI disabled SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0); // TWI initialization // TWI disabled TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE); // Alphanumeric LCD initialization // Connections are specified in the // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTA Bit 1 // RD - PORTA Bit 2 // EN - PORTA Bit 3 // D4 - PORTA Bit 4 // D5 - PORTA Bit 5 // D6 - PORTA Bit 6 // D7 - PORTA Bit 7 // Characters/line: 16 lcd_init(16); while (1) {for( i=0;i<11;i++){ //دراينجا يک حلق داريم که مقدار اوليه اش 0 ويکي يکي زياد ميشه تا برسه به خونه 11 lcd_gotoxy(i,0); //دراینجا متغییر i را داخل تابع میریزم //تاباهربار اضافه شدن iکلمه مدنظر رویlcdحرکت کند lcd_putsf("robotafzar"); /فرمان نوشته کلمه robot afzar روی lcd delay_ms(500); //ایجاد کردن تاخیر lcd_clear(); // lcdرا پاک کن } } }
📑جمع بندی:
در این آموزش چگونگی راه اندازی lcd کاراکتری با AVR رو برای ساخت تابلو روان را یاد گرفتیم.
کاربرد های آن در تبلیغات , در برد های آسانسور که برای راهنمایی طبقات استفاده می گردد.
و نیز می توان از آن بروی ساعت و یا برای نشان دادن دمای هوا کرد.
خب اینم از آموزش امروز امیدوارم که لذت برده باشید وشما هم پروژه رو بسازید و فیلمشو روی صفحه اینستگرام خودتون بزارید ، مارو تگ کنید و کپن تخفیف از ما بگیرید.
راستی یادتون نره ، حتما به اینستاگرام ماهم سربزنید 😉
_________ _________
- در صورت مشکل در لینک دانلود یا خود فایل حتما در بخش خرابی لینک برامون بنویسید تا در سریع ترین زمان رسیدگی کنیم
- توجه فرمایید که اعلام گزارش خربی باعث بهتر شدن خدمات ما به شما خواهد بود
- برای دریافت لینک دانلود یک بار ثبت نام کنید و به صورت مستقیم دانلود کنید
برای مشاهده لینک دانلود لطفا وارد حساب کاربری خود شوید!
وارد شویدپسورد فایل : robotafzar.com گزارش خرابی لینک
Oops! We could not locate your form.
درباره زهراخلیل نژاد
از زمانیکه دوره راهنمایی رو شروع کردم عاشق کمک کردن به انسانها برای داشتن یه زندگی راحت بودم . واز همون سنین با شرکت در کلاسهای رباتیک قدم به این دنیای جذاب و پر از شگفتی گذاشتم. . و هر بار با ساختن یک وسیله ، کاردستی و... ذوق و اشتیاق عجیبی رو تجربه کردم. به همین دلیل هم فکر میکنم اگر هر کس یک رشته رو با علاقه و بطور تخصصی ادامه بده . میتونه کلی ایده خلاق ارائه بده و دنیا رو به جای زیباتری برای زندگی تبدیل کنه .
نوشته های بیشتر از زهراخلیل نژاد
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.