42
Session 5

Session 5

  • Upload
    meghan

  • View
    25

  • Download
    6

Embed Size (px)

DESCRIPTION

Session 5. مطالب این جلسه:. معرفی 7segment ها و نحوه راه اندازی آنها Lcd های کارکتری و نحوه ارتباط دهی با میکرو. نمایشگر های seven segment. - PowerPoint PPT Presentation

Citation preview

Page 1: Session 5

Session 5

Page 2: Session 5

مطالب این جلسه:

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

Page 3: Session 5

seven segmentنمایشگر های

از   ها سگمنت هم 8سون به ها دیود سر یک که اند شده تشکیل نوری دیود . سگمنت نوع دو شوند می استفاده مشترک سر عنوان به و اند شده وصل

:  دارد مشترک وجود کاتد دیگری و مشترک آند آند. یک سگمنت سون درکاتد در و اند شده وصل همدیگر به ها دیود مثبت های سر تمام مشترک

. منفی سرهای تمام مشترک

Page 4: Session 5

انواع 7segment

Page 5: Session 5

Common Anode

با سگمنت سون این درکردن متصل صفر پایه هر

سگمنت کنترلر میکرو بهشد خواهد روشن متناظر

Page 6: Session 5

Common Cathode

با سگمنت سون این درکردن متصل یک پایه هر

سگمنت میکرو به شدهشد خواهد روشن متناظر

Page 7: Session 5

Example-5 7را ب�ر روي 9 ت�ا 0برنام�ه ای بنویس�ید ک�ه اع�دادsegment آن�د

.�ن�شان د�هد ي�ك ثا�نيه به �فاصله مشترك�

#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); } }}

Page 8: Session 5

جدول کدهای آند مشترک

num h g f e d c b a code

0 1 1 0 0 0 0 0 00xC0

1 1 1 1 1 1 0 0 10xF9

2 1 0 1 0 0 1 0 00xA4

3 1 0 1 1 0 0 0 00xB0

4 1 0 0 1 1 0 0 10x99

5 1 0 0 1 0 0 1 00x92

6 1 0 0 0 0 0 1 10x83

7 1 1 1 1 1 0 0 00xF8

8 1 0 0 0 0 0 0 00x80

9 1 0 0 1 1 0 0 00x98

Page 9: Session 5

Example-5unsigned 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;}

Page 10: Session 5

به میکرو کنترلر7SEGMENTاتصال

. روش شود می متصل میکروکنترلر به مختلفی روشهاي به سگمنت سونکدها که است این سون اول به مستقیم صورت به جدول مطابق را

. از استفاده دوم روش کنیم اعمال کد ICسگمنت مبدل سون BCDهای بهاست سگمنت

MAX7219, MAX7221,7448,7447,45114054,4055مانند:

Page 11: Session 5

مالتی پلکس کردن سون سگمنت ها

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

تمامی پایه های دیتا را روی یک پورت قرار داده و پایه های

مشترک سون سگمنت ها را کنترل میکنیم.به این صورت که با فعال کردن آن پایه ی مشتر

ک وارسال اطالعات به 20سگمنت مورد نظر با توالی

میلی ثانیه .تمامی سگمنت ها باتوجه به خطای چشم انسان

.روشن به نظر میرسند

Page 12: Session 5

مالتی پلکس کردن سون سگمنت ها

استفاده از تکنیک رفریشینگ

Page 13: Session 5

Practice -2

1 7- مثال قبل را براي يكseg كاتد مشترك پياده سازي كنيد.

2 مثال قبل را با استفاده از -IC مبدل BCD به 7segment ، 7447.پياده سازي كنيد

3 7- با استفاده ازsegment كاتد مشترك و IC ، ثانيه 1 با فاصله زماني 9 تا 0 يك شمارنده 7448

بسازيد.4 برنامه اي بنويسيد كه عددي را از پورت -B

نمايش دهد.7segخوانده و برروي 5 ثانيه 1 با فاصله زماني 99 تا 0- يك شمارنده

