Presentation is loading. Please wait.

Presentation is loading. Please wait.

Session 5.

Similar presentations


Presentation on theme: "Session 5."— Presentation transcript:

1 Session 5

2 مطالب این جلسه: معرفی 7segment ها و نحوه راه اندازی آنها
Lcd های کارکتری و نحوه ارتباط دهی با میکرو

3 نمایشگر های seven segment
 سون سگمنت ها از 8 دیود نوری تشکیل شده اند که یک سر دیود ها به هم وصل شده اند و به عنوان سر مشترک استفاده می شوند.دو نوع سگمنت وجود دارد : یک آند مشترک و دیگری کاتد مشترک. در سون سگمنت آند مشترک تمام سر های مثبت دیود ها به همدیگر وصل شده اند و در کاتد مشترک تمام سرهای منفی.

4 انواع segment

5 Common Anode در این سون سگمنت با صفر کردن هر پایه متصل به میکرو کنترلر سگمنت متناظر روشن خواهد شد

6 Common Cathode در این سون سگمنت با یک کردن هر پایه متصل شده به میکرو سگمنت متناظر روشن خواهد شد

7 Example-5 برنامه ای بنویسید که اعداد 0 تا 9 را بر روي 7segment آند مشترك به فاصله يك ثانيه نشان دهد . #include <mega32.h> #include <delay.h> unsigned char seven_seg_code(unsigned char num); void main(void) { unsigned char i; DDRA=0xff; while (1) for (i=0;i<10;i++) PORTA=seven_seg_code(i); delay_ms(1000); }

8 جدول کدهای آند مشترک num h g f e d c b a code 0xC0 1 0xF9 0xA4 2 0xB0
1 0xC0 0xF9 2 0xA4 3 0xB0 4 0x99 5 0x92 6 0x83 7 0xF8 8 0x80 9 0x98

9 Example-5 unsigned char seven_seg_code(unsigned char num) {
unsigned char out; switch(num) case 0:out=0xc0;break; case 1:out=0xf9;break; case 2:out=0xa4;break; case 3:out=0xb0;break; case 4:out=0x99;break; case 5:out=0x92;break; case 6:out=0x83;break; case 7:out=0xf8;break; case 8:out=0x80;break; case 9:out=0x98;break; } return out;

10 اتصال 7SEGMENT به میکرو کنترلر
سون سگمنت به روشهاي مختلفی به میکروکنترلر متصل می شود. روش اول این است که کدها را مطابق جدول به صورت مستقیم به سون سگمنت اعمال کنیم. روش دوم استفاده از IC های مبدل کد BCD به سون سگمنت است مانند:7448,7447, ,4055,MAX7219, MAX7221

11 مالتی پلکس کردن سون سگمنت ها
برای استفاده از چند سون سگمنت مالتی پلکس شده تمامی پایه های دیتا را روی یک پورت قرار داده و پایه های مشترک سون سگمنت ها را کنترل میکنیم.به این صورت که با فعال کردن آن پایه ی مشتر ک وارسال اطلاعات به سگمنت مورد نظر با توالی 20 میلی ثانیه .تمامی سگمنت ها باتوجه به خطای چشم انسان روشن به نظر میرسند.

12 مالتی پلکس کردن سون سگمنت ها
استفاده از تکنیک رفریشینگ

13 Practice -2 1- مثال قبل را براي يك 7seg كاتد مشترك پياده سازي كنيد.
2- مثال قبل را با استفاده از IC مبدل BCD به 7segment ، 7447 پياده سازي كنيد. 3- با استفاده از 7segment كاتد مشترك و IC ، 7448 يك شمارنده 0 تا 9 با فاصله زماني 1 ثانيه بسازيد. 4- برنامه اي بنويسيد كه عددي را از پورت B خوانده و برروي 7seg نمايش دهد. 5- يك شمارنده 0 تا 99 با فاصله زماني 1 ثانيه بسازيد

14 LCD

15 استفاده از LCD

16 صفحه نمایش LCD: یکی از اصلی ترین ابزارهای خروجی برای میکروکنترلرها صفحه نمایش LCD کاراکتری می باشد که به وسیله آن می توانیم کاراکترها و رشته های مختلف را نمایش دهیم!

17 نحوه اتصال سخت افزاری:

