Агуулгын хүснэгт:

Arduino -ийг соронзон карт уншигч болгон хувиргаарай!: 9 алхам (зурагтай)
Arduino -ийг соронзон карт уншигч болгон хувиргаарай!: 9 алхам (зурагтай)

Видео: Arduino -ийг соронзон карт уншигч болгон хувиргаарай!: 9 алхам (зурагтай)

Видео: Arduino -ийг соронзон карт уншигч болгон хувиргаарай!: 9 алхам (зурагтай)
Видео: SKR Pro v1.1 - Reprap Discount Smart Controller 2024, Долдугаар сарын
Anonim
Arduino -гоо соронзон карт уншигч болгоно
Arduino -гоо соронзон карт уншигч болгоно
Arduino -гоо соронзон карт уншигч болгоно
Arduino -гоо соронзон карт уншигч болгоно
Arduino -гоо соронзон карт уншигч болгоно
Arduino -гоо соронзон карт уншигч болгоно

Хүн бүхэн соронзон карт уншигч ашиглаж байсан гэдэгт би итгэж байна. Энэ өдрүүдэд хэн бэлэн мөнгө авч явдаг вэ? Тэднийг гартаа авах нь тийм ч хэцүү биш бөгөөд миний дуртай орон нутгийн цахилгаан барааны дэлгүүрээр явж байхдаа би эдгээр залуус дүүрэн хогийн сав олсон юм. Тиймээс …. Мэдээжийн хэрэг, би нэг зүйлийг аваад гэртээ авчирсан бөгөөд үүгээр ямар төрлийн зүйл хийж болох, AVR -ийг харах боломжтой болсон.

Энэхүү зааварчилгаа нь Magtek соронзон карт уншигчийг AVR эсвэл Arduino/clone -т хэрхэн холбож, картын эхний мөрөөс өгөгдлийг уншихыг танд үзүүлэх болно. Суудлаа тэврэх; соронзон карт уншигч нь өндөр битийн хурдтай!

Алхам 1: Тоног төхөөрөмжийн жагсаалт

Тоног төхөөрөмжийн жагсаалт
Тоног төхөөрөмжийн жагсаалт
Тоног төхөөрөмжийн жагсаалт
Тоног төхөөрөмжийн жагсаалт