بسازيد

Page 14: Session 5

LCD

Page 15: Session 5

LCDاستفاده از

Page 16: Session 5

:LCDصفحه نمایش

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

! دهیم نمایش را مختلف های رشته و کاراکترها

Page 17: Session 5

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

Page 18: Session 5

شماره پین نشانه نام توصیف

1 VSS Power supply ی Lcdاست تغذیه زمین پایه2 VDD Power supply

ی تغذیه مثبت به +lcdپایه که ولت 4.5تا 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پایه لبه یک سازی فعال نوع و است

میباشد رونده

78910

DB0DB1DB2DB3

Data bus 0-7

باس دیتا چهارم تا اول های است lcdبیتمد: از که هنگامی در کنیم 4نکته استفاده بیت

ماند می باز ها پایه این

11121314

DB4DB5DB6DB7

باس دیتا هشتم تا چهارم های است lcdبیتمد: از که هنگامی در کنیم 4نکته استفاده بیت

میشود استفاده ها پایه این از

15 Aآند حدود led backlightپایه مقاومتدر یک با به 47که اهم

+5v میشود وصل

16 Kکاتد وصل led backlightپایه زمین به که

میشود

Page 19: Session 5
Page 20: Session 5

آشنایی با توابع کتابخانه ای 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)

Page 21: Session 5

ای کتابخانه توابع با :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); // روشن نما مکان و روشن نمایش

Page 22: Session 5

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

Page 23: Session 5

3 .void lcd_write_byte(unsigned char addr, unsigned char data);

متغیر یک توانیم می تابع این یک Charبوسیله که کنیم مقداردهی طوری را ! به دهیم نمایش را آن توانیم می تابع این بوسیله سپس شود، دلخواه کاراکتر

در نویسی فارسی برای مثال شود lcdعنوان استفاده میتواتد

4 .Unsigned char lcd_read_byte(unsigned char addr);

از را کاراکتر یک که تفاوت این با کند می عمل قبل تابع مشابه تابع LCDاین. گرداند برمی را دارد دربر را آن شکل که متغیر یک و خواند می

ای کتابخانه :lcd.hتوابع

flash byte char0[8]={0b0000000,0b0001111,0b0000011,0b0000101,0b0001001,0b0010000,0b0100000,0b1000000};

Page 24: Session 5

:lcd.hتوابع کتابخانه ای

: باال سطح توابع

1.unsigned char lcd_init(unsigned char LcdCollumns);

این lcdبرای مقدار دهی اولیه و تعیین تعداد ستون این تابع در ابتدای برنامه فراخوانی می شود.

) می برد و 0,0تابع مکان نمای چاپ را به خانه (همچنین مکان نمای چاپگر را غیر فعال می کند.

Example:

lcd_init(16)

Page 25: Session 5

:lcd.hتوابع کتابخانه ای

2.void lcd_clear();

! شود می پاک نمایش صفحه تابع این وسیله به

3.Void lcd_gotoxy(unsigned char x, unsigned char y);

به ( را چاپ نمای . X,Yمکان از) بعد برد می نظر موردشدن چاپ به شروع نقطه این از کاراکترها تابع این فراخوانی

! کنند میX :و ردیف: Yستون

Lcd_gotoxy(4,2)

Page 26: Session 5

:lcd.hتوابع کتابخانه ای

4.void lcd_putchar(char c);

استفاده می lcdبرای ارسال یک کارکتر به شود

Example :

lcd_putchar('a');

Page 27: Session 5

:lcd.hتوابع کتابخانه ای

5.void lcd_puts(char *str);

را strرشته باشد، می کارکترها از ای آرایه که را . که کنید توجه دهد می نمایش فعلی موقعیت در

رشته که کنیم می استفاده تابع این از strوقتی.RAMدرون باشد داشته قرار

Example:

sprintf(buffer, “tempreture= %d”, temp);

lcd_puts(buffer);

Page 28: Session 5

6.void lcd_putsf(char flash *str);

می strرشته نمایش فعلی موقعیت در را باشد، می کارکترها از ای آرایه که رارشته. که کنیم می استفاده تابع این از وقتی که کنید توجه Flashدرون strدهد

. باشد داشته قرار

: مثال برای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 LCDlcd_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 againlcd_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.

ای کتابخانه :lcd.hتوابع

Page 29: Session 5

باید توسط دستورات اسمبلی lcd.hهمواه قبل از استفاده از کتابخانه : نکته در برنامه معرفی شود.به عنوان مثال دستور زیر lcdزیر پورت متصل به

است)c آدرس ریجستر پورت 0x15 است.(portc به lcdبیانگر اتصال #asm// اسمبلی زبان شروع.equ __lcd_port=0x15// نمایشگر به متصل پرت معرفی#endasm// اسمبلی زبان پایان

را در برنامه فراخوانی کنیمlcdحال مجاز هستیم کتابخانه #include <lcd. h>Lcd_init(20);

Page 30: Session 5

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); }; }