18 استLcd پایه زمین تغذیه ی
شماره پین نشانه نام توصیف 1 VSS Power supply استLcd پایه زمین تغذیه ی 2 VDD پایه مثبت تغذیه ی lcd است که به +5 تا4.5 ولت وصل میشود 3 VEE LCD Supply Voltage پایه درخشندگی lcd که توسط یک پتانسومتر 5k یا یک مقاومت 2.2k تنظیم میگردد 4 RS Register select اگر این پایه صفر باشددیتای وردی به پایه های d0تا d7فرمان کنترلی محسوب شده اگر این پایه یک باشد دیتای ورودی به پایه های d0تا d7 کارکتر برای چاپ میباشد 5 RW Read/Write اگر این پایه را صفر کنیم میتوانیم بر روی lcd بنوسیم و اگر این پایه را یک کنیم میتوانیم بافر lcd را بخوانیم نکته:در avr بیشتر موقعه ها این پایه را مستقیما به زمین وصل کرده و آن را در حالت نوشتن قرار میدهند 6 E Read Write enable پایه فعال ساز lcd است و نوع فعال سازی یک لبه پایین رونده میباشد 7 8 9 10 DB0 DB1 DB2 DB3 Data bus 0-7 بیت های اول تا چهارم دیتا باس lcd است نکته:در هنگامی که از مد 4 بیت استفاده کنیم این پایه ها باز می ماند 11 12 13 14 DB4 DB5 DB6 DB7 بیت های چهارم تا هشتم دیتا باس lcd است نکته:در هنگامی که از مد 4 بیت استفاده کنیم از این پایه ها استفاده میشود 15 A پایه آند led backlight که با یک مقاومتدر حدود 47 اهم به +5v وصل میشود 16 K پایه کاتد led backlight که به زمین وصل میشود

19

20 آشنایی با توابع کتابخانه ای lcd.h:
برای نمایش حروف و کلمات بر روی LCD راه های مختلفی وجود دارد که استفاده از نرم افزار CodeVision به دلیل در اختیار داشتن توابع کتابخانه ای لازم از بقیه بسیار آسان تر می باشد. این توابع از بیشتر LCDهای موجود در بازار، با تعداد ردیف و ستون های مختلف پشتیبانی می کند. void _lcd_ready(); void _lcd_write_data(unsigned char data); Unsigned char lcd_read_byte(unsigned char addr); unsigned char lcd_init(unsigned char lcd_columns); void lcd_clear(void); void lcd_gotoxy(unsigned char x, unsigned char y); void lcd_putchar(char c); void lcd_puts(char *str); void lcd_putsf(char flash *str);

21 آشنایی با توابع کتابخانه ای lcd.h:
توابع سطح پایین: 1. void _lcd_ready(); زمانی که این تابع فراخوانی شود، میکروکنترلر منتظر آماده شدن LCD برای دریافت اطلاعات می شود. 2. void _lcd_write_data(unsigned char data); از این تابع برای مقداردهی کردن ثبات درون LCD استفاده می شود. این ثبات برای کنترل تنظیمات LCD می باشد و به کمک این تابع تنظیمات LCD را تغییر می دهیم.برای مشاهده این تنظیمات به جدول صفحه بعد مراجعه کنید _lcd_ready(); //waits until the LCD module is ready for receiving data _lcd_write_data(0x0E); //نمایش روشن و مکان نما روشن

22 کد های فرمان :LCD

23 توابع کتابخانه ای lcd.h:
3. void lcd_write_byte(unsigned char addr, unsigned char data); بوسیله این تابع می توانیم یک متغیر Char را طوری مقداردهی کنیم که یک کاراکتر دلخواه شود، سپس بوسیله این تابع می توانیم آن را نمایش دهیم!به عنوان مثال برای فارسی نویسی در lcd میتواتد استفاده شود 4. Unsigned char lcd_read_byte(unsigned char addr); این تابع مشابه تابع قبل عمل می کند با این تفاوت که یک کاراکتر را از LCD می خواند و یک متغیر که شکل آن را دربر دارد را برمی گرداند. flash byte char0[8]={ 0b , 0b , 0b , 0b , 0b , 0b , 0b , 0b };

