ہم دفاتر ، شاپنگ مالز اور بہت ساری دوسری جگہوں پر جانتے ہیں جہاں صرف اجازت نامے والے شخص کو کمرے میں داخل ہونے کی اجازت ہے۔ یہ نظام آریفآئڈی مواصلات کے نظام کو استعمال کرتے ہیں۔ آریفآئڈی کو شاپنگ مالز میں چوری روکنے کے لئے استعمال کیا جاتا ہے کیونکہ مصنوعات کو آریفآئڈی چپ کے ساتھ ٹیگ کیا جاتا ہے اور جب کوئی شخص آر ایف آئی ڈی چپ کے ساتھ عمارت سے نکل جاتا ہے تو خود بخود ایک الارم اٹھ جاتا ہے۔ آریفآئڈی ٹیگ ریت کے ایک حصے کی طرح چھوٹا ڈیزائن کیا گیا ہے۔ آریفآئڈی توثیقی نظام سسٹم ڈیزائن کرنے میں آسان ہیں اور قیمت میں یہ سستے ہیں۔ کچھ اسکول اور کالج آج کل آریفآئڈی پر مبنی حاضری کے نظام کا استعمال کرتے ہیں ۔
اس پروجیکٹ میں ہم ایک ووٹنگ مشین تیار کرنے جارہے ہیں جس میں صرف تصدیق شدہ ووٹوں کی گنتی ہوتی ہے۔ یہ آریفآئڈی (ریڈیو فریکوئینسی شناخت) ٹیگز کا استعمال کرکے کیا جاتا ہے۔ یہاں ہم صرف مجاز آریفآئڈی ٹیگ ہولڈرز کو ہی ووٹ ڈالنے کی اجازت دینے کے لئے اے ٹی ایم ای جی اے کے لئے ایک پروگرام لکھنے جارہے ہیں۔ (اس آسان ووٹنگ مشین پروجیکٹ کو بھی چیک کریں)
ضروری اجزاء
ہارڈ ویئر: ATMEGA32 ، بجلی کی فراہمی (5v) ، AVR-ISP پروگرامر ، JHD_162ALCD (16x2LCD) ، 100uF کاپاکیٹر (بجلی کی فراہمی کے پار سے جڑا ہوا) ، بٹن (پانچ ٹکڑے) ، 10KΩ ریزٹر (پانچ ٹکڑے) ، 100nF سندارتر (پانچ ٹکڑے) ، ایل ای ڈی (دو ٹکڑے ٹکڑے) ، EM-18 (آریفآئڈی ریڈر ماڈیول)۔
سافٹ ویئر: اٹیل اسٹوڈیو 6.1 ، پروگرام یا فلیش جادو۔
سرکٹ ڈایاگرام اور وضاحت
اے ٹی ایم ای جی اے 32 کا سرکٹ پورٹا ایل سی ڈی کے ڈیٹا پورٹ سے منسلک ہے۔ یہاں کسی کو فیوز بائٹس کو تبدیل کرکے PORTC میں JET مواصلات کو ACEGA میں غیر فعال کرنا یاد رکھنا چاہئے ، اگر کوئی PORTC کو عام مواصلات کی بندرگاہ کے طور پر استعمال کرنا چاہتا ہے۔ 16x2 LCD میں مجموعی طور پر 16 پن ہیں اگر کوئی بلیک لائٹ ہے ، اگر بیک بیک لائٹ نہیں ہے تو 14 پن ہوں گے۔ کوئی بیک لائٹ پنوں کو طاقت یا چھوڑ سکتا ہے۔ ابھی 14 پنوں میں 8 ڈیٹا پنز (7-14 یا D0-D7)، 2 بجلی کی فراہمی پنوں سے ہیں (1 & 2 یا VSS & VDD یا GND & + 5V)، 3 RD برعکس کنٹرول کے لئے پن (VEE کنٹرولز کس طرح موٹی حروف ہونا چاہیے دکھایا گیا) ، 3 کنٹرول پن (RS & RW & E)
سرکٹ میں ، آپ مشاہدہ کر سکتے ہیں کہ میں نے صرف دو کنٹرول پن ہی لئے ہیں ، اس سے بہتر تفہیم کی لچک مل جاتی ہے ، اس کے برعکس بٹ اور READ / WRITE اکثر استعمال نہیں کیے جاتے ہیں تاکہ انہیں زمین پر منتقل کیا جاسکے۔ یہ ایل سی ڈی کو سب سے زیادہ برعکس اور پڑھنے کے موڈ میں رکھتا ہے۔ ہمیں حرف اور ڈیٹا بھیجنے کے لئے صرف انبل اور آر ایس پنوں کو کنٹرول کرنے کی ضرورت ہے۔
کنیکشن جو ایل سی ڈی کے لئے کیے جاتے ہیں وہ ذیل میں دیئے گئے ہیں۔
گراؤنڈ میں PIN1 یا VSS
پن 2 یا وی ڈی ڈی یا وی سی سی سے + 5 وی پاور
PIN3 یا VEE کرنے کے لئے (ابتدائی کے لئے زیادہ سے زیادہ اس کے برعکس بہترین دیتا ہے)
یو سی کے PD6 پر PIN4 یا RS (انتخاب کا اندراج) کریں
پن 5 یا آر ڈبلیو (پڑھیں / لکھیں) زمین پر (ایل سی ڈی کو پڑھنے کے موڈ میں ڈال دیتا ہے جس سے صارف کے لئے مواصلات میں آسانی ہوجاتی ہے)
یو سی کے PD5 سے پن 6 یا ای (قابل)
یو سی کے PIN7 یا D0 سے PA0
یو سی کے PIN8 یا D1 سے PA1
یو سی کے PIN9 یا D2 سے PA2
یو سی کے PIN10 یا D3 سے PA3
یو سی کے PIN11 یا D4 سے PA4
یو سی کے PIN12 یا D5 سے PA5
یو سی کے PIN13 یا D6 سے PA6
یو سی کے PIN14 یا D7 سے PA7
سرکٹ میں ، آپ دیکھ سکتے ہیں کہ ہم نے 8 بٹ مواصلات (D0-D7) کا استعمال کیا ہے۔ تاہم یہ ایک لازمی بات نہیں ہے اور ہم 4 بٹ مواصلات (D4-D7) استعمال کرسکتے ہیں لیکن 4 بٹ مواصلات کا پروگرام تھوڑا سا پیچیدہ ہوجاتا ہے ، لہذا میں نے 8 بٹ مواصلات کو ترجیح دی۔
لہذا مندرجہ بالا جدول کے محض مشاہدے سے ہم ایل سی ڈی کے 10 پنوں کو کنٹرولر سے جوڑ رہے ہیں جس میں 8 پنوں کو ڈیٹا پن اور کنٹرول کے لئے 2 پن ہیں۔
آگے بڑھنے سے پہلے ، ہمیں سیریل مواصلات کے بارے میں سمجھنے کی ضرورت ہے۔ یہاں آریفآئڈی ماڈیول سیریل میں کنٹرولر کو ڈیٹا بھیجتا ہے۔ اس میں مواصلات کا دوسرا طریقہ ہے لیکن آسان مواصلت کے لئے ہم RS232 کا انتخاب کررہے ہیں۔ ماڈیول کا RS232 پن ATMEGA کے RXD پن سے منسلک ہے۔
آریفآئڈی ماڈیول کے ذریعہ بھیجا گیا ڈیٹا اس طرح ہے:
اب آریفآئڈی ماڈیول انٹرفیس کے لئے ، درج ذیل خصوصیات کی ضرورت ہے۔
1. کنٹرولر کے RXD پن (اعداد و شمار کو حاصل کرنے کی خصوصیت) کو چالو کرنا ضروری ہے۔
Since. چونکہ مواصلات سیریل ہیں ہمیں جب تک ڈیٹا بائی موصول ہوتا ہے اسے جاننے کی ضرورت ہوتی ہے ، تاکہ ہم مکمل بائٹ موصول ہونے تک پروگرام کو روک سکیں۔ ایسا کسی ڈیٹا کو مکمل وقفے سے وصول کرنے کے قابل کرکے کیا جاتا ہے۔
3. آریفآئڈی 8 بٹ موڈ میں کنٹرولر کو ڈیٹا بھیجتا ہے۔ تو ایک وقت میں دو حروف کنٹرولر کو بھیجے جائیں گے۔ یہ اعداد و شمار کے بلاک میں دکھایا گیا ہے
4۔فائگ 3 سے ، ماڈیول کے ذریعہ بھیجے گئے ڈیٹا میں کوئی برابری کی بٹس نہیں ہیں۔
مندرجہ بالا خصوصیات کنٹرولر کے اندراجات میں سیٹ کی گئی ہیں۔ ہم ان پر مختصر گفتگو کریں گے ،
سرخ (RXEN): یہ تھوڑا سا اعداد و شمار کی خصوصیت کو حاصل کرنے کی نمائندگی کرتا ہے ، کنٹرولر کے ذریعہ موصول ہونے والے ماڈیول کے اعداد و شمار کے لئے یہ تھوڑا سا طے کرنا ضروری ہے ، یہ RXD پن کو بھی کنٹرولر کے قابل بناتا ہے۔
براؤن (آر ایکس سی آئی ای): ڈیٹا کے کامیاب استقبال کے بعد مداخلت کے ل for یہ تھوڑا سا طے کرنا ضروری ہے۔ اس بٹ کو چالو کرنے سے ، ہمیں 8 بٹ ڈیٹا موصول ہونے کے فورا بعد ہی پتہ چل جاتا ہے۔
پنک (یو آر ایس ای ایل): یو سی ایس آر سی میں دوسرے مطلوبہ بٹس کو ترتیب دینے کے بعد ، یو سی ایس آر سی میں دوسرے بٹس کو چالو کرنے سے پہلے اس بٹ کو سیٹ کرنا ہوگا۔ URSEL غیر فعال ہونا چاہئے یا صفر پر رکھنا چاہئے۔
پیلو (UCSZ0 ، UCSZ1 ، UCSZ2): یہ تینوں بٹس ہم ڈیٹا بٹس کی تعداد منتخب کرنے کے لئے استعمال ہوتے ہیں جو ہم ایک ہی بار میں بھیج رہے ہیں یا بھیج رہے ہیں۔
چونکہ آریفآئڈی ماڈیول کے ذریعہ بھیجا گیا ڈیٹا 8 بٹ ڈیٹا ٹائپ (فیگر 3) ہے ، لہذا ہمیں یو سی ایس زیڈ 0 ، یو سی ایس زیڈ 1 کو ایک اور یو سی ایس زیڈ 2 کو صفر پر سیٹ کرنا ہے۔
اورنج (یو ایم ایس ای ایل): یہ تھوڑا سا اسی بنیاد پر مرتب کیا گیا ہے کہ آیا نظام متفقہ طور پر بات چیت کررہا ہے (دونوں مختلف گھڑیوں کا استعمال کرتے ہیں) یا ہم آہنگی سے (دونوں ایک ہی گھڑی کا استعمال کرتے ہیں) ،
چونکہ ماڈیول اور کنٹرولر مختلف گھڑیوں کا استعمال کرتے ہیں ، لہذا اس بٹ کو صفر پر سیٹ کرنا ہوگا یا تنہا رہ جانا چاہئے کیونکہ وہ سبھی طے شدہ طور پر صفر پر سیٹ ہیں۔
گرین (یوپی ایم 1 ، یو پی ایم0): یہ دونوں بٹس بٹ پیریٹی کی بنیاد پر ایڈجسٹ کیے گئے ہیں جس کو ہم مواصلات میں استعمال کر رہے ہیں۔
چونکہ آریفآئڈی ماڈیول بغیر کسی برابری کے اعداد و شمار بھیجتا ہے (تصویر 3) ، ہم نے UPM1 ، UPM0 دونوں کو صفر پر مقرر کردیا ہے یا انہیں تنہا چھوڑ دیا جاسکتا ہے کیونکہ کسی بھی رجسٹر میں موجود تمام بٹس پہلے سے صفر پر سیٹ ہوجاتی ہیں۔
نیلی (USBS): یہ تھوڑا سا اسٹاپ بٹس کی تعداد کو منتخب کرنے کے لئے استعمال کیا جاتا ہے جو ہم مواصلت کے دوران استعمال کر رہے ہیں۔
چونکہ آریفآئڈی ماڈیول ایک اسٹاپ بٹ (اعداد و شمار 3) کے ساتھ ڈیٹا بھیجتا ہے ، لہذا ہمیں صرف یو ایس ایس بٹ کو چھوڑنا ہوگا۔
اب آخر میں ہمیں باؤڈ کی شرح طے کرنے کی ضرورت ہے ، اعداد و شمار 3 سے یہ بات واضح ہے کہ آریفآئڈی ماڈیول کنٹرولر کو اعداد و شمار بھیج دیتا ہے جس میں بوڈ ریٹ 9600bb (بٹس فی سیکنڈ) ہوتا ہے۔
موزوں UBRRH کو منتخب کرکے باؤ کی شرح کنٹرولر میں مقرر کی گئی ہے ،
یو بی آر آر ایچ ویلیو کا انتخاب کراس ریفرنگ بوڈ ریٹ اور سی پی یو کرسٹل فریکوینسی کے ذریعہ کیا جاتا ہے ،
تو کراس ریفرنس کے ذریعہ یو بی آر آر ویلیو کو '6' کے بطور دیکھا جاتا ہے ، اور اس طرح باؤڈ ریٹ مقرر ہے۔
یہاں پانچ بٹن موجود ہیں ، چار امیدواروں کے ووٹوں میں اضافے کے لئے اور پانچواں امیدواروں کے ووٹوں کو صفر پر ری سیٹ کرنے کے لئے ہے۔ یہاں موجود کیپسیٹرز بٹنوں کے اچھ.ا اثر کو ختم کرنے کے لئے ہیں۔ اگر انہیں ہٹا دیا جاتا ہے تو کنٹرولر ہر بار بٹن دبائے جانے پر ایک سے زیادہ گن سکتا ہے۔
پنوں کے لئے جڑے ہوئے مزاحمات موجودہ کو محدود کرنے کے ل are ہیں ، جب بٹن کو نیچے سے زمین پر پینچنے کے لئے دبایا جاتا ہے۔ جب بھی ایک بٹن دبایا جاتا ہے تو ، کنٹرولر کا اسی پن کو نیچے کی طرف کھینچ لیا جاتا ہے اور اس طرح کنٹرولر نے پہچان لیا ہے کہ کچھ بٹن دبائے ہوئے ہیں اور اسی طرح کی کارروائی کی جانی چاہئے ، یہ امیدواروں کے ووٹوں میں اضافہ کرسکتا ہے یا بٹن دبائے ہوئے انحصار کے مطابق ووٹوں کی دوبارہ ترتیب دینا ہوسکتا ہے۔
جب متعلقہ شخص کی نمائندگی کرنے والے بٹن کو دبایا جاتا ہے تو ، کنٹرولر اسے چنتا ہے اور اضافے کے بعد اس کی یادداشت کے اندر اسی شخص کی تعداد میں اضافہ کرتا ہے جب اس میں متعلقہ افراد 16x2 LCD ڈسپلے پر اسکور ظاہر کرتا ہے۔
نیچے دیئے گئے سی کوڈ کے قدم بہ قدم ووٹنگ مشین کے کام کی بہترین وضاحت کی گئی ہے۔
کوڈ کی وضاحت
پنوں پر ڈیٹا کے بہاؤ پر قابو پانے کے ل # # ہیڈر شامل کریں
# وضاحت F_CPU 1000000 // بتانا کنٹرولر کرسٹل تعدد منسلک ہے
# شامل کریں
# وضاحت E 5 // PORTD کے 5 ویں پن کو نام "قابل" بنانا ، چونکہ یہ LCD کے قابل پن سے منسلک ہے
LCD RS پن سے منسلک ہونے کے بعد ، PORTD کے 6 ویں پن کو "رجسٹر انتخاب" کا نام دیں۔
باطل بھیج_ا_کمانڈ (دستخط شدہ چار کمانڈ)؛
باطل بھیج _a_character (دستخط شدہ چار کردار)؛
باطل بھیجیں_س_اسٹرنگ (چار * سٹرنگ_آف_چارٹر)؛
انٹ مین مین (باطل)
{
DDRA = 0xFF؛ // پورٹا ڈال آؤٹ پٹ کے طور پر
DDRD = 0b11111110؛
_ڈلی_مز (50)؛ // 50 ملی میٹر کی تاخیر
ڈی ڈی آر بی = 0b11110000؛ // کچھ پورٹ بی پنوں کو بطور ان پٹ لینا۔
UCSRB - = (1 <
// ڈیٹا کو قابل بنائے جانے سے ڈیٹا کو مکمل رکاوٹ ملتا ہے
UCSRC - = (1 <
// دوسرے بٹس کو تبدیل کرکے پہلے URSEL ترتیب دے کر ، 8 بٹ مواصلات کے لئے ترتیب دیں
UCSRC & = ~ (1 <
UBRRH & = ~ (1 <
UBRRL = 6؛ // باؤڈ کی شرح طے کرنا
int16_t VOTEA = 0؛ // person1 ووٹ اسٹوریج میموری
چار A؛ // person1 ووٹ LCD پر کردار کی نمائش کرتے ہیں
int16_t VOTEB = 0؛ ؛ // شخص 2 ووٹ اسٹوریج میموری
چار B؛ // person2 ووٹ LCD پر کردار کی نمائش کرتے ہیں
int16_t VOTEC = 0؛ ؛ // شخص 3 ووٹ میموری کو اسٹور کرتے ہیں
چار سی؛ // شخص 3 ووٹ LCD پر کردار کی نمائش کرتے ہیں
int16_t VOTED = 0؛ ؛ // person4 ووٹ اسٹوریج میموری
چار D / / / person4 ووٹ LCD پر کردار کی نمائش کرتے ہیں
// مندرجہ ذیل ٹیگوں کی ID پر مشتمل ہے ، ان کو مختلف ٹیگس کے ل must تبدیل کرنا ضروری ہے ، منصوبے کے کام کرنے کے ل These ان کو اپ ڈیٹ کرنا ہوگا
// پروگرام کو کنٹرولر میں پھینکنے کے بعد کسی کو لازمی طور پر کارڈ لینے چاہیں اور وہ ٹیگس کی شناخت کروائیں ، یہ آریفآئڈی ماڈیول کے قریب ٹیگ رکھ کر حاصل کی جاتی ہیں اور شناختی اسکرین پر دکھائی جائے گی۔ IDs حاصل کرنے کے بعد ، پروگرام کو تازہ ترین ID نمبروں کی جگہ نئے ID نمبروں کی جگہ اپ ڈیٹ کرنا ہوگا۔
چار ADMIT = {{(0x97)، (0xa1)، (0x90)، (0x92)}، {(0x97)، (0xa1)، (0x90)، (0x93)}، {(0x97)، (0xa1)، (0x90) ، (0x94)}، {(0x97)، (0xa1)، (0x90)، (0x95)}، {(0x97)، (0xa1)، (0x90)، (0x96)}}؛ |
اب اوپر میں ہم صرف پانچ کارڈز کی اجازت دے رہے ہیں ، ان کو کسی بھی تعداد میں تبدیل کیا جاسکتا ہے ،
مثال کے طور پر غور کریں کہ پہلے سے طے شدہ پروگرام کو کنٹرولر میں پھینک دیا جاتا ہے ، کارڈز حاصل کریں جن کو ایک دوسرے کے قریب ماڈیول کے بعد ایک جگہ اختیار کیا جانا چاہئے ، آپ کو ہر ایک کے لئے ID کو xxxxxxxx (907a4F87) ملے گا ،
اگر ہمارے پاس 7 ٹیگ ہیں ، تو ہمارے پاس 7 آٹھ بٹ ID ہوگی۔
// اب سات کارڈوں کے لئے یہ اسی طرح جاتا ہے // چار ADMIT = {{(0x90a)، (0x7a)، (0x4F)، (0x87)؛، // ماڈیول کے ذریعہ ID بھیجنے کے لئے میموری کو الاٹ کرنا انٹ i = 0؛ انٹ ووٹ = 0؛ انٹ k = 0؛ ارسال_ا_کمانڈ (0x01)؛ // صاف سکرین 0x01 = 00000001 _ڈیلا_س (50)؛ بھیجیں_ا_کمانڈ (0x38)؛ // ایل سی ڈی کو بتانا ہم 8 بٹ کمانڈ / ڈیٹا موڈ استعمال کررہے ہیں _ڈیلا_س (50)؛ ارسال کریں_ا_کمانڈ (0b00001111) // // LCD اسکرین آن اور کلید جھپکتے چار MEM؛ // ٹیگ کی مکمل ID کو ذخیرہ کرنے کے لئے میموری الاٹ کرنا بھیج_a_string ("آریفآئڈی نمبر")؛ // سٹرنگ بھیجنا ارسال کریں_ا_کمانڈ (0x80 + 0x40 + 0)؛ // آگے بڑھنے والے کو دوسری لائن میں منتقل کرنا جبکہ (1) { جبکہ (! (UCSRA & (1 <
{ } COUNTA = UDR؛ // UDR آٹھ بٹ کو حاصل کردہ ڈیٹا کو اسٹور کرتا ہے اور اسے ایک عدد میں لیا جاتا ہے۔ MEM = COUNTA؛ // پہلے دو حروف میموری میں اپ ڈیٹ ہوتے ہیں اٹو (کاؤنٹا ، شو ، 16)؛ // ایل سی ڈی میں متغیر نمبر رکھنے کے لئے کمانڈ (متغیر نمبر ، جس حرف میں تبدیل کرنا ہے ، کون سا بیس متغیر ہے (یہاں دس جیسے کہ ہم بیس 10 میں نمبر گن رہے ہیں)) ارسال_ا_سٹریننگ (شو)؛ // ایل سی ڈی پر کوریئر پوزیشن کرنے کے بعد دوسرے شخص کے کردار (متغیر نمبر سے تبدیل شدہ) ظاہر کرنے کے لئے ڈسپلے کو بتانا جبکہ (! (UCSRA & (1 <
{ } COUNTA = UDR؛ اٹو (کاؤنٹا ، شو ، 16)؛ ارسال_ا_سٹریننگ (شو)؛ میم = کاونٹا؛ // تیسرے اور چوتھے حروف میموری میں اپ ڈیٹ ہوتے ہیں جبکہ (! (UCSRA & (1 <
{ } COUNTA = UDR؛ اٹو (کاؤنٹا ، شو ، 16)؛ ارسال_ا_سٹریننگ (شو)؛ میم = COUNTA؛ // پانچویں اور چھٹے حروف میموری میں اپ ڈیٹ ہوتے ہیں جبکہ (! (UCSRA & (1 <
{ } COUNTA = UDR؛ اٹو (کاؤنٹا ، شو ، 16)؛ ارسال_ا_سٹریننگ (شو)؛ میم = کاونٹا؛ // ساتویں اور آٹھ حروف میموری کو اپ ڈیٹ کر رہے ہیں ارسال_ا_سٹریننگ ("")؛ ارسال_ا_کمانڈ (0x80 + 0x40 + 0)؛ UCSRB & = ~ (1 <
(i = 0؛ i <5؛ i ++) کیلئے { اگر ((MEM == ADMIT) & (MEM == ADMIT) & (MEM == ADMIT) & (MEM == ADMIT)) {// میموری کے حروف کے ساتھ ایک وقت میں دو حرفوں کا موازنہ خریدنے کے لئے جانچ پڑتال کریں پورٹ بی - = (1 <
ووٹ = 1؛ // اگر اختیار VOTE سیٹ کریں } } اگر (ووٹ == 0) // اگر ووٹ سیٹ نہیں کیا گیا تو اجازت نامہ ناکام ہوگیا { UCSRB - = (1 <
} جبکہ (ووٹ == 1) // اس لوپ کو تب تک اس وقت تک کریں جب تک کہ ووٹ نہ ملے { بھیج_a_command (0x80 + 0)؛ // لائن 1 پر صفر پر پوزیشن پر جائیں بھیج_a_string ("ابھی ووٹ دیں")؛ // ڈسپلے کرنے والا تار اگر (bit_is_clear (PINB، 0)) // جب بٹن دب جاتا ہے { ووٹ ++؛ // پہلے شخص کی ووٹ کی یادداشت میں ایک ایک کرکے اضافہ کریں ووٹ = 0؛ // ووٹ ڈالنے کے بعد لوپ کو جانے دینا } اگر (bit_is_clear (PINB، 1)) // جب بٹن 2 دب جاتا ہے { VOTEB ++؛ // اضافہ کے 2 ووٹ میموری ND ایک کی طرف سے اس شخص کو ووٹ = 0؛ } اگر (bit_is_clear (PINB، 2)) // جب بٹن 3 دب جاتا ہے { VOTEC ++؛ // اضافہ 3 ووٹ میموری RD ایک کی طرف سے اس شخص کو ووٹ = 0؛ } اگر (bit_is_clear (PINB، 3)) // جب بٹن 4 دب جاتا ہے { ووٹ ++؛ // چوتھے فرد کی ووٹ کی یادداشت میں ایک ایک کرکے اضافہ کریں ووٹ = 0؛ } اگر (ووٹ == 0) // ووٹ موصول ہونے کے بعد کلیئر ہوگیا { بھیج_a_command (0x80 + 0)؛ // لائن 1 کی صفر کی پوزیشن پر منتقل کریں بھیج_a_string ("ووٹ کے لئے شکریہ")؛ // ڈسپلے سٹرنگ (k = 0؛ k <10؛ k ++) کیلئے { _ڈیلا_س (220)؛ } پورٹ بی اور = ~ (1 <
ارسال_ا_کمانڈ (0x01)؛ ارسال_ا_کمانڈ (0x80 + 0)؛ // چاروں افراد کے ووٹوں کی نمائش ارسال_ا_سٹریننگ ("A =")؛ ارسال_ا_کمانڈ (0x80 + 2)؛ itoa (VOTEA، A، 10)؛ ارسال_ا_سٹریننگ (A)؛ ارسال_ا_کمانڈ (0x80 + 8)؛ بھیج_a_string ("B =")؛ ارسال_ا_کمانڈ (0x80 + 10)؛ اٹو (ووٹ بی ، بی ، 10)؛ بھیج_ا_سٹریننگ (بی)؛ ارسال_ا_کمانڈ (0x80 + 0x40 + 0)؛ ارسال_ا_سٹریننگ ("C =")؛ ارسال_ا_کمانڈ (0x80 + 0x40 + 2)؛ اٹوا (ووٹیک ، سی ، 10)؛ ارسال_ا_سٹریننگ (سی)؛ ارسال_ا_کمانڈ (0x80 + 0x40 + 8)؛ ارسال_ا_سٹریننگ ("D =")؛ ارسال_ا_کمانڈ (0x80 + 0x40 + 10)؛ اٹو (ووٹ ، ڈی ، 10)؛ ارسال_ا_سٹریننگ (D)؛ ارسال_ا_کمانڈ (0x80 + 0x40 + 16)؛ (k = 0؛ k <25؛ k ++) کیلئے { _ڈیلا_س (220)؛ } UCSRB - = (1 <
ارسال_ا_کمانڈ (0x01)؛ بھیجیں_ا_کمانڈ (0x80 + 0)؛ // صفر کی پوزیشن میں منتقل بھیج_a_string ("آریفآئڈی نمبر")؛ // ایک تار بھیجیں ارسال_ا_کمانڈ (0x80 + 0x40 + 0)؛ } } باطل بھیج_ا_کمانڈ (دستخط شدہ چار کمانڈ) { پورٹا = کمانڈ؛ پورٹ اور = ~ (1 <
پورٹ - = 1 <
_ڈیلا_س (50)؛ پورٹ & = ~ 1 <
پورٹا = 0؛ } باطل بھیج _a_character (دستخط شدہ چار کردار) { پورٹا = کردار؛ پورٹ - = 1 <
پورٹ - = 1 <
_ڈیلا_س (50)؛ پورٹ & = ~ 1 <
پورٹا = 0؛ } باطل بھیجیں_یا_اسٹرنگ (چار * سٹرنگ_آف_چیکٹر) { جبکہ (* string_of_characters> 0) { ارسال_ا_چارٹر (* سٹرنگ_آف_چارٹر ++)؛ } } |