Page 31: Session 5

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); } }; }

Page 32: Session 5

ای کتابخانه :stdlib.hتوابع

ها کتابخانه این پرکاربرد درون تابع رشته برای چندین ساختن.ها باشد می موجود آنها با کار و

1.itoa(int n,char *str);

تابع اسکی nبیتی 16عدد این های کارکتر صورت به رامتغییر در و تعریف strدرآورده ای رشته صورت به که

( عدد ریزد می است (65535تا 0بین nشده است

2 .Ltoa(long int n , char *str);

تابع اسکی nبیتی 32عدد این های کارکتر صورت به رامتغییر در و تعریف strدرآورده ای رشته صورت به که

( عدد ریزد می است (4294967295تا 0بین nشده است

Page 33: Session 5

ای کتابخانه :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();تا صفر بین تصادفی عدد یک تابع میکند 32767این تولید

Page 34: Session 5

Example-9 را با 999 بنویسید که به صورت صعودی شمار تا LCD را بر روی 999 تا 0برنامه یک شمارنده

ثانیه شمارش کند1تاخیر #include <mega32.h>//معرفی تراشه مورد نظر به کامپایلر#include <alcd.h>//استفاده از کتابخانه جدید کدویژن برای ال سی دی ها#include <delay.h>//ن به برنامه اضافه شودªچون از تابع تاخیری استفاده میکنیم باید کتابخانه ۀ#include <stdlib.h>//چون از تابع itoa استفاده میکنیم باید کتابخانه مورد نظر به برنامه اضافه شود

void main(void){در این مکان متغییر های محلی تعریف میشوند//unsigned int count;// گنجایش داشته باشد65535 باید تا 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);//قرار دادن مکان نما در مکان مورد نظر برای تغییر اعداد بعد از یک ثانیه }

}}

Page 35: Session 5

ای کتابخانه :stdio.hتوابع

می زیادی کاربردی توابع دارای قبلی کتابخانه همانند کتابخانه اینآشنا آینده جلسات در سریال ارتباط قسمت در آنها اکثر با که باشد

با . کارکردن برای اما شد این lcdخواهیم قدرتمند بسیار تابع یک ها. است شده معرفی زیر در که دارد کتابخانه

1 .void sprintf(char *str, flash char *str, arg1, arg2 , . . . );

باید ایی رشته متغییر یک که مقصد نام ابتدا تابع این آرگومان درآخر , . در و نمایش برای نظرمان مورد قالب سپس میگردد ذکر باشد

آید , می شود تبدیل اسکی به باید محتوایشان که هایی متغییر نامقالب در فرمتی چه با نظر مورد متغییر کنید تعیین اینکه برای

بگیرید , کمک بعد صفحه جدول از شود ظاهر نمایش

Page 36: Session 5

کارکتر های کنترلی در printf:تابع

سریال خروجی در بندی فرمت با نمایش نحوه کارکتر کنترلی

مبنای در دار عالمت صحیح 10عدد %I

مبنای در دار عالمت صحیح 10عدد %d

مبنای در عالمت بدون صحیح 10عدد %u

کوچک حروف با علمی صورت به اعشاری عدد eنمایش %e

بزرگ حروف با علمی صورت به اعشاری عدد Eنمایش %E

اعشاری اعداد نمایش %f

کوچک حروف صورت به دیسیمال هگزا صورت به نمایش %x

بزرگ حروف صورت به دیسیمال هگزا صورت به نمایش %X

اسکی کارکتر یک نمایش %c

حافظه در شده ذخیره ای رشته متغییر RAMنمایش %s

حافظه در شده ذخیره ای رشته متغییر FLASHنمایش %p

عالمت % نمایش %%

Page 37: Session 5

codevision در:sprintfتنظیمات تابع

افزار :نکته نرم در هرگاهcodevision avr توابع از

printf یاsprintf کنیم استفادهتعیین را آن ویژگی باید

حجم . توابع این ضمن در نماییممی زیاد را برنامه تولیدی کد

کنند.

Page 38: Session 5

Example-10 را با تابع 9برنامه مثال sprintfبه صورت ساده تر بازنویسی کنید

#include <mega32.h>//معرفی تراشه مورد نظر به کامپایلر#include <alcd.h>//استفاده از کتابخانه جدید کدویژن برای ال سی دی ها#include <delay.h>//ن به برنامه اضافه شودªچون از تابع تاخیری استفاده میکنیم باید کتابخانه ۀ#include <stdio.h>//چون از تابع پرینت استفاده میکنیم باید کتابخانه آن را نیز به برنامه اضافه کنیم

void main(void){در این مکان متغییر های محلی تعریف میشوندunsigned int count;// گنجایش داشته باشد65535 باید تا 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);//تاخیر ا ثانیه ایی }

}}

Page 39: Session 5

:CodeVision AVRتنظیمات

قسمت بوسیله New ProjectدرCodeWizard:

Page 40: Session 5

استاندارد های کارکتر نمایش

برای که است هایی کارکتر استاندارد، کارکتر از کارکتری LCDمنظور های. باشند می بعد صفحه جدول مطابق انها تمامی اندکه شده تعریف قبل از

عدد یک مربوطه ستون و سطر در کارکتر هر ازای که 4به شده نوشته بیتیکه دهیم قرار هم کنار طوری را اعداد این ارزش 4اگر پر و ارزش کم بیت

از توانید می باشد نظر مورد کارکتر ستون و سطر با متناظر ترتیب بهروی بر کارکتر آن نمایش برای زیر کنید LCDفرمت استفاده

\x هگزادسیمال صورت به امده دست به عدد :متغیر کنید فرض صورت resمثال به را اهم حسب بر مقاومت یک مقدار

. با همراه مقاومت مقدار نمایش برای اینصورت در کند بیان صحیح عدد یک:Ωواحد) نویسیم( می چنین آن دنباله در

Sprintf(str,”resistance=%u\xf4”,res);

Page 41: Session 5

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

Page 42: Session 5

Practice -3

روی- 1 بر را خود اسم که بنوسید ایی هر lcdبرنامه را ان و نوشته کارکتریms 200 دهد شیفت چپ سمت به

از- 2 شمار نزولی صورت به که بنوسید ایی شمارش 10تا 100000برنامه راروی بر را حاصل نظر . lcdکندو در ثانیه یک را شمارش فاصله دهد نمایش

بگیرید

اسم- 3 به دلخواه کلید یک زدن با که بنوسید ایی یک upبرنامه شمارشی مقدارنام به دلخواه کلید زدن با و یابد افزایش واحد downواحد یک حاصل

روی حاصل و یابد پورت LCDکاهش یه شود Dمتصل داده نمایش

پورت- 4 باینری مقدار حاصل که بنوسید ایی روی Aبرنامه بر و خوانده LCDراپورت به شده دهد Bمتصل نمایش