24 توابع کتابخانه ای lcd.h:
توابع سطح بالا: 1. unsigned char lcd_init(unsigned char LcdCollumns); برای مقدار دهی اولیه و تعیین تعداد ستون lcd این تابع در ابتدای برنامه فراخوانی می شود. این تابع مکان نمای چاپ را به خانه (0,0) می برد و همچنین مکان نمای چاپگر را غیر فعال می کند. Example: lcd_init(16)

25 توابع کتابخانه ای lcd.h:
2. void lcd_clear(); به وسیله این تابع صفحه نمایش پاک می شود! 3. Void lcd_gotoxy(unsigned char x, unsigned char y); مکان نمای چاپ را به (X,Y) مورد نظر می برد. بعد از فراخوانی این تابع کاراکترها از این نقطه شروع به چاپ شدن می کنند! X: ستون و Y: ردیف Lcd_gotoxy(4,2)

26 توابع کتابخانه ای lcd.h:
4. void lcd_putchar(char c); برای ارسال یک کارکتر به lcd استفاده می شود Example : lcd_putchar('a');

27 توابع کتابخانه ای lcd.h:
5. void lcd_puts(char *str); رشته str را که آرایه ای از کارکترها می باشد، را در موقعیت فعلی نمایش می دهد. توجه کنید که وقتی از این تابع استفاده می کنیم که رشته str درون RAM قرار داشته باشد. Example: sprintf(buffer, “tempreture= %d”, temp); lcd_puts(buffer);

28 توابع کتابخانه ای lcd.h:
6. void lcd_putsf(char flash *str); رشته str را که آرایه ای از کارکترها می باشد، را در موقعیت فعلی نمایش می دهد. توجه کنید که وقتی از این تابع استفاده می کنیم که رشته str درون Flash قرار داشته باشد. برای مثال: lcd_clear(); //صفحه نمای را پاک میکند lcd_init(16); //موقعیت مکان نما را در خانه 0و0 قرار داده و اعلام میکند 16 کارکتر داریم char c = ‘|’; //Declares char c, and sets its value to ‘|’ lcd_putchar(c); //Prints variable c on the LCD lcd_gotoxy(8,1); //Sets the new position for the cursor at (8,2) char str1[16] = “Hi…”; //Define a array of chars(string). Just like variable c This variable is stored in the microcontrollers RAM. lcd_puts(str1); //because str1 is stored in RAM we have to use lcd_puts() lcd_clear(); //Clears the LCD again lcd_putsf(“Hello Majid!”); //Prints “Hello Majid” on the LCD! we use lcd_putsf() because the string “AVR Rocks” is part of the code and wasn’t declared in the middle of the program.

29 نکته: همواه قبل از استفاده از کتابخانه lcd
نکته: همواه قبل از استفاده از کتابخانه lcd.h باید توسط دستورات اسمبلی زیر پورت متصل به lcd در برنامه معرفی شود.به عنوان مثال دستور زیر بیانگر اتصال lcd به portc است.(0x15 آدرس ریجستر پورت c است) #asm//شروع زبان اسمبلی .equ __lcd_port=0x15//معرفی پرت متصل به نمایشگر #endasm//پایان زبان اسمبلی حال مجاز هستیم کتابخانه lcd را در برنامه فراخوانی کنیم #include <lcd. h> Lcd_init(20);

30 Example - 7 در سطر اول ستون پنجم كاراكتر ‘a’ و در سطر دوم ستون اول عبارت “CodeVisionAVR” را بر روي يك LCD 2x16 نمايش دهيد. #include <mega16.h> #asm .equ __lcd_port=0x1B ;PORTA #endasm #include <lcd.h> #include <delay.h> void main(void) { lcd_init(16); while (1) lcd_clear(); lcd_gotoxy(5,0); lcd_putchar('a'); lcd_gotoxy(0,1); lcd_putsf("CodeVisionAVR"); delay_ms(200); }; }

31 Example-8 تابعي بنويسيد كه بصورت روان كلمه CodeVision را بر روي LCD نمايش دهد. #include <mega16.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x1B ;PORTA #endasm #include <lcd.h> #include <delay.h> void main(void) { int i; lcd_init(16); while (1) for (i=0;i<7;i++) lcd_clear(); lcd_gotoxy(i,0); lcd_putsf("CodeVision"); delay_ms(400); } };

32 توابع کتابخانه ای stdlib.h:
درون این کتابخانه ها چندین تابع پرکاربرد برای ساختن رشته ها و کار با آنها موجود می باشد. 1. itoa(int n,char *str); این تابع عدد 16 بیتی n را به صورت کارکتر های اسکی درآورده و در متغییر strکه به صورت رشته ای تعریف شده است می ریزد(عدد n بین 0 تا است) 2. Ltoa(long int n , char *str); این تابع عدد 32 بیتی n را به صورت کارکتر های اسکی درآورده و در متغییر strکه به صورت رشته ای تعریف شده است می ریزد(عدد n بین 0 تا است)

33 توابع کتابخانه ای stdlib.h:
3. void ftoa(float n, unsigned char decimals, char *str); این تابع عدد اعشاری n را به صورت کارکتر های اسکی در آورده و در متغییر رشته ایی str قرار می دهد. تعداد ارقامی که توسط این عدد اعشاری قرار است در رشته قرار داده شود توسط متغیر decimals مشخص می شود! 4. void ftoe(float n, unsigned char decimals, char *str); این تابع عدد اعشاری و توان دار n را (مثل (4.8e-6 را به صورت کارکتر های اسکی در آورده و در متغییر رشته ایی str قرار می دهد. تعداد ارقامی که توسط این عدد اعشاری قرار است در رشته قرار داده شود توسط متغیر decimals مشخص می شود! 5. rand(); این تابع یک عدد تصادفی بین صفر تا تولید میکند

34 Example-9 برنامه یک شمارنده 0 تا 999 را بر روی LCD بنویسید که به صورت صعودی شمار تا 999 را با تاخیر 1 ثانیه شمارش کند #include <mega32.h>//معرفی تراشه مورد نظر به کامپایلر #include <alcd.h>//استفاده از کتابخانه جدید کدویژن برای ال سی دی ها #include <delay.h>//چون از تابع تاخیری استفاده میکنیم باید کتابخانه ۀن به برنامه اضافه شود #include <stdlib.h>//چون از تابع itoa استفاده میکنیم باید کتابخانه مورد نظر به برنامه اضافه شود void main(void) { //در این مکان متغییر های محلی تعریف میشوند unsigned int count;//این متغییر برای شمارش تا 999 باید تا گنجایش داشته باشد char show[3];//این متغییر از نوع رشته ای با طول 3 برای نمایش یک عدد 3 رقمی تعریف میشود lcd_init(16);//پیکره بندی صفحه نمایش و بردن مکان نما به خط اول و ستون اول while (1) lcd_clear(); //تازه سازی صفحه نمایش lcd_putsf("counter:");//درج مستقیم عبارت مورد نظر بر روی ال سی دی for(count=0;count<1000;count++)// حلقه شمارشی برای شمارش اعداد تا 999 itoa(count,show);//تبدیل یک متغییر عددی معمولی به یک متغییر رشته ایی lcd_puts(show);//نمایش رشته مورد نظر بر روی ال سی دی delay_ms(1000);//تااخیر 1 ثانیه ایی lcd_gotoxy(8,0);//قرار دادن مکان نما در مکان مورد نظر برای تغییر اعداد بعد از یک ثانیه }

35 توابع کتابخانه ای stdio.h:
این کتابخانه همانند کتابخانه قبلی دارای توابع کاربردی زیادی می باشد که با اکثر آنها در قسمت ارتباط سریال در جلسات آینده آشنا خواهیم شد . اما برای کارکردن با lcd ها یک تابع بسیار قدرتمند این کتابخانه دارد که در زیر معرفی شده است. 1. void sprintf(char *str, flash char *str, arg1, arg2 , ); در آرگومان این تابع ابتدا نام مقصد که یک متغییر رشته ایی باید باشد ,ذکر میگردد . سپس قالب مورد نظرمان برای نمایش و در آخر نام متغییر هایی که محتوایشان باید به اسکی تبدیل شود , می آید برای اینکه تعیین کنید متغییر مورد نظر با چه فرمتی در قالب نمایش ظاهر شود ,از جدول صفحه بعد کمک بگیرید

36 کارکتر های کنترلی در تابع :printf
نحوه نمایش با فرمت بندی در خروجی سریال کارکتر کنترلی عدد صحیح علامت دار در مبنای 10 %I %d عدد صحیح بدون علامت در مبنای 10 %u نمایش عدد اعشاری به صورت علمی با حروف کوچک e %e نمایش عدد اعشاری به صورت علمی با حروف بزرگ E %E نمایش اعداد اعشاری %f نمایش به صورت هگزا دیسیمال به صورت حروف کوچک %x نمایش به صورت هگزا دیسیمال به صورت حروف بزرگ %X نمایش یک کارکتر اسکی %c نمایش متغییر رشته ای ذخیره شده در حافظه RAM %s نمایش متغییر رشته ای ذخیره شده در حافظه FLASH %p نمایش علامت % %%

37 تنظیمات تابع sprintf در:codevision
نکته:هرگاه در نرم افزار codevision avr از توابع printf یا sprintf استفاده کنیم باید ویژگی آن را تعیین نماییم .در ضمن این توابع حجم کد تولیدی برنامه را زیاد می کنند.

38 Example-10 برنامه مثال 9 را با تابع sprintf به صورت ساده تر بازنویسی کنید #include <mega32.h>//معرفی تراشه مورد نظر به کامپایلر #include <alcd.h>//استفاده از کتابخانه جدید کدویژن برای ال سی دی ها #include <delay.h>//چون از تابع تاخیری استفاده میکنیم باید کتابخانه ۀن به برنامه اضافه شود #include <stdio.h>//چون از تابع پرینت استفاده میکنیم باید کتابخانه آن را نیز به برنامه اضافه کنیم void main(void) { در این مکان متغییر های محلی تعریف میشوند unsigned int count;//این متغییر برای شمارش تا 999 باید تا گنجایش داشته باشد char show[3];//این متغییر از نوع رشته ای با طول 3 برای نمایش یک عدد 3 رقمی تعریف میشود lcd_init(16);//پیکره بندی صفحه نمایش و بردن مکان نما به خط اول و ستون اول while (1) for(count=0;count<1000;count++)//حلقه شمارشی برای شمارش اعداد تا 999 sprintf(show,"counter:%u",count);//دستورات قالب بندی رشته ها برای چاپ عبارات مورد نظر در خروجی lcd_clear();//تازه سازی صفحه نمایش lcd_puts(show);//چاپ متغییر رشته ای بر روی ال سی دی delay_ms(1000);//تاخیر ا ثانیه ایی }

39 تنظیمات CodeVision AVR:
در قسمت New Project بوسیله CodeWizard:

40 نمایش کارکتر های استاندارد
منظور از کارکتر استاندارد، کارکتر هایی است که برای LCD های کارکتری از قبل تعریف شده اندکه تمامی انها مطابق جدول صفحه بعد می باشند. به ازای هر کارکتر در سطر و ستون مربوطه یک عدد 4بیتی نوشته شده که اگر این اعداد را طوری کنار هم قرار دهیم که 4 بیت کم ارزش و پر ارزش به ترتیب متناظر با سطر و ستون کارکتر مورد نظر باشد می توانید از فرمت زیر برای نمایش آن کارکتر بر روی LCD استفاده کنید \xعدد به دست امده به صورت هگزادسیمال مثال:فرض کنید متغیر res مقدار یک مقاومت بر حسب اهم را به صورت یک عدد صحیح بیان کند.در اینصورت برای نمایش مقدار مقاومت همراه با واحد(Ω) در دنباله آن چنین می نویسیم: Sprintf(str,”resistance=%u\xf4”,res);

41 جدول کد های اسکی

42 Practice -3 1-برنامه ایی بنوسید که اسم خود را بر روی lcd کارکتری نوشته و ان را هر ms 200 به سمت چپ شیفت دهد 2-برنامه ایی بنوسید که به صورت نزولی شمار از تا 10 را شمارش کندو حاصل را بر روی lcd نمایش دهد .فاصله شمارش را یک ثانیه در نظر بگیرید 3-برنامه ایی بنوسید که با زدن یک کلید دلخواه به اسم up مقدار شمارشی یک واحد افزایش یابد و با زدن کلید دلخواه به نام down حاصل یک واحد کاهش یابد و حاصل روی LCD متصل یه پورت D نمایش داده شود 4-برنامه ایی بنوسید که حاصل مقدار باینری پورت Aرا خوانده و بر روی LCD متصل شده به پورتB نمایش دهد


Download ppt "Session 5."

Similar presentations


Ads by Google