Эхлэхийн тулд танд хэрэгтэй хэдэн зүйл байна.

  • Соронзон карт уншигч (Минийх бол Magetk 90mm хос толгойтой уншигч. 5.00 доллар)
  • AVR, Arduino, эсвэл clone (ATmega328p ~ $ 4.30 Mouser.com дээрээс
  • гагнуургүй талхны хавтан
  • зарим утас
  • Хэрэв танд ийм зүйл таалагдаж байвал толгой гарч магадгүй.
  • Таны цуваа портыг унших зүйл. Би BattleDroids.net -ээс AVR терминалыг ашигладаг

Үүнийг эхлүүлэхийн тулд танд хэрэгтэй бүх зүйл. Магкард уншигчаас хамааран та тодорхой уншигчтай ажиллахын тулд эдгээр зааврыг, хамгийн найдвартай нь кодыг өөрчлөх шаардлагатай болж магадгүй юм. Гэсэн хэдий ч миний бичсэн код таныг нэлээд хол байлгана гэж найдаж байна.

Алхам 2: Өөрөө өөрөө ажилладаг соронзон карт уншигчид

Өөрөө ажилладаг соронзон карт уншигчид
Өөрөө ажилладаг соронзон карт уншигчид
Өөрөө ажилладаг соронзон карт уншигчид
Өөрөө ажилладаг соронзон карт уншигчид
Өөрөө ажилладаг соронзон карт уншигчид
Өөрөө ажилладаг соронзон карт уншигчид
Өөрөө ажилладаг соронзон карт уншигчид
Өөрөө ажилладаг соронзон карт уншигчид

Соронзон карт уншигч нь "өөрөө цаг" хийдэг бөгөөд энэ нь холбогдсон микроконтроллер синхрончлох боломжтой строб хэмээх цагийг өгдөг гэсэн үг юм. Энэ бол буян юм. Энэ нь цагны дохио хайх, дохиог цагны импульс дээр шууд төвлөрүүлэх талаар санаа зовох хэрэггүй гэсэн үг бөгөөд цагийн дохионы чихэрлэг цэг рүү ямар ч төвөг учруулахгүй. Картыг шудрах тухай бодоход энэ нь утга учиртай болно: хүн бүр өөр өөр хурдаар, зарим нь удаан, зарим нь бусдаас хурдан гүйдэг. Өөрөө цаг тоолох нь миний хөөрхөн эмээ хүртэл картаа бугуйгаа хугалахгүй ашиглах боломжийг олгодог. Давхар товшилтыг бүртгэх товшилтын хооронд хичнээн хугацаа байх ёстойг тодорхойлдог түүний тохиргоог өөрчлөх шаардлагатай байгааг надад сануулж байна.

Энэхүү карт уншигчийн өгөгдөл нь стробыг шугамд оруулахаас өмнө 1.0 -д хүчинтэй байдаг тул өөрийгөө "битийн цаг" руу оруулахаа хойшлуулахаас санаа зовох зүйлгүй болно. Миний ашиглаж байгаа хоёр толгойтой уншигчийн хувьд унших боломжтой хоёр дата зам байдаг. Энэхүү номонд би таныг эхлүүлэхийн тулд эхний дууны эхний хэсгээс уншиж байгааг харуулах болно. Та таван холболт хийх шаардлагатай болно (хэрэв цөөн тооны оролт/гаралтын портыг ашиглахын тулд илүү нарийн тохируулагдсан хяналтаас татгалзахгүй бол дөрвөн холболт). Доорх зургийг үзээрэй. Улаан утас нь +5V хүртэл, хар утас нь газарддаг. Ногоон утас нь /CARD_PRESENT; шар утас нь /STROBE, цагаан утас нь /DATA1. Урагш ташуу зураас (/) нь өгөгдөл урвуу байна гэсэн үг юм. Бага дохиог (өөрөөр хэлбэл 0) нэг эсвэл өндөр гэж уншдаг. Бусад холбогч нь хүрэн /STROBE2, улбар шар /DATA2. Бид эдгээрийг ашиглахгүй. Хэрэв та хүсвэл /CARD_PRESENT -ийг мартаж болно. Энэхүү өгөгдлийн шугам нь ойролцоогоор 17 толгойн урсгал эргүүлсний дараа буурдаг бөгөөд энэ нь карт байгаа эсэхийг харуулдаг (жишээ нь, таны уншигч хуурамч мэдээлэл илгээдэг гэх мэт санамсаргүй дуу чимээ биш) бөгөөд таны авч буй өгөгдөл нь картын өгөгдөл болохыг батлахад ашиглагддаг. хог биш. Хэрэв та өгөгдөл дамжуулах эхлэлийг шалгаж байгаа бол энэ холболтыг алгасаж болно. Энэ тухай дараа дэлгэрэнгүй. Доороос харж болно, би талхны тавцанд холбогдсон тэгш өнцөгт эрэгтэй толгойг ашигласан бөгөөд уншигчаа үүнтэй холбосон. Би PIND2 (Arduino дээрх дижитал зүү 2) руу /STROBE хийх, /CARD_PRESENT -ийг PIND3 руу (жишээ болгох зорилгоор), /DATA1 -ийг PIND4 руу холбосон. Эдгээр тээглүүрүүд дээр хөвөхгүй байхын тулд идэвхжүүлэлтийг идэвхжүүлээрэй. Би бас Arduino -г нүцгэн ясны AVR -ээр сольсон, учир нь энэ нь талхны тавцан дээр таарах дуртай.

Алхам 3: Соронзон картын үндэс

Соронзон картын үндэс
Соронзон картын үндэс

Соронзон картыг уншихын тулд хийх ёстой үндсэн функцууд нь: 1. Картыг шударсныг илрүүлэх 2. Мэдээллийн урсгалыг унших 3. Карт дууссаныг илрүүлэх 4. Өгөгдлийг боловсруулах 5. Дэлгэцийг харуулах өгөгдөл Нэгдүгээрт, би та өөрийн код бичиж эхлэхэд мэдэх шаардлагатай соронзон картын үндсийг танилцуулах болно.

Соронзон картын стандарт

Соронзон картуудыг ISO дараах стандарт баримт бичгүүдэд стандартчилдаг: 7810 Зээлийн картын хэмжээтэй баримт бичгийн физик шинж чанар 7811-1 Embossing 7811-2 Соронзон тууз-дарамт багатай 7811-3 товойлгон тэмдэгтүүдийн байршил 7811-4 1 ба 2 замын байршил 7811- 5 3 -р замын байршил 7811-6 Соронзон тууз - өндөр шахалт 7813 Санхүүгийн гүйлгээний картууд Таны харж байгаагаар санхүүгийн картыг тусдаа баримт бичигт тусгасан бөгөөд ихэвчлэн таны хүнсний карт эсвэл олон улсын дуудлагын картаас өөр форматтай байдаг. Та эдгээр ялгааг програмчлах хэрэгтэй болно. Би зүгээр л зээлийн карт, даатгалын карттай байсан тул эдгээр төрлүүдийг програмчилсан (хоёулаа B форматтай байдаг).

Картын формат

Соронзон картны хэд хэдэн формат байдаг. А ба В формат нь нийтлэг байдаг бөгөөд В бол миний үзсэн хамгийн түгээмэл хэлбэр бөгөөд энэ кодыг дэмждэг. C -аас M хүртэлх форматыг ISO хамгаалдаг гэж би бодож байна, харин N -ээс ?? байгууллагын захиалгат хэрэглээнд зориулагдсан болно. 1-р зам Санхүүгийн картуудын хувьд эхний зам нь нэг инч тутамд 210 битээр бичигддэг бөгөөд энэ нь дээрээс картны эхний 0.110 "юм. Өгөгдлийг" картын мэдээлэл "гэж тэмдэгт бүрт 7 бит болгон кодлодог. Энэ нь 6 бит юм. Тэмдэгт ба жаахан тэнцүү. 1 -р зам дээр ~ 79 үсэг тоон тэмдэгт байдаг. Физик дараалал нь урвуу байна. Өөрөөр хэлбэл өгөгдөл нь картан дээр арагшаа бичигдсэн байдаг (тэгэхээр таны програм хангамж унших болно). паритет сондгой байна. Картын мэдээллийн формат дараах байдалтай байна.

[SS] [FC] [Үндсэн данс #] [FS] [Нэр] [FS] [Нэмэлт мэдээлэл] [FS] [ES] [LRC] энд:

SS Start sentinel FC Формат код FS Талбар тусгаарлагч ES End sentinel LRC Урт хугацааны илүүдлийг шалгах тэмдэгт Нэг SS = '%', FC = форматуудын нэгийг (олон удаа B байх болно), FS ихэвчлэн '', ES нь '?' ба LRC тэмдэгт нь стандартад заагаагүй боловч ихэвчлэн '<' байдаг. Карт дээр арагш бичихээс гадна өгөгдөл нь сондгой тэнцүү бит бөгөөд ASCII -ээс 0x20 хэмжээтэй байна. Бид өгөгдлийг боловсруулахдаа үүнийг зохицуулах болно. 2-р зам Хоёр дахь зам нь 0.110 "өргөн бөгөөд картны дээд хэсгээс 0.110-аас эхэлдэг. Түүний нягтрал нь нэг инч тутамд 75 бит байна. Өгөгдөл нь нэг тэмдэгтэд 5 бит бөгөөд зөвхөн 40 орчим тооны тооноос бүрдэнэ. Энэ зам дээрх үсэг. Картын өгөгдлийн формат нь энэ бүтцийг дагаж мөрдөх ёстой

[SS] [үндсэн данс #] [FS] [нэмэлт мэдээлэл | дурын өгөгдөл] [ES] [LRC]

Хоёр дахь замын SS нь цэг таслал юм: ';' болон FS бол '=' Энэхүү ариун мэдлэгийг эзэмшсэнийхээ дараа дээр дурдсан процедурыг хэрэгжүүлж буй кодыг харахын тулд дараагийн алхамуудаа үргэлжлүүлээрэй.

Алхам 4: Картыг шударсныг илрүүлэх

Картыг шудрах үед илрүүлэх
Картыг шудрах үед илрүүлэх

1. Картыг албан ёсоор шударсныг илрүүлэхийн тулд /CARD_PRESENT зүүг доош унасан эсэхийг шалгах боломжтой. Аз болоход энэ нь үнэхээр шаардлагагүй юм. Бид дараа нь хүчинтэй картыг шалгах болно. Эсвэл та стробын зүүгээ зүү дээр хэзээ байрлуулсан болохыг харах боломжтой боловч энэ нь танд маш олон тооны тэгийг цэвэрлэх болно. Уншигч танд 60-70 орчим тэгийг илгээж, өгөгдлийг танилцуулах гэж байгааг мэдэгдэх болно. Гэсэн хэдий ч бид хоёртын өгөгдлийн мөн чанарыг ашиглан битүүдийг хэзээ бичиж эхлэхээ тодорхойлох болно. Нэгдүгээр замыг эхлүүлэх дохио (SS) нь хувийн тэмдэг (%) юм. Энэ нь хоёртын утга нь 0010 0101 бөгөөд энэ нь 1010 001 хэлбэрээр хадгалагдах (мөн унших) гэсэн үг юм (энэ нь 7 бит бөгөөд 8-р бит дамжуулагдаагүй болно). Өгөгдөл нь хоцрогдсон ч гэсэн хоёртын ASCII утгатай таарахгүй байгааг ухаалаг уншигч анзаарах болно. Hex -ээс 0x20 хямдарсан болохоор тэр. % Тэмдэг нь 0x25, 0100 0101 нь 0x05 байна. Картын өгөгдлийг 0x20 утгаас хассан болно. Өндөр зүүгээр өлгөөтэй байгаа нь хачирхалтай паритет юм. Утгад сондгой тооны "1" байхаар байрлуулсан байна. Хүчин төгөлдөр карт нь энэ харуул хамгаалалтаас үргэлж эхэлдэг гэдгийг бид мэддэг бөгөөд паритет бит нь 1 байдаг тул өгөгдлийн зүү дээр анхны HIGH -LOW хооронд шилжих шилжилтийг илрүүлэх үед бид дөнгөж хүлээн авч эхэлснийг мэдэж байна. картаас харуул хамгаалалтыг эхлүүлэх. Одоо, энэ нь үргэлж үнэн байдаггүй бөгөөд тэнэг төлөвлөгөө бол /CARD_PRESENT картыг нэмж LOW дутуу байгаа эсэхийг шалгах явдал юм. SS -ийн эхлэлийг илрүүлэх хамгийн хялбар арга бол /STROBE -ийн унаж буй ирмэг дээр гадны тасалдал үүсгэх явдал юм. Мэдээлэл нь уналтын ирмэгээс өмнө бидэнд 1.0 хүчинтэй байдаг тул унаж буй ирмэгийг түүвэрлэж авсны дараа та /DATA1 зүүг уншиж, зөв утгыг авах боломжтой болно. Унаж буй ирмэг дээр таны гадаад тасалдлыг үүсгэх код энд байна.

voidInitInterrupt (void) {// BSET тасалдлыг тохируулах (EIMSK, INT0); // гадаад тасалдлын маск BSET (EICRA, ISC01); // буурах ирмэг BCLR (EICRA, ISC00); // буурах ирмэг BSET (SREG, 7); // Би SREG дээр байна}

Миний бүх програмд оруулсан нийтлэг зүйлд BSET ба BCLR -ийн тодорхойлолтыг олж болно. Хэрхэн бит тохируулах талаар асуух зүйл байвал энэ файлыг үзнэ үү. Одоо тасалдлыг эхлүүлэх үед бид /DATA1 -ийг (миний кодонд CARD_DATA гэж тодорхойлсон) дээж авч, ерөнхий зориулалтын IO бүртгэлд жаахан тохируулахыг хүсч байна. Хэрэв бид 7 -р бит дээр байгаа бол бүртгэлийг манай дэлхийн буферт тэмдэгт болгон хадгална уу. Би хурдан нэвтрэх боломжтой тул GPIOR0 бүртгэлийг ашигладаг. Псевдо код нь иймэрхүү байна:

16 битийн таймерыг зогсооно уу Таймерыг цэвэрлэх бол БҮРТГЭЛИЙГ БУУРУУЛАХ BIT = 1-ийг тохируулаарай, ингэснээр бид дахиад 0-ийг алгасахгүй бол DATA нь HIGH Set BIT = 0 бол REGISTER Decrement BIT бол BIT бол буферт байт нэмнэ үү. Өсөлтийн индекс BIT -ийг дахин тохируулах

Хэрэв та өөрөөсөө яагаад өсөлтийг бууруулахын оронд яагаад бууруулж байгааг асууж байгаа бол өгөгдөл нь ухарсан байдгийг санаарай, тиймээс битүүдийг LSB -ээс MSB руу дамжуулахын оронд бид тэдгээрийг MSB -ээс LSB рүү хадгалдаг тул битүүдийг буцаах шаардлагагүй болно. дараа нь өгөгдлийг боловсруулах үед. Хэрэв та үнэхээр хүсч байгаа бол энд 0x20 зургаан өнцөгтийг нэмж болно, гэхдээ эдгээр зургууд дээр 5us орчим байдаг тул би энэ тасалдлын үйлчилгээний горимд боловсруулалтыг хамгийн бага хэмжээнд байлгаж байна.

ISR (INT0_vect) {StopTimer (); ClearTimer (); хэрэв (! BCHK (PIND, CARD_DATA1)) // урвуу бага = 1 {BSET (GPIOR0, бит); -бит; bDataPresent = 1; } өөр бол (bDataPresent) {BCLR (GPIOR0, бит); -бит; } бол (бит <0) {buff [idx] = (char) GPIOR0; ++ idx; бит = 6; } StartTimer ();} Хэрэв та цаг хугацааны бизнес гэж юу болохыг сонирхож байгаа бол карт уншигчийг хэзээ орхисныг тодорхойлох алхамд үүнийг хамруулсан болно.

Алхам 5: Өгөгдлийн урсгалыг уншина уу

Өгөгдлийн урсгалыг уншина уу

Бидний унаж буй гадаад тасалдлын тасалдлын үйлчилгээний горимын нэг хэсэг тул өгөгдлийг хэрхэн уншихыг би танд аль хэдийн зааж өгсөн. Өөр нэг арга бол ISR дээр туг байрлуулах бөгөөд үндсэн циклд тугийг асууж, өгөгдлийг ийм байдлаар унших болно, гэхдээ миний танилцуулсан арга нь илүү цэвэр гэдэгт би итгэж байна. Өөрийн шүүгч байгаарай, гэхдээ өөрийн MCU зөвшөөрөх болно. Гэсэн хэдий ч карт нь Элвисийг татаж, барилгаас гарсныг хэрхэн яаж илрүүлэх талаар олж мэдье.

Алхам 6: Уншигчаас гарч буй картыг илрүүлэх

Уншигчаас гарч буй картыг илрүүлэх
Уншигчаас гарч буй картыг илрүүлэх

Карт дууссаныг олж мэдэх

Албан ёсоор, /CARD_PRESENT зүүг дахин дээшилсэн эсэхийг шалгахын тулд дээж авах болно, гэхдээ бидэнд өөр I /O порт авахад steenkin ' /CARD_PRESENT шаардлагагүй болно. Энд эдгээр таймерууд орж ирдэг. Бид /STROBE дээр уналтын ирмэгийг илрүүлсэн тул тасалдал дуудах бүрт бид таймерыг зогсоож, таймерын утгыг арилгаж, уншиж эхэлдэг. Уншиж дуусаад таймерыг дахин эхлүүлнэ. Дотор муухайрах, эсвэл таймер тодорхой утгад хүрэх хүртэл давтана. Энэ нь сүүлийн тасалдлыг дуудсан бөгөөд өөр өгөгдөл ирээгүй гэсэн үг юм, тиймээс бид үүнийг ийм гэж үзээд цуглуулсан өгөгдлөө боловсруулж эхэлнэ. Таймеруудын хувьд бид TIMER1, өөрөөр хэлбэл 16 битийн таймер ашигладаг. Би AVR -д гадна 16 Mhz резонатор ашиглаж байна. Хэрэв та arduino ашиглаж байгаа бол та ч бас тэгсэн байх. Тиймээс, би 1024 гэсэн урьдчилсан тооцоолох утгыг сонгосон бөгөөд энэ нь таймер (16,000, 000/1024) дахин нэмэгдэх болно. Өөрөөр хэлбэл, энэ нь секундэд 15,625 удаа "тэмдэглэх" болно. /CARD_PRESENT нь өндөр байх бөгөөд карт нь сүүлийн өгөгдлийн битийн дараа уншигчийг 150 орчим минутын дараа орхисныг илтгэнэ. Үүнийг мэдээд би секундын 1/4 тутамд шалгахаар шийдлээ. Энэ нь иймэрхүү харагдах болно:

(((F_CPU) / PRESCALER) / 4) Энэ нь ойролцоогоор 3900 орчим болж хувирна. Тиймээс TCNT1 таймер 3900 хүрэхэд энэ нь 300 м орчим болсон гэдгийг мэдэж байгаа бөгөөд карт уншигчдыг орхисон гэж би аюулгүйгээр дүгнэж чадна. Хялбар

#тодорхойлох PRESCALER 1024#CHECK_TIME ((F_CPU / PRESCALER) / 4) // 250 ms#тодорхойлох StartTimer () BSET (TCCR1B, CS10), BSET (TCCR1B, CS12) // 1024 prescaler#тодорхойлох StopTimer () BCLR (TCCR1), CS10), BCLR (TCCR1B, CS12)#ClearTimer () (TCNT1 = 0) -ийг тодорхойлох Та тасалдал бүрт таймерыг эхлүүлж, зогсоож, цэвэрлэснийг ISR дээр харсан. Одоо үндсэн давталт дээр бид цаг хэмжигч бидний зорилтот хэмжээнд хүрсэн эсэхийг шалгаж, хэрэв тийм бол өгөгдөл боловсруулж эхэлнэ.

for (;;) {if (TCNT1> = CHECK_TIME) {

StopTimer (); ClearTimer (); ProcessData (); ReadData (); idx = 0; бит = 6; bDataPresent = 0; memset (& buff, 0, MAX_BUFF_SZ1); }} Одоо өгөгдлийг боловсруулахад аюулгүй байна

manoli.net/csharpformat/ форматтай код

Алхам 7: Өгөгдлийг боловсруулах

Өгөгдлийг боловсруулах
Өгөгдлийг боловсруулах

Өгөгдлийг боловсруулах

Боловсруулах үе шат нь дараахь зүйлээс бүрдэнэ.

  • хүчин төгөлдөр SS байгаа эсэхийг шалгаж байна
  • тэгш байдлыг шалгаж байна
  • ASCII руу хөрвүүлэх
  • хүчин төгөлдөр ES байгаа эсэхийг шалгаж байна
  • LRC шалгаж байна

Энд би зүгээр л тэр битийг тэг болгосны хувьд паритетийг шалгахад санаа зовохгүй байна. Би бас энэ жижиг гарын авлагад зориулж LRC -ийг тооцдоггүй. Энэ нь илүү бүрэн гүйцэд хэрэгжсэн програм хангамжийн хүсэж болох зүйл байж болох юм. Дээрх алхмуудыг хийх өгөгдлийг боловсруулах код энд байна. Үүнийг доорх зурган дээрээс олоорой. Үүнийг тайлбарласан бөгөөд нэлээд тайлбартай байгаа. Паритет ба ASCII -ийн талаархи тусгай тэмдэглэл: Би зүгээр л паритын битийг (7 -р бит … өөрөөр хэлбэл ард нь 6 тэгтэй 1) арилгаж, "картын өгөгдөл" -ээс хөрвүүлэхийн тулд утганд 0x20 нэмэх ёстой. Энэ бол энэ тухай юм.

Алхам 8: Өгөгдлийг харуулах

Өгөгдлийг харуулах
Өгөгдлийг харуулах
Өгөгдлийг харуулах
Өгөгдлийг харуулах

Өгөгдлийг харуулах

Дэлгэц нь RS232 эсвэл USB -ээр AVR -т холбогдохын тулд миний тусгайлан бичсэн терминал програм руу орно. Энэ програмыг AVR терминал гэж нэрлэдэг. ReadData () арга нь маш муухай бөгөөд миний бодож олсон хувилбараас илүү цэвэрхэн шийдлийг олохыг танд зөвлөж байна. Гаралт нь нэгдүгээрт эрүүл мэндийн даатгалын карт, хоёр дахь нь VISA карт юм. Зургийн зүүн дээд буланд байгаа дээр дарж илүү сайн харахын тулд анхны эсвэл том зургийг сонгоно уу.

Алхам 9: Код татаж авах, нэгтгэх

Энэхүү зааварчилгаанд би соронзон карт уншигчдын үндсэн ойлголтуудын талаар ярилцаж, соронзон картнаас өгөгдөл унших ажлыг зөв чиглэлд эхлүүлэхийн тулд хэдэн кодыг үзүүлэв. 2 -р дууг унших, тайлах, LRC -ийг тооцоолох, байт тус бүрийн сондгой тэнцвэрийг тооцоолох гэх мэт өөр олон ажлыг хийж болно. Бүрэн эх кодыг доор татаж авах боломжтой. Үүнийг AVR Studio 4.17 дээр бичсэн болно. Энэхүү зааварчилгаа танд таалагдсан гэж найдаж байна. Урьдын адил танд ямар нэгэн сэтгэгдэл, санал ирэхийг тэсэн ядан хүлээж байна.

Зөвлөмж болгож буй: