هدف از انجام این پروژه تبدیل عکس های رنگی با فرمتهای Jpeg .،bmp.، bmp .، gif .، TIF .
به حالت سیاه و سفید(Black & White ) و نمایش این تصویر برروی LCD گرافیکی(64*128 ) این پروژه از سه بخش تشکیل شده است.
بخش اول: عمل تبدیل عکس های رنگی به سیاه و سفید که این کار توسط برنامه مطلب(Matlab ) انجام می شود.
بخش دوم: عمل انتقال داده از pc به حافظه داده (RAM یا PROM E)
بخش سوم: عمل برداشت از حافظه داده و نمایش برروی LCD گرافیکی
بخش اول:
بر ای اینکه بتوان عکس های رنگی را به سیاه و سفید تبدیل کرد از برنامه مطلب استفاده کردیم.
در این برنامه توابعی وجود دارد که براحتی عکس های رنگی را به سیاه و سفید(binary Image ) تبدیل می کند.
بخش دوم:
در این بخش با استفاده از برنامه مطلب و پورت چاپگر موازی و طراحی سخت افزاری برای انتقال داده بصورت موازی به حافظه داده عمل انتقال داده از pc به حافظه داده انجام گرفت.
بخش سوم:
در این بخش هم یک طراحی سخت افزاری برای برداشت داده از حافظه داده و نمایش روی LCD انجام گرفت.
در ادامه هر کدام از بخش ها را به تفصیل شرح می دهیم.
مطلب مانند یک ماشین محاسب با امکانات کامل است.
مانند یک ماشین حساب معمولی، می تواند اعمال ریاضی ساده ای مثل: جمع، تفریق، ضرب و تقسیم را انجام دهد.
مانند یک ماشین حساب مهندسی، قابلیت انجام عملی را روی اعداد مختلط، ریشه ها و توانهای مربعات لگاریتم ها و عبارات مثلثاتی مثل سینوس، کسینوس، تانژانت را دارد.
مانند یک ماشین حساب قابل برنامه ریزی شما قادر به ذخیره و بازیابی اطلاعات هستید و می توانید دستورات را ایجاد، اجرا و برای خودکار کردن عملیات محاسباتی معادلات مبهم آنها را ذخیره کنید.
می توانید مقایسه های منطقی را انجام دهید و ترتیب اجرای دستورات را کنترل کنید.
مطلب ابزاری کار با محاسبات ریاضی است.
مطلب یک زبان برنامه نویسی آسان برای کاربر با مشخصات بسیار پیشرفته و ساده تر از زبانهای کامپیوتری نظیر بیسیک و پاسکال و C است.
2- نحوه نوشتن برنامه در Matlab: پس از واردشدن به برنامه از منوی File گزینهNew و سپس M-File را برگزینید.
با این کار پنجره ای جهت نوشتن دستورات ظاهر می شود پس از اتمام نوشتن برنامه و ذخیره کردن آن که بصورت پیش فرض در پوشه work ذخیره می شود.
با استفاده از Debuge Run می توان برنامه را اجرا کرد.
Matlab با استفاده از یکسری توابع عمل تبدیل عکس های رنگی به سیاه و سفید را انجام میدهد.
به این صورت که هر عکس رنگی را ابتدا به gray scale و سپس Black & White تبدیل می کند.
مطلب برای انجام این کار به صورت زیر عمل می کند.
ابتدا فایل رنگی توسط تابع Imread خوانده می شود( هر کدام از توابع توضیح داده می شود) و در یک متغیر آرایه ای ذخیره می شود.
در مرحله بعد با استفاده از تابع rgb2gray عمل تبدیل عکس رنگی به gray scale انجام می شود.
در انتها تابع Im2bw عمل تبدیل عکس gray scale را به Black &white انجام می دهد.
مطلب برای انجام این کار به صورت زیر عمل می کند.
در انتها تابع Im2bw عمل تبدیل عکس gray scale را به Black &white انجام می دهد.
3- تبدیل عکس های رنگی به Binary Image 1-3-1 تابع Imread این تابع یک تصویر را از یک فایل گرافیکی می خواند و در یک متغیر آرایه ای ذخیره می کند.
A=Imread ('filename ', fmt); این تابع یک تصویر رنگی gray scale را از طریق مسیری که توسط رشته file name مشخص می شود می خواند و د ر آرایه A ذخیره می کند.
fmt فرمت فایل است.
که می تواند .Tif .gif .bmp .jpeg باشد اگر تصویر بصورت grayscale باشد آرایه A بصورت دوبعدیی(M-by-N ) خواهد بود و اگر تصویر رنگی باشد آرایه A بصورت سه بعدی(M-by-N-by-3 ) است.
2-3-1 تابع rgb 2 gray : این تابع یک تصویر RGB را به gray scale تبدیل می کند.
gray(RGB); I=rgb 2 3-3-1تابع Im 2 bw : Bw=im 2 bw(I,Level) این تابع عمل تبدیل یک تصویر را به تصویر باینری انجام می دهد.
اینکار براساس مقدار آستانه ای که در Level تعیین می شود انجام می گیرد.
این تابع ابتدا تصویر RGB را به حالت gray Scale تبدیل می کند.- اگر قبلاً این کار انجام نشده باشد - سپس با استفاده از مقدار آستانه ای که در Level تعیین می شود عمل تبدیل تصویر به یک تصویر باینری را انجام می دهد و حاصل را در یک آرایه دو بعدیBW(M-by-N) ذخیره می کند.
خروجی تصویر باینری که در BW ذخیره می شود برای تمام پیکسل های تصویر ورودی که روشنایی آنها بیشتر از سطح Level است مقدار یک(white ) و برای تمام پیکسلهای ورودی که روشنایی آنها کمتر از سطح Level است مقدار صفر(black ) را در نظر می گیرد.
4-3-1 تابع Imshow : از این تابع هم برای نمایش تصویر استفاده می شود.
Imshow(I); فصل دوم: رابط موازی با توجه به اینکه برنامه Matlab از پورت موازی به صورت یک پورت ساده استفاده می کند از این پورت برای انتقال داده از pc به حافظه داده استفاده شد.
1- پورت موازی در Matlab : در برنامه مطلب برای استفاده از پورت موازی باید ابتدا یک شی ورودی / خروجی دیجیتال(Digital I/O Object ) ایجاد کرد.
این کار توسط تابع digitalio انجام می شود.
2- تابع Digitalio : DIO=digitalio ('adaptor',ID); این تابع یک شی ورودی/ خروجی دیجیتال را بوجود می آورد و به متغیر DIO نسبت می دهد.
'adptor' : نام رابط است که در اینجا parallel می باشد.
:ID مشخصه رابط را تعیین می کند.
در یک کامپیوتر PC سه پورت موازی وجود دارد که با برچسب های LPT3,LPT2,LPT1 مشخص می شود.
این سه پورت به صورت استاندارد هستند و مطلب فقط از آنها استفاده می کند.
اگر پورت جدیدی به سیستم اضافه شود مطلب نمی تواند از آنها استفاده کند.
درواقع LPT2 LPT1 LPT3 مشخصه های رابط موازی هستند.
آدرس این پورتها بصورت 278h,378hex و 3Bch است.
Creat a digital I/O Object for parallel port LPT 1 .
DIO=digitalio ('parallel ', 'LPT1'); نکاتی که در موردdigital I/O object باید بیان کرد آن است که: 1- وقتی این شی بوجود می آید، هیچگونه خط سخت افزاری ندارد.
برای اجرایی کردن این وسیله، باید خطوط سخت افزاری به این شیء اضافه گردد که این کار توسط تابع addline انجام می شود.
2- برنامه مطلب پورت موازی را برای خود قفل نمی کند بلکه برنامه های دیگر هم نمی توانند به آن دسترسی داشته باشند که این ممکن است باعث ایجاد برخورد(ConFlict ) گردد.
پس از ساختن شی دیجیتال ورودی / خروجی (digital I/O Object) باید به آن خطوط سخت افزاری اضافه گردد.
این کار توسط تابع addline انجام می شود.
3- تابع addline : addline (obj, hwline,port,'direction'); A digital I/O object : obj Hw Line :The numrie IDS of the hardware lines added to the device object.
Port : the numric IDS of the digital I/O port Direction : the line directions can be In or out دستور addline خطوط سخت افزاری که با یک شماره یا یک بازه از اعداد مشخص می شود را به پورت شی دیجیتالی که در مرحله قبل ایجاد شد نسبت می دهد.
direction هم جهت خطوط را که می تواند ورودی یا خروجی باشد مشخص می کند.
همانطور که معلوم است می توان مقادیر را از یک خط ورودی خواند و یا مقادیر را در یک خط خروجی نوشت: بطورکلی پورتهای I/O دیجیتالی را می توان به 2 گروه طبقه بندی کرد: 1- Port - configurable device : در یک Port - configurable device نمی توان به صورت منحصر به فرد به هر خط آدرس دهی کرد یعنی هر خط پورت نمی تواند به صورت جداگانه ورودی یا خروجی باشد.
بنابراین وقتی به این نوع پورتها آدرس دهی می شود تمام خطوط یا ورودی می شوند یا خروجی.
مثلاً اگر یکی از خطوط Port - configurable device را بصورت ورودی قرار دهیم تمام خطوط پورت به صورت ورودی می گردد.
2- Line -configurable devices : در Line -configurable devices می توان به صورت منحصر به فرد به هر خط آدرس دهی کرد.
یعنی هر خط پورت می تواند بصورت جداگانه ورودی یا خروجی شود یعنی از هر خط Line -configurable می توان به صورت جداگانه خواند یا نوشت.
Port 0 همیشه Line –configurable است و باقی Port ها به صورت Port –configurable هستند .
نکته: Line -configurable است و باقی پورتها به صورت Port - configurable device است.
4- خصوصیات پورت موازی: پورت موازی دارای 8 خط داده، 4 خط کنترل، 5 خط وضعیت، و 8 خط زمین است.
در استفاده های عادی این خطوط بوسیله نرم افزار کامپیوتر و وسایل جانبی براساس پروتکل مانند Standard 1284-1994 IEEE کنترل می شود.
این پروتکل ها پروسیجرهایی را برای ارسال و دریافت داده به صورت دست دهی، بازگردانده اطلاعات وضعیت و سایر موارد تعریف می کند.
به هر حال مطلب از این پورت موازی بصورت یک وسیله I/O دیجیتال استفاده می کند و به هیچ پروسیجری نیاز نیست.
برای دسترسی به خطوط پورت موازی بیشتر PC ها به کانکتور DB-25 مجهز هستند.
این خطوط از سطوح منطقی TTL استفاده می کنند.
نکته مهم: خطوط 17،14،11،1 بصورت سخت افزاری inverse هستند.
Port 0 بصورت Line-configure able است و پورتهای 1 و 2 بصورت port-configurable هستند.
علاوه بر نکته فوق پورتهای 0-2 دارای خصوصیات زیر نیز هستند.
Port 0 is line configurable for reading and writing.
Port 1 is port configurable for reading.
Port 2 is port configurable for reading and writing.
بنابراین پورتهای صفر و2 هم قابلیت پیکربندی برای نوشتن و هم قابلیت پیکربندی برای خواندن دارند.
ولی از پورت یک فقط می توان خواند.
این پورتها به صورت پیش فرض مقدار یک منطقی(v 5) را برروی خطوط خود دارند.
در LPT1 ثبات داده با آدرس port0= 378 h ثبات وضعیت با آدرس port1= 379 h ثبات کنترل با آدرس port2= 37Ah Par port = digitalio('parallel',Lpt1'); addline(par port , 0:7,'out'); addline(par port , 0,2,'out'); addline(par port , 0,1 ,'in'); Addline(par port , 1,2,'out'); از شماره های Index در برنامه مطلب برای دسترسی به خطوط سخت افزاری پورت موازی استفاده می شود.
5- نوشتن در خطوط پورت: عمل نوشتن در خطوط پورت بوسیله تابع putvalue انجام می شود.
Putvalue (obj.Line(Index),data) Obj.Line(index)=one or more lines contained by obj.
Data = a decimal value or binary vector این دستور مقدار data رادر خطی از شی ورودی / خروجی دیجیتال که بوسیله Index مشخص می شود می نویسد.
اگر پورت از نوع port-configurable باشد مقدار data در تمام خطوط پورت نوشته می شود.
ولی اگر مقدار پورت بصورت Line-configurable باشد مقدار فقط در خطی که توسط Index مشخص می شود نوشته می شود.
6- خواندن از خطوط پورت: عمل خواندن از خطوط پورت بوسیله تابع getvalue انجام می شود.
Out=getvalue(obj.Line(Index); این تابع مقدار جاری را که در خطLine(Index) وجود دارد را بازمی گرداند.
مقداری که این تابع باز می گرداند بصورت binary vector است.
فصل سوم: قطعات مورد استفاده : 1- میکروکنترلر 8051: در سال 1981 شرکت intel میکروکنترلری به نام8051 را معرفی کرد.
این میکروکنترلر دارای 128 بایتRAM ، k 4 بایت Rom ، دوتایمر، یک پورت سریال و چهارپورت موازی( هر یک 8 بیت) بود که همه آنها در یک تراشه تعبیه شده بودند.
8051 یک پروسسور 8 بیت است.
یعنی cpuهر بار می تواند فقط روی 8 بیت داده کار می کند.
داده های بزرگتر از 8بیت باید به قطعات 8بیت بشکنند و سپس بوسیله cpu پردازش شوند.
8051 کلاً چهار پورت I/0 با عرض 8 بیت دارد.
امروزه شرکتهای مختلفی به تولید 8051 با مقدار Rom داخلی متفاوت می پردازند.
Feature Quantity Rom 4k bytes RAM 128 bytes Timer 2 I/0 pin 32 Serial port 1 Intruppt sources 6 نحوه اتصال اولیه برای میکروکنترلر 8051 : آی سی ذخیره ساز 74ls373 latch شامل 8 فلیپ فلاپ D می باشد که از آن می توان بعنوان یک پورت خروجی استفاده کرد.
پایه های D 1 تا D 8 بیان کننده بایت ورودی( الی) و خروجی های Q 1 الی Q 8 بیان کننده بایت خروجی( الی) می باشد.
پایه 11(G ) و پایه 1() برای کنترل عملکرد پورت می باشد.
اگر پایه به زمین وصل گردد آنگاه پایه G یا فعالساز به صورت زیر عمل می کند.
اگر پایه G غیرفعال( صفر) باشد ورودی هیچ تأثیری بر خروجی ندارد.
اگر پایه G فعال( یک ) باشد وروی در خروجی ظاهر می گردد و با لبه پائین رونده G ورودی در خروجی ذخیره(Latch ) می گردد.
معمولاً از این آی سی بعنوان پورت خروجی استفاده می شود که در آن پایه به زمین وصل می گردد و پایه G بعنوان پایه انتخاب(chip select ) عمل می کند که البته فعال با ولتاژ بالا می باشد.
Graphic LCD فصل چهارم: بخش سخت افزاری طراحی سخت افزاری برای دریافت داده ها از pc و قراردادن در حافظه داده: برای انتقال دیتا از pc به حافظه داده از روش دست دهی استفاده می کنیم و مبنای طراحی را براساس آن قرار میدهیم.
روال دست دهی در چاپگر : 1-1یک بایت داده به گذرگاه داده چاپگر ارسال می شود.
2-1وجود داده موردنظر با فعال کردن سیگنال به چاپگر اطلاع داده می شود.
3-1 هر وقت چاپگر داده را دریافت کرد، ارسال کننده را با فعال کردن سیگنال خروجی مطلع می سازد.
4-1سیگنال فرآیند تهیه بایت دیگری را برای ارسال به چاپگر آغاز می کند.
ما هم از همین روال برای انتقال دیتا از PC به حافظه داده استفاده می کنیم.
برای انجام عمل دست دهی از پورتهای 1 و 2 ،LPT1 استفاده شد.
پورت 1 فقط قابلیت خواندن دارد ولی پورت 2 هم قابلیت خواندن وهم قابلیت نوشتن دارد با توجه به این نکته که دو پورت به صورت port-configurable هستند.
بنابراین از 2 خط از پورت و 2 و یک خط از پورت یک استفاده شد.
یکی از Lineهای پورت 2 را برای نشان دادن آمادگی 8بیت برروی گذرگاه داده استفاده می کنیم.
مشخصه این Line به صورت زیر است.
خط برای نشان دادن اینکه دیتا روی گذرگاه داده و جود دارد صفر فعال است.
خط دیگراز پورت 2 بر ای نشان دادن اتمام ارسال کل دیتا استفاده می شود.
مشخصه این Line به صورت زیر است: هم صفر فعال است یعنی صفر بمنزله اتمام ارسال و یک به منزله عدم اتمام ارسال است.
خطوط و به صورت سخت افزاری در پورت موازی inverse هستند به این نکته در حین ارسال داده روی این خطوط باید توجه کرد.
یک Line از پورت یک هم برای نشان دادن دریافت داده از طرف میکرو و قرارگرفتن داده در حافظه داده استفاده شده است.
مشخصه این خط به صورت زیر است: هم صفر فعال است یعنی: خروجی ازمیکرو نشانه دریافت داده= ' 0 ' ورودی به pc نشانه عدم دریافت داده = ' 1 ' (p3.4) پایه 14 ( ) (pin15 ) قهوه ای 2- روال کلی دریافت داده: Pc : 1- pc خط را به علامت عدم اتمام ارسال یک می کند (باید توجه داشت که این خط بصورت سخت افزاری inverse است پس مقدار صفر روی آن فرستاده می شود.) 2- pc یک بایت را آماده می کند.
3- بایت آماده شده را روی پورت قرار میدهد و سپس خط را به نشانه وجود داده بروی گذرگاه داده صفر می کند.
pc منتظر پاسخ از طرف میکرو می ماند تا زمانی که این خط یک است صبر می کند به محض صفر شدن به مرحله بعد می رود.
خط به علامت عدم وجود دیتا یک می شود و سپس به مرحله 2 می رود.
6- پس از اتمام ارسال خط فعال می شود که نشانه اتمام ارسال داده است.
میکرو: میکروخط را چک می کند اگر این خط یک بود به مرحله بعد می رود در غیراینصورت به برنامه خاتمه می دهد.
2- میکروخط را چک می کند هر وقت این خط فعال شد به مرحله بعد می رود.
3- مقدار از گذرگاه داده خوانده می شود.
4- مقداردر حافظه داده ذخیره می شود.
5- بمنزله دریافت داده فعال می شود.
6- پس از یک زمان تأخیر مجدداً غیرفعال می شود و به مرحله 1 بازمی گردد.
3- توضیح کلی درباره نحوه آماده کردن داده توسط pc : همانطور که گفتیم Matlab تصویر را بصورت یک binary Image که تر کیبی از صفر ها و یکها است در یک آرایه(M-by-N ) ذخیره می کند.
بنابراین برای ارسال این آرایه از 2 حلقه for استفاده می شود.
یکی برای سطرها و دیگری برای ستونها.
نکته مهم: با توجه به آنکه LCD گرافیکی دارای 64 سطر و 128 ستون است بنابراین برای نمایش تصویر برروی LCD باید یک محدودیت را در اندازه تصویر قرار دهیم که تصویر باید در ابعاد باشد.
بنابراین تصویر در یک آرایه ذخیره میشود.
برای اینکه داده ها بصورت یک بایت(8 بیت) آماده شود از 2 حلقه for استفاده می کنیم.
نحوه پویش آرایه را هم به صورت سطری در نظر می گیریم.
یعنی در ستون اول از آرایه به صورت 8 بیت 8 بیت سطرها را ارسال می کنیم و به همین ترتیب در سمت گیرنده( میکرو) این داده ها را در خانه صفر حافظه قرار می دهیم تا ستون اول تمام شود سپس ستون دوم و به همین ترتیب تا هر 128 ستون ارسال شود.
4- بخش سخت افزاری دریافت: برای قراردادن دیتای دریافتی از pc در حافظه داده از دستور movx استفاده کردیم.
این دستور از اشاره گر Dptr برای انجام عمل آدرس دهی حافظه استفاده می کند.
در نوشتن در حافظه داده همانطور که در شکل مشاهده می شود از میکروکنترلر 8051 به صورت زیر استفاده شده است.
پایه ALE( پایه 30 8051 ) هم به پایه 11 از آی سی 74LS373 متصل می گردد همانطور که قبلاً شرح دادیم این پایه فعال ساز آی سی 74LS373 است.
محل اتصال 5- علت استفاده از بافر های 74LS245 : در این پروژه از 2 میکرومتر استفاده شده که هر دو از یک حافظه مشترک استفاده می کنند.
یعنی خطوط آدرس و کنترل حافظه به هر دو میکروکنترلر می رود.
هنگامی که میکرو اول در حال دریافت داده از pc و قراردادن در حافظه است میکروی دوم بیت p3.0 را تست می کند تا به محض اتمام عمل دریافت، عمل برداشت از حافظه و نمایش روی LCD را آغاز کند.
همانطور که می دانیم هنگامی که یک میکروکنترلر فعال می شود مقدار 255 را روی پورتهای خود قرار می دهد در نتیجه با توجه به اینکه خطوط آدرس و کنترل حافظه بین دو میکرو مشترک است.
بنابراین در حین دریافت داده توسط میکروی اول میکروی دومی برروی خطوط آدرس و کنترل تأثیر می گذارد و باعث اشتباه در قراردادن مقدار در حافظه می شود برای حل مشکل از آی سی 74LS245 که یک بافر دوطرفه است استفاده کردیم.
پورتهای 0 و 2 هرکدام از میکروکنترلر ها برای آدرس دهی استفاده می شود که به خطوط آدرس حافظه داده متصل می شوند.( پایه P2.3 بعنوان فعالساز حافظه استفاده شده) پس در مسیر آنها به خطوط آدرس حافظه از آی سی های 74LS245 استفاده کردیم.
همچنین برای پایه های P3.7 () و p3.6 ( که به خطوط Read و write حافظه متصل می شوند نیز این عمل را انجام دادیم.
همانطور که قبلاً شرح دادیم آی سی 74LS245 دارای یک پایه جهت تعیین انتقال و یک پایه جهت فعال کردن آی سی می باشد.
با توجه به نحوه قرارگرفتن آی سی و ای عمل آدرس دهی از میکرو به سمت حافظه است بنابراین پایه DIR ( پایه 1 از آی سی 245 ) را به زمین متصل می کنیم که جهت انتقال از سمت B به A باشد(B ورودی و Aخروجی) باشد.
ضمناً پایه های فعال ساز این آی سی ها را به پایه p3.3 ( پایه 13 از میکروکنترلر) از میکرو اول متصل نمودیم.
به همین ترتیب روی خطوط فوق از میکروی دوم هم از این بافرها استفاده می کنیم با این تفاوت که پایه فعال ساز آنها را به پایه ای p2.7 (28)و p2.6 (27) از میکروی دوم متصل می کنیم و پایه DIR را به Vcc تا جهت انتقال از A به B می گردد.( A ورودی و B خروجی).
هنگامی که میکرواول بخواهد عمل دریافت را انجام دهد پایه فعال ساز این آی سی را فعال می کند.( صفر می کند) و متقابلاً میکروی دوم پایه فعال ساز این آی سی ها را غیرفعال می کند.
در انتهای عمل دریافت و قبل از فعال کردن پایه اتمام دریافت توسط میکرو اول برای آگاهی میکرودوم از اتمام دریافت، پایه فعالساز این آی سی ها توسط میکروی اول غیرفعال می شود و بلافاصله میکرودوم پایه بافرهای خود را فعال می کند.
فصل پنجم: برداشت داده از حافظه و نمایش روی LCD : پس از اتمام عمل دریافت توسط میکروی اول این میکرو، بافرهای 74LS245 را که روی خطوط آدرس و کنترل قرار گرفته است را غیرفعال می کند تا تأثیری روی خطوط آدرس و کنترل میکرودوم نگذارد.
سپس P3.0 را صفر می کند.
میکرودوم هم دائم این پایه را چک می کند، زمانی که این پایه فعال شد میکرودوم وارد عمل می شود.
میکرودوم ابتدا بافرهای 74LS245 را که در مسیر آدرس و کنترلش قرار دارند فعال می کند و سپس عمل برداشت و نمایش روی LCD را انجام می دهد.
با توجه به توضیحاتی که در مورد ساختار LCD دادیم.
میکرودوم ابتدا ستون اول( ستون40h ) را سِت می کند سپس اولین بایت از حافظه داده را در page0 قرار می دهد سپس دومین بایت از حافظه داده را در page1 و الی آخر.
این کار تا زمانی که به page7 برسیم انجام می شود.
در ضمن قبل از هر بار قراردادن مقادیر روی LCD باید ستون اول ست شود.
پس از قرار گرفتن مقدار در page7 از ستون اول باید شمارنده ستون یک واحد اضافه شود و مانند حالت قبل عمل شود برداشت از حافظه و نمایش روی LCD انجام گیرد.
هنگامی که نیم صفحه اول را به اتمام رسید باید نیم صفحه دوم فعال گردد و این عملیات مجدداً روی آن اجرا شود.
فصل ششم بخش نرم افزاری: بخش اول: نمایش عکس روی LCD : نکته: ابعاد LCD پیکسل است.
با توجه به این نکته در نمایش عکس ها محدودیت ایجاد می شود، یعنی باید برنامه مطلب را طوری بنویسیم که یک قاب پیکسلی از عکس را ایجاد کند.
*برنامهMatlab to mic1 : این برنامه در میکروکنترلر اول برنامه ریزی می شود.
این برنامه عملیاتhandshaking را جهت انتقال دیتا از پورت موازی به حافظه داده را انجام می دهد.
* برنامه mic1 to mic2 & show font : این برنامه زمانی در میکروی دوم برنامه ریزی می شود که بخواهیم یک تصویر را در ابعاد پیکسل برروی LCD نمایش دهیم.
در ضمن قبل از نمایش تصویر، مجموعه ای از نوشته ها بروی LCD نمایش داده می شود به محض اتمام عملیات دریافت دیتا توسط میکرواول میکروی دوم عملیات نمایش نوشته ها را خاتمه می دهد و شروع به برداشت دیتا از حافظه داده و نمایش آن برروی LCD می کند.
برنامه Source- test .m در Matlab : این برنامه هم عملیات تبدیل یک عکس رنگی را به یک binary Image انجام می دهد و سپس از طریق handshaking دیتا را به حافظه داده منتقل می کند.
بخش دوم: نمایش انیمیشین برروی LCD : برای ایجاد یک تصویر متحرک باید مجموعه ای از تصاویر را که نشاندهنده حرکت موردنظر است را پشت سرهم قرار داد و برای دیدن یک حرکت بصورت روان و بدون پله پله و پرش توسط چشم حداقل به 25 تصویر از آن حرکت نیاز است که بر هر کدام از این تصاویر یک فریم(frame ) گفته می شود.
برای نمایش انمیشین در این مجموعه به دلیل محدودیتی که حافظه داده وجود دارد حداکثر مقدار حافظه جاری که میکروکنترلر 8051 می تواند داشته باشد KB 64 است - مجبوریم ابعاد تصاویر را کوچک در نظر بگیریم.
با کوچک شدن ابعاد تصاویر می توان تعداد بیشتری از تصاویر را در حافظه داده ذخیره کرد و در نتیجه می توان حرکت های بیشتری با تعداد فریم مشخص و یا یک حرکت بصورت روان داشته باشیم.
نکته بسیار مهم: ابعاد تصاویری که برای ارسال به حافظه داده در نظر گرفته می شود باید مضربی از 8 باشد یعنی در حلقه های for برنامه مطلب، مقداری که برای انتهای حلقه در نظر گرفته می شود باید مضربی از 8 باشد.
بعنوان نمونه اگر ابعاد تصویر را پیکسل در نظر بگیریم: (پیکسل) بیت بایت هر تصویر 72 بایت از حافظه داده را اشغال می کند.
ما از یک حافظه 2048 بایتی استفاده کردیم، بنابراین: فریم بنابراین با این مقدار حافظه داده و با ابعاد تصویر می توان 28 فریم داشت.
در کاری که به صورت نمونه انجام دادیم برای هر حرکت از 9 فریم استفاده کردیم.
بنابراین توانستیم 3 حرکت را ایجاد کنیم.
1- ساخت انیمیشین با Corel R.A.V.E : برای ساخت تصویر متحرک از برنامه Corel R.A.V.E استفاده کردیم.
ایجاد تصاویر متحرک در این برنامه بسیار آسان است.
این برنامه زیرمجموعه ای از برنامه Corel draw است.
نحوه کار با این برنامه را با ارائه یک مثال توضیح می دهیم: فرض کنید قصد داریم حرف A را به صورت متحرک داشته باشیم بطوریکه از مرکز صفحه به سمت چپ و پائین آن حرکت کرده و در عین حال کوچک شود.
در هنگام طراحی باید به این نکته توجه داشت که فقط از دو رنگ سیاه و سفید استفاده شود زیرا LCD فقط دارای دو حالت خاموش و روشن(Black یا White ) برای هر پیکسل است بنابراین نقاطی که در تصویر سفید(White ) باشند برروی LCD بصورت یک نقطه روشن نمایش داده می شوند و نقاطی که در تصویر سیاه باشند بر روی LCD بصورت یک نقطه خاموش نمایش داده می شوند.
پس از بازکردن برنامه، از طریق منوی Toolbox که در سمت چپ پنجره قرار دارد یک مربع به ابعاد پیکسل ترسیم می کنیم.
درسمت راست پنجره جعبه رنگ وجود دارد.
برای رنگ کردن مربع ابتدا مربع را انتخاب می کنیم و سپس با کلیک کردن برروی یکی از رنگهای موجود در جعبه مربع را رنگ می کنیم- در اینجا مربع را به رنگ سیاه درمی آوریم.
سپس از منوی Text گزینه insert symbol را انتخاب می کنیم که پنجره ای در سمت راست و در جلوی جعبه رنگ باز می شود.
در داخل کادر مجموعه ای از حروف انگلیسی بصورت بزرگ و کوچک وجود دارد.
روی حرف A کلیک کرده و آن را بداخل صفحه اصلی برنامه می کشیم.
در منوی Status Bar برنامه دو گزینه طول و عرض وجود دارد که ابعاد شیء انتخاب شده را برحسب تعداد Pixelنمایش میدهد.
طول و عرض حرف A را به 24 پیکسل کاهش می دهیم.
سپس حرف A را برروی مربعی که از قبل ایجاد کردیم قرار می دهیم.
– رنگ حرف A را سفید در نظر می گیریم- در پائین پنجره برنامه R.A.V.E یک خط Time Line وجود دارد که برحسب تعداد فریم مقیاس بندی شده است.
تصاویری که در بالا ایجاد کردیم – مربع و حرف A بصورت دو دایره سیاه رنگ که در زیر یکدیگر قرار دارند در فریم اول از Time Line قرار گرفته اند.
با توجه به آنکه می خواهیم 9 فریم برای این حرکت داشته باشیم بنابراین ابتدا برروی دایره سیاه رنگ در خط Time Line که مربوط به مربع است کلیک کرده و آن را تا فریم 9 جلو می کشیم.
با این کار در تمام فریم های 1 تا 9 تصویر مربع ایجاد می شود.
در مرحله بعد برروی دایره سیاه رنگ مربوط به حرف A کلیک کرده و آن را نیز تا فریم 9 می کشیم سپس از منوی Movie گزینه Insert key frome را انتخاب می کنیم.
سپس حرف A را انتخاب می کنیم و دستگیره سمت راست و بالای آن را به سمت چپ و پائین حرکت میدهیم با این کار حرف A کوچکتر می شود این کار را تا زمانی که طول و عرض A به پنج پیکسل برسد ادامه می دهیم.
پس از انجام این کار فقط کافی است برروی گزینه play که در سمت چپ پنجره قرار دارد کلیک کنید تا انیمیشینی که ساختیم نمایش داده شود.
بنابراین با ایجاد فریم اول و آخر، خود برنامه بقیه فریم های بین این دو فریم را ایجاد می کند.
2- تبدیل فریم ها با عکس: برای تبدیل کردن هر کدام از فریم ها به یک عکس با قالب .jpg به صورت زیر عمل می کنیم.
قبل از تبدیل فریم ها به عکس حرف A را انتخاب می کنیم و از منوی Arrange گزینه Break Apart را انتخاب می کنیم و سپس از همان منو گزینه ungroup را برمی گزینیم.
سپس نشانه گر TimeLine را به اولین فریم منتقل کرده و سپس کل تصویر یعنی مربع و حرف A را انتخاب می کنیم آنگاه از منوی Bitmaps گزینه convert to Bitmap را برمی گزینیم با این کار کادری ظاهر می شود که دارای یک کشویی پائین افتادنی است از داخل این منو گزینه RGB color(24Bit) را برمی گزینیم و سپس ok را کلیک می کنیم.
پس از این کار مجدداً از منوی Bitmaps گزینه Edit Bitmap را انتخاب می کنیم با این کار برنامه Corel Photo-Paint باز می شود و عکس موردنظر در صفحه اصلی آن نمایش داده می شود.
سپس از منوی File گزینه save as… را انتخاب کرده و تصویر را با compression و smoothing صفر ذخیره می کنیم.
پس از ذخیره کردن تمام تصاویر از برنامهm harkat.
در Matlab برای انتقال تصاویر از pc به حافظه داده استفاده می شود.
باید توجه داشت که مقدار انتهایی در اولین حلقه for برنامه m harkat.
برابر تعداد تصاویری که می خواهیم نمایش دهیم باشد که در اینجا عدد 9 است.
* در هنگام ذخیره کردن تصاویر بهتر است نام تصاویر را با شماره مشخص کرد تا در حین انتقال با مشکل مواجه نشویم.
*پس از تبدیل تمام فریمها به عکس تمام عکس ها را به پوشه work که در مسیر: Program file Matlab 71 work قرار دارد منتقل می کنیم.
3- توضیح درباره برنامه m harkat.: در این برنامه در اولین حلقه for باید تعداد تصاویری را که میخواهیم منتقل کنیم مشخص نمائیم.
پس از این کار با اجراکردن برنامه، برنامه ابتدا شماره تصویری را میخواهد که با واردکردن شماره تصویر به همراه پسوند.jpg داخل علامت' ' عمل تبدیل عکس به binary Image و سپس انتقال آن به حافظه داده انجام می شود و پس از اتمام انتقال اولین تصویر درخواست تصویر بعدی را می کند.
و آن را هم به binary Image تبدیل کرده و منتقل می کند.
این کار را تا زمانی که تمام تصاویر منتقل شوند انجام می دهد.
برنامه میکروی اول ثابت است و فقط عمل انتقال را انجام می دهد.
ولی برنامه میکروی دوم برای نمایش پشت سرهم تصاویر باید تغییر کند به برنامه: Mic1 to mic2 & font &animation.
A 51 توجه شود.
DescriptionsPinsPort IDEight I/O Lines, with pin 9 begin the significant bit(MSB)2-90Five input Lines used for status10-13 and 151Four I/O Lines used for control1,14,16 and 172