PDA

View Full Version : سوال: کار کردن با پورت پرینتر



ahmadsystemco
چهارشنبه 21 اسفند 1387, 19:14 عصر
سلام خدمت تمامی دوستان
می خواستم بدونم چگونه می شود پورت پرینتر را کنترل کرد.
درست نمی دونم ولی انگار پورت پرینتر 26 pin دارد و من می خواهم با نوشتن برنامه ای هر کدام از آن پین ها را که خواستم به 1 یا 0 تغییر بدهم همانند یک سوییچ.
اگر دوستان در codeproject دیده باشند برنامه ای است که با استفاده از پورت پرینتر یک LCD را کوچک را کنترل می کند و این کار را با 0 و 1 کردن پین ها انجام می دهد مثلا اگر پین 4 و 12 یک باشند LCD در خط اول خود مقدار A را نمایش می دهد.
حال من می خواهم بدونم چطور می شه در C# پین ها را 0 و 1 بکنم در برنامه ای که گفتم این کار با یک dll انجام می شد که با LCD سازگاری داشت و اجازه استفاده دیگری را نمی دهد.
دوستان لطفا راهنمایی کنند.
اگر در C# نمی شه کسی dll سی پلاس پلاس برای آن سراغ داره؟
با تشکر AHS

reza_Nazem
پنج شنبه 22 اسفند 1387, 00:03 صبح
من با io.dll با پرت پرینتر کار کردم در حد روشن کردن لامپ های led در واقع عمل نوشتن و خوندن رو خیلی راحت میشه باهاش انجام داد
dll رو واست میزارم همین جا امیدوارم کارتو راه بندازه

__H2__
پنج شنبه 22 اسفند 1387, 01:31 صبح
لام
همانطور که خودتان و کاربر reza_Nazem هم اشاره کردند، باید از یک dll کمکی استفاده کنید.
من قبلاً مقاله و مطلب نسبتاً کامل در این مورد نوشته ام که میتوانید از لینک زیر ان را مشاهده کنید:
http://h02.ir/Paper.aspx?Item=LPT-Programming

(البته این سوال هم بارها در سطح سایت مطرح شده)
موفق باشید.

ariyanna
پنج شنبه 22 اسفند 1387, 10:33 صبح
سلام، همونطور که دوستان گفتن باید از api استفاده کنی : می تونی از inpout32.dll هم استفاده کنی ، این تابع entrypointهای زیادی در ار تباط با lpt داره ...

مثلا یههمچین توابعی :

/// <summary>
/// ارسال داده به پورت
/// </summary>
/// <param name="address">آدرس پورتی که باید به روی ان اطلاعات ریخته شود</param>
/// <param name="value">مقدار ارسالی بر روی پورت</param>
[DllImport("inpout32.dll", EntryPoint = "Out32")]
public static extern void output (int address, int value);
وبرای خواندن :

/// <summary>
/// خواندن داده از پورت
/// </summary>
/// <param name="address">آدرس پورتی که داده از آن خوانده شود</param>
/// <returns>داده ی خوانده شده را بر می گرداند</returns>
[DllImport("inpout32.dll", EntryPoint = "Inp32")]
public static extern int input (int address);
دوست عزیز شما امکان داره تابعی رو برای تبدیل مبنای hex به dec لازم داشته باشی ...
توضیح اینکه :
بدون داشتن اطلاعات سخت افزاری و دانستن پروتکل های این پورت با هیچ کدام از اینهایی که من و دوستان اشاره کردم نمی تونی کار کنی ، پس سعی کن ابتدا تمام جنب های علمی قضیه رو بررسی کنی ، هیچ وقت نمی شه بدون شناختن ابعاد جزیی یک موضوع اونو در دست گرفت و ازش استفاده کرد ، بعنوان مثال در بالا تابعی هست واست دریافت از پورت lpt ، دراین تابع به سادگی هرچه تمام تر آدرس hex پورت (معمولا 0x378) رو بهش می دی و این تابع این اطلاعات رو از روی پورت دریافت می کنه به همین سادگی !!!!! . امـــــــــا :
در عمل هیچ گاه نمی تونی این کار رو بکنی زیرا ثبات دوطرفه مر بوط به این حالت در حالت معمولی لچ (قفل) هستش و اطلاعات از بیرون به داخل نمی تونه راه پیدا کنه و فقط از داخل به بیرون جریان داره (یعنی فقط می تونی روی پورت داده بریزی نه اینکه بخونی) حالا سوال اینجاست که باید چکار کنی ؟!!! اگه اطلاعات در ضمینه ی نحوه ی طراحی پروتکل های مربوطه و مدارات سخت افزاری اون نداشته باشی حتما به مشکل می خوری.
(راه حل مشکل بالا : اینه که باید یک پین مخصوص رو یک کنی تا اینکه بتونی از تابعی که ذکرشد استفاده کنی) کلا منظورم این بود کهاطلاعات خودت رو دراین باره زیاد کن بعد برو سراغ برنامه نویسیش

amir master
سه شنبه 05 مرداد 1389, 20:10 عصر
با سلام
من این موضوع رو با جستجو پیدا کردم و مطالب بالا رو خوندم و چندتا سؤال برام پیش اومد، اینکه دستور اضافه کردن فایل DLL رو در C# کجا باید نوشت (من هرجا مینویسم ایراد میگیره) و اینکه فایل DLL کجا باید باشه آیا اگه فقط توی System32 باشه کافیه؟
ممنونم

__H2__
دوشنبه 11 مرداد 1389, 21:54 عصر
سلام

اضافه کردن فایل DLL رو در C#‎ کجا باید نوشت (من هرجا مینویسم ایراد میگیره) و اینکه فایل DLL کجا باید باشه آیا اگه فقط توی System32 باشه کافیه؟
برای اضافه کردن این نوع dll به پروژه کار خاصی نیاز نیست.
فقط کافی است کدهای داده شده را در یک class وارد کنید.

فایل dll هم باید کنار exe برنامه یا در system32 کپی شود.
(((
لینک قبلی ان مطلب در پست سوم هم هنوز معتبر است ولی لینک جدید را هم میگذارم:
http://support.h02.ir/fwlink/?LinkId=1000292003
)))

موفق باشید.