12
Unicon 181 การอานคาหรือรับคาจากสวิตช เปนความสามารถหนึ่งที่ไมโครคอนโทรลเลอรสมัยใหมตองรองรับและ เชื่อมตอใชงานได โดยเฉพาอยางยิ่งกับการติดตอสวิตชกดจํานวนมากเปน 10 ตัวขึ้นไป การตอแบบพื้นฐานใน ลักษณะสวิตชหนึ่งตัวตอขาพอรตหนึ่งขา เปนการเชื่อมตอที่งายทั้งทางฮารดแวรและกระบวนการทางซอฟตแวร แตจะสิ้นเปลืองและทําใหขาพอรตของไมโครคอนโทรลเลอรไดรับการจัดสรรไปใชงานแบบไมคุมคา ทางออกของการใชงานสวิตชจํานวนมากกับไมโครคอนโทรลเลอรคือ ทําการจัดวงจรการเชื่อมตอ สวิตชใหมใหเปนแบบเมตริกซ เรียกวา วงจรสวิตชแบบเมตริกซ (matrix switch) ดังแสดงตัวอยางวงจรในรูป ที่ 8-1 สวิตชจะถูกตอกันในแนวแกนตั้งและแกนนอน เรียกสายสัญญาณในแนวตั้งวา หลัก หรือ คอลัมน (column) ในขณะที่สายสัญญาณในแนวนอนจะเรียกวา แถว หรือ โรว (row) ดังนั้นคาของสวิตชจึงประกอบดวย ตําแหนง ในแนวคอลัมนและโรว กระบวนการที่จะทําใหไดมาซึ่งคาของสวิตชมีขั้นตอนพอสมควร แตวงจรของสวิตชแบบ นี้มีขอดีคือ รองรับการเพิ่มของสวิตชไดอยางสะดวก เพียงเพิ่มเติมจํานวนสวิตชและแกไขซอฟตแวรอีกเล็กนอยเทา นั้น ทําใหวงจรสวิตชเมตริกซเปนที่นิยมใชมากในระบบควบคุมอัตโนมัติหรือกึ่งอัตโนมัติที่มีจํานวนสวิตชมากกวา 8 ตัว ในการใชงานทั่วไปจะเรียกสวิตชแบบเมตริกซนี้วา คียแพด (keypad) R1-C1 R1-C2 R1-C3 R1-C4 R2-C1 R2-C2 R2-C3 R2-C4 R3-C1 R3-C2 R3-C3 R3-C4 R4-C1 R4-C2 R4-C3 R4-C4 R1 R2 R3 R4 C1 C2 C3 C4 รูปที่ 8-1 วงจรพื้นฐานของสวิตชมเตริกซหรือคียแพด 4x4 จุด และหนาตาของคียแพด 4x4 จุดที่มีพื้นฐานโครงสรางวงจรมาจากสวิตชเมตริกซ 4x4 จุด (ภาพประกอบจาก www.digitkey.com, www.mikroe.com, www.futurelec.com)

Unicon08-181192

Embed Size (px)

DESCRIPTION

 

Citation preview

Unicon 181

การอ านค าหร ือร ับค าจากสว ิตช เป นความสามารถหน่ึ งที ่ไมโครคอนโทรลเลอร สมั ยใหม ต องรองร ับและเชื ่อมต อใช งานได โดยเฉพาอย างยิ่ งกั บการติ ดต อสวิ ตช กดจํ านวนมากเป น 10 ตั วข้ึ นไป การต อแบบพื้ นฐานในล ักษณะสว ิตช หนึ ่งต ัวต อขาพอร ตหนึ ่งขา เป นการเชื ่อมต อที ่ง ายทั ้งทางฮาร ดแวร และกระบวนการทางซอฟต แวร แต จะสิ้ นเปลื องและทํ าให ขาพอร ตของไมโครคอนโทรลเลอร ได รั บการจั ดสรรไปใช งานแบบไม คุ มค า

ทางออกของการใช งานสวิ ตช จํ านวนมากกั บไมโครคอนโทรลเลอร คื อ ทํ าการจั ดวงจรการเชื่ อมต อสวิ ตช ใหม ให เป นแบบเมตริ กซ เรี ยกว า วงจรสว ิตช แบบเมตร ิกซ (matrix switch) ด ังแสดงตั วอย างวงจรในร ูปที ่ 8-1 สว ิตช จะถ ูกต อก ันในแนวแกนต้ั งและแกนนอน เร ียกสายสั ญญาณในแนวตั ้งว า หล ัก หร ือ คอล ัมน (column)ในขณะที ่สายสั ญญาณในแนวนอนจะเร ียกว า แถว หร ือ โรว (row) ด ังนั ้นค าของสว ิตช จ ึงประกอบด วย ต ําแหน งในแนวคอล ัมน และโรว กระบวนการที ่จะท ําให ได มาซึ ่งค าของสว ิตช ม ีขั ้นตอนพอสมควร แต วงจรของสว ิตช แบบนี ้ม ีข อด ีค ือ รองร ับการเพิ ่มของสว ิตช ได อย างสะดวก เพ ียงเพิ ่มเต ิมจ ํานวนสว ิตช และแก ไขซอฟต แวร อ ีกเล ็กน อยเท านั ้น ท ําให วงจรสว ิตช เมตร ิกซ เป นที ่น ิยมใช มากในระบบควบค ุมอ ัตโนม ัต ิหร ือกึ ่งอ ัตโนม ัต ิที ่ม ีจ ํานวนสว ิตช มากกว า8 ต ัว ในการใช งานทั ่วไปจะเร ียกสว ิตช แบบเมตร ิกซ นี ้ว า ค ีย แพด (keypad)

R1-C1 R1-C2 R1-C3 R1-C4

R2-C1 R2-C2 R2-C3 R2-C4

R3-C1 R3-C2 R3-C3 R3-C4

R4-C1 R4-C2 R4-C3 R4-C4

R1

R2

R3

R4

C1 C2 C3 C4

รู ปที่ 8-1 วงจรพ้ื นฐานของสวิ ตช มเตริ กซ หรื อคี ย แพด 4x4 จุ ด และหน าตาของคี ย แพด 4x4จ ุดที ่ม ีพ้ื นฐานโครงสร างวงจรมาจากสว ิตช เมตร ิกซ 4x4 จ ุด (ภาพประกอบจาก www.digitkey.com,www.mikroe.com, www.futurelec.com)

182 Unicon

มี ตั วอย างวงจรเชื่ อมต อสวิ ตช เมตริ กซ ขนาด 4x4 จุ ดกั บไมโครคอนโทรลเลอร แสดงในรู ปที่ 8-2 ใช ขาพอร ตของไมโครคอนโทรลเลอร เชื่ อมต อเข ากั บสวิ ตช เมตริ กซ รวม 8 เส นคื อ สายของคอลั มน 4 สาย (C1 ถึ งC4) และสายทางโรว อี ก 4 สาย (R1 ถึ ง R4) โดยเฉพาะที่ ขาพอร ตที่ ต อกั บแนวคอลั มน ทั้ งหมดจะต องกํ าหนดให ทํ างานเป นอิ นพุ ต และควรมี ตั วต านทานต อพู ลอั ปไว เพื่ อกํ าหนดสภาวะเริ่ มต นที่ ไม มี การกดสวิ ตช

ในการท ํางานไมโครคอนโทรลเลอร จะส งข อม ูล “0” ไปย ังขาพอร ตที ่ต อก ับสายโรว ของสว ิตช เมตร ิกซ เริ ่มจาก R1 ไล ไปจนถ ึง R4 นั ่นค ือข อม ูลที ่ส งออกไปจะม ีด วยก ัน 4 ค าค ือ 1110, 1101, 1011 และ 0111 ในท ุกครั ้งที ่ม ีการส งข อม ูลไปย ังสายโรว หร ือแถวของสว ิตช เมตร ิกซ ไมโครคอนโทรลเลอร จะอ านค าที ่ขาพอร ตซึ ่งต อก ับสายคอล ัมน ทั ้ง 4 ขาเข ามาด วย หากไม ม ีการกดสว ิตช ค าของขาพอร ตที ่ต อก ับสายคอล ัมน ของสว ิตช เมตร ิกซ จะเป น 1111ทั ้งหมด ถ าหากม ีการกดค ีย ค าของข อม ูลก ็จะไม เป น 1111 อ ีกต อไป เป นการแจ งให ทราบว า ม ีการกดสว ิตช เมตร ิกซ ขึ ้นแล ว จากนั ้นไมโครคอนโทรลเลอร ก ็จะค นหาตํ าแหน งต อไป

R1-C1 R1-C2 R1-C3 R1-C4

R2-C1 R2-C2 R2-C3 R2-C4

R3-C1 R3-C2 R3-C3 R3-C4

R4-C1 R4-C2 R4-C3 R4-C4

R1

R2

R3

R4

ไมโครคอนโทรลเลอร

C1 C2 C3 C4

พอรตอินพุต

พอรตเอาตพุต

+5V

4.7k~10k

ร ูปที ่ 8-2 วงจรเชื ่อมต อสวิ ตช เมตร ิกซ ขนาด 4x4 จ ุดเข าก ับไมโครคอนโทรลเลอร

Unicon 183

เพื่ อความสะดวกในการเรี ยนรู และทดลองการเชื่ อมต อกั บสวิ ตช เมตริ กซ หรื อคี ย แพดของฮาร ดแวร Wiring I/O ในที่ นี้ จึ งนํ า ZX-SW16 แผงวงจรสวิ ตช เมตริ กซ 4x4 จุ ดมาใช ประกอบในการทดลอง ในรู ปที่ 8-3แสดงการจั ดวางตํ าแหน งของสวิ ตช บนแผงวงจร ZX-SW16 และวงจรสมบู รณ

แผงวงจร ZX-SWITCH16 ได ร ับการออกแบบให สามารถเล ือกต ิดต้ั งต ัวต านทานทั ้งแบบพ ูลอ ัปหร ือพ ูลดาวน เพื ่อก ําหนดสถานะของสายส ัญญาณในขณะที ่ไม ม ีการกดสว ิตช โดยต ัวต านทานที ่แนะน ําค ือ ต ัวต านทานแบบเน ็ตเว ิร ก 5 ขา ซึ ่งภายในจะม ีโครงสร างเป นต ัวต านทาน 4 ต ัวที ่ต อขาหนึ ่งร วมก ัน ด ังแสดงในร ูปที ่ 8-4

จุ ดต อที ่ไม ได กํ าหนดชื่ อหรื อจุ ดต อรู ปสี่ เหลี่ ยมจะเป นจุ ดบ ัดกรี ลอย ผู ใช งานสามารถต อเข ากั บไฟเลี้ ยงหรื อกราวด ก็ ได ดั งในรู ปที ่ 8-5 หากต อเข าก ับไฟเลี้ ยงก็ จะเป นการกํ าหนดให การต อตั วต านทานเข าก ับแผงวงจรสวิ ตช นี้ เป นแบบพู ลอั ป นั่ นคื อ มี การกํ าหนดสถานะลอจิ ก “1” ให กั บสายคอลั มน ในขณะที่ ไม มี การกดสวิ ตช หากต อกราวด ก ็จะเป นการกํ าหนดให การต อตั วต านทานเข าก ับแผงวงจรสว ิตช นี้ เป นแบบพ ูลดาวน นั่ นคื อ มี การกํ าหนดสถานะลอจิ ก “0” ให กั บสายคอลั มน ในขณะที่ ไม มี การกดสวิ ตช

R1

R2

R3

R4

C1 C2 C3 C4

R1-C1 R1-C2 R1-C3 R1-C4

R2-C1 R2-C2 R2-C3 R2-C4

R3-C1 R3-C2 R3-C3 R3-C4

R4-C1 R4-C2 R4-C3 R4-C4

R3-C1

R1-C1

R2-C1

R4-C1

R3-C2

R1-C2

R2-C2

R4-C2

R3-C3

R1-C3

R2-C3

R4-C3

R3-C4

R1-C4

R2-C4

R4-C4

C1C2C3C4 R1R2R3R4

(ก) รูปรางและการกําหนดตําแหนงสวิตชของZX-SW16 แผงวงจรสวิตชเมตริกซ 4x4 จุด

(ข) วงจรสมบูรณของ ZX-SW16 แผงวงจรสวิตชเมตริกซ 4x4 จุด

ร ูปที ่ 8-3 หน าตาและวงจรของแผงวงจรสวิ ตช เมตร ิกซ ขนาด 4x4 จ ุดรุ น ZX-SW16

184 Unicon

R3-C1

R1-C1

R2-C1

R4-C1

R3-C2

R1-C2

R2-C2

R4-C2

R3-C3

R1-C3

R2-C3

R4-C3

R3-C4

R1-C4

R2-C4

R4-C4

C1C2 C3C4 R1R2 R3R4

ถาตอกับไฟเลี้ยงเปนการกําหนดใหตอตัวตานทานพูลอัป

ถาตอกับกราวดเปนการกําหนดใหตอตัวตานทานพูลดาวน

บัดกรีติดตั้งตัวตานทานเน็ตเวิรกแบบ 5 ขา

คา 4.7k ถึง 10k

ร ูปที ่ 8-5 แสดงแนวทางการบ ัดกร ีเพ่ื อต อต ัวต านทานเน ็ตเว ิร กเข าก ับแผงวงจรสว ิตช เมตร ิกซ ZX-SW16เพ่ื อก ําหนดสถานะลอจ ิกในกรณ ีที ่ไม ม ีการกดสว ิตช

(ก) รูปรางของตัวตานทานเน็ตเวิรกแบบ 5 ขา

472

(ข) วงจรภายในของตัวตานทานเน็ตเวิรกแบบ 5 ขา

ร ูปที ่ 8-4 ล ักษณะของต ัวต านทานเน ็ตเว ิร กและวงจรภายในที ่แนะน ําให ใช ก ับ ZX-SW16 แผงวงจรสว ิตช เมตร ิกซ 4x4 จุ ด

Unicon 185

ในการทดลองนี้ เป นการอ านค าสวิ ตช ที่ ถู กกดบนแผงวงจร ZX-SW16 แล วนํ าค าของสวิ ตช ตั วนั้ นมาแสดงบนจอแสดงผลของ GLCD-XT

8.6.1 เตรี ยมการบอร ด Unicon

(1) ถอดบอร ด GLCD-XT ออกจากบอร ด Unicon ก อน หากมี การติ ดต้ั งอยู

(2) บั ดกรี คอนเน็ กเตอร IDC ตั วเมี ย 16 ขาแถวเด่ี ยว เข าที่ จุ ดบั ดกรี ของขาพอร ตที่ ว างอยู ทางซ ายมื อของบอร ด Unicon

(3) บ ัดกรี คอนเน็ กเตอร IDC ต ัวเมี ย 10 ขาแถวเด่ี ยว เข าที่ จุ ดบ ัดกรี ของขาพอร ตที ่ว างอยู ทางขวาม ือของบอร ด Unicon

(4) นํ าบอร ด GLCD-XT กลั บมาติ ดต้ั งเข ากั บบอร ด Unicon

จะได บอร ด Unicon ที่ พร อมสํ าหรั บการทดลองเชื่ อมต อกั บแผงวงจรสวิ ตช เมตริ กซ ZX-SW16 ดั งรู ปที่ 8-6 อย างไรก็ ตาม อาจใช คอนเน็ กเตอร IDC ตั วผู แถวเด่ี ยวแทนก็ ได

8.6.2 เตรี ยมการแผงวงจร ZX-SW16

บั ดกรี ตั วต านทานเน็ ตเวิ ร ก 4.7k 5 ขา เข าที่ ตํ าแหน ง COLUMN ของแผงวงจร โดยให ขาร วมอยู ชิ ดขวา ใช รู ปที่ 8-5 ในการอ างอิ ง

ร ูปที ่ 8-6 แสดงบอร ด Unicon ที ่บ ัดกร ีคอนเน ็กเตอร IDC ทั ้งแบบต ัวเม ีย (ภาพด านซ าย) และแบบต ัวผู (ภาพด านขวา) ส ําหรั บใช งานก ับแผงวงจรเมตริ กซ สว ิตช ZX-SW16

186 Unicon

8.6.3 เช่ื อมต อวงจร

ทํ าการเชื่ อมต อวงจรตามรู ปที่ 8-7 ที่ บอร ด Unicon หากเลื อกใช คอนเน็ กเตอร IDC ตั วเมี ย ให ใช สายต อวงจรเบอร #22AWG ที่ ใช กั บแผงต อวงจรเบรดบอร ดในการเชื่ อมต อ หรื อจะใช สาย IDC-1MF จํ านวน 9 เส นในการเชื่ อมต อก็ ได

หากเลื อกใช คอนเน็ กเตอร ตั วผู แนะนํ าให ใช สาย IDC-1MF หรื อ IDC-1FF ในการเชื่ อมต อ ในรู ปที่ 8-8แสดงหน าตาของสายแบบต างๆ ที่ ใช ในการเชื่ อมต อวงจร

1

ตอวงจรลงบนเบรดบอรด

R3-C1

R1-C1

R2-C1

R4-C1

R3-C2

R1-C2

R2-C2

R4-C2

R3-C3

R1-C3

R2-C3

R4-C3

R3-C4

R1-C4

R2-C4

R4-C4

C1C2 C3C4 R1R2R3R4

บัดกรตีัวตานทานเน็ตเวิรก 4.7k 5 ขา

ZX-SW16

+5V

430

126

0

32

1

R1-C1 R1-C2 R1-C3 R1-C4

R2-C1 R2-C2 R2-C3 R2-C4

R3-C1 R3-C2 R3-C3 R3-C4

R4-C1 R4-C2 R4-C3 R4-C4

R1

R2

R3

R4

C1 C2 C3 C4+5V

R14.7k *4

Unicon port

3

2

0

1

4

30

12

6

ร ูปที ่ 8-7 วงจรทดลองใช งานบอร ด Unicon ก ับแผงวงจรสว ิตช เมตร ิกซ ZX-SW16 อ านค าสว ิตช ที ่ถ ูกกดมาแสดงผลที ่จอแสดงผลของบอร ด GLCD-XT

Unicon 187

ร ูปที ่ 8-8 แสดงสายส ัญญาณที ่ใช ในการทดลองนี ้

(ก) สาย IDC-1FF

(ข) สาย IDC-1MF

(ค) สายต อวงจรแบบสายไฟเด่ี ยว เบอร #22AWG

(ก) ตั วอย างการต อวงจรด วยสายต อวงจรเบอร #22AWG

(ข) ตั วอย างการต อวงจรด วยสาย IDC-1MF หรื อIDC-1FF

ร ูปที ่ 8-9 ภาพต ัวอย างของการต อวงจรระหว างบอร ด Unicon ก ับแผงวงจรสว ิตชเมตร ิกซ ZX-SW16

188 Unicon

#include <unicon.h> // Include main librarychar Rpin[4] = {4,30,12,6}; // Define ROW Pinchar Cpin[4] = {3,2,0,1}; // Define COL Pinchar i,j,key=16;void Keypad() // Scan key function{

for (i=0;i<4;i++) // ROW counter{

out(Rpin[i],0); // Set ROW ==> LOWfor(j=0;j<4;j++){

if (in(Cpin[j])==0) // Check the key pressed in COL at ROW ===> LOW{

key=(i*4)+j; // ROW * COL = KEY data}

}out(Rpin[i],1); // Set ROW ==> HIGH

}}

void setup(){

glcdClear(); // Clear screen of GLCD-XTsetTextSize(5); // Set text size of GLCD-XTglcd(1,1,"??"); // Show title characterwhile (key==16) // Wait for key pressing{

Keypad();}

}void loop(){ Keypad(); // Scan and get key data function glcd(1,1,"%d ",key); // Show key ==> GLCD-XT}

จากวงจรใช ขาพอร ต 3, 2, 0 และ 1 ต อกั บสายคอลั มน C1 ถึ ง C4 ของสวิ ตช เมตริ กซ และกํ าหนดให ทํ างานเป นขาพอร ตอิ นพุ ตดิ จิ ตอล ส วนขาพอร ต 4, 30, 12 และ 6 ต อกั บสายโรว R1 ถึ ง R4 ของสวิ ตช เมตริ กซ และกํ าหนดให ทํ างานเป นขาพอร ตเอาต พุ ตดิ จ ิตอล ขาร วมของแผงวงจรสวิ ตช ต อกั บขาไฟเลี้ ยง +5V ของบอร ดUnicon จึ งทํ าให ขาพอร ต 4, 30, 12 และ 6 มี การต อตั วต านทานพู ลอั ปค า 4.7k กั บไฟเลี้ ยง เพื่ อกํ าหนดสถานะลอจิ กให แน นอนในกรณี ที่ ไม มี การกดสวิ ตช

8.6.4 โปรแกรมทดลอง

แสดงรายละเอี ยดของโปรแกรมสํ าหรั บทดลองในโปรแกรมที่ 8-1

โปรแกรมที่ 8-1 ไฟล Keypad4x4_simple.ino โปรแกรมภาษา C/C++ ของ Arduino สํ าหรั บบอร ดUnicon เพ่ื อเชื ่อมต อและอ านค าจากแผงวงจรสว ิตช เมตร ิกซ ZX-SW16 แสดงผลที ่จอแสดงผลกราฟ กLCD ส ีของบอร ด GLCD-XT

Unicon 189

หลั กการของการสแกนคี ย หรื อตรวจสอบการกดคี ย ในโปรแกรม อธิ บายได ดั งนี้

ที่ ตอนต นของโปรแกรมมี การประกาศตั วแปรแบบอะเรย ไว 2 ตั วคื อ Rpin และ Cpinchar Rpin[4] = {4,30,12,6}; // Define ROW Pin

char Cpin[4] = {3,2,0,1}; // Define COL Pin

โดยตั วแปรแต ละตั วมี สมาชิ ก 4 ตั ว ซึ่ งก็ คื อขาพอร ตที่ ใช งานนั่ นเอง ด วยการกํ าหนดตํ าแหน งขาพอร ตในลั กษณะนี้ จึ งกํ าหนดตํ าแหน งของสวิ ตช ได ดั งรู ปที่ 8-10

เมื่ อเริ่ มโปรแกรม กํ าหนดให ตั วแปร i เป นตั วนั บตํ าแหน งของสายสั ญญาณด านแถวหรื อโรว มี ค า 0ถึ ง 3 (ไม เกิ น 4) และเพิ่ มค าครั้ งละหนึ่ ง จากน้ั นทํ าการส งค าลอจิ ก “0” ออกมายั งขาพอร ตแถวแรกที่ กํ าหนดด วย Rpin ด วยคํ าสั่ ง out(Rpin[i],0); จากน้ั นทํ าการกํ าหนดค าตั วแปร j ให มี ค า 0 ถึ ง 3 และมี การเพิ่ มค าที ละหนึ่ ง ตั วแปร j ใช ในการชี้ ตํ าแหน งของสวิ ตช ที่ ถู กกดในแนวหลั กหรื อคอลั มน โดยจะวนตรวจสอบว ามี การกดสวิ ตช หรื อไม ด วยคํ าสั่ ง if (in(Cpin[j])==0)

1 2 3

4 5 6 7

8 9 10 11

12 13 14 15

R3-C1

R1-C1

R2-C1

R4-C1

R3-C2

R1-C2

R2-C2

R4-C2

R3-C3

R1-C3

R2-C3

R4-C3

R3-C4

R1-C4

R2-C4

R4-C4

C1 C2C3 C4 R1R2R3R4

0

3 2 0 1 4 30 12 6+5V

Unicon port

ร ูปที ่ 8-10 แสดงความส ัมพั นธ ระหว างขาพอร ตของบอร ด Unicon ก ับต ําแหน งของสว ิตช บนแผงวงจรสว ิตช ZX-SW16

190 Unicon

R1-C1 R1-C2 R1-C3 R1-C4

R2-C1 R2-C2 R2-C3 R2-C4

R3-C1 R3-C2 R3-C3 R3-C4

R4-C1 R4-C2 R4-C3 R4-C4

R1

R2

R3

R4

Unicon

+5V

R14.7k *4

4

30

12

6

1

0

2

3

0

1

1

1

C1 C2 C3 C4

0 1 2 3

if (in(Cpin[j])==0)

หากมี การกดสวิ ตช เกิ ดข้ึ นเมื่ อค า j เป น “0” ตํ าแหน งของสวิ ตช ที่ กดจะคํ านวณได จากคํ าสั่ ง

key=(i*4)+j;

เมื่ อ i=0 เนื่ องจากเริ่ มต นสแกนแถวแรกและ j=0 ค าของ key จึ งเท ากั บ (0 * 4) + 0 = 0 นั่ นคื อ สวิ ตช 0 ถู กกด ในรู ปที่ 8-11 แสดงกลไกการทํ างานของโปรแกรมในการตรวจสอบการกดสวิ ตช เมื่ อ i = 0

หากไม มี การกดสวิ ตช เกิ ดข้ึ น ค าของ j จะเพิ่ มเป น 1, 2 และ 3 หากยั งไม มี การกดสวิ ตช เลย โปรแกรมจะออกจากเงื ่อนไขของลู ปตรวจสอบการกดสวิ ตช เมื่ อ i=0 จากน้ั นจะเพิ่ มค าของ i เป น 1 ก็ จะเลื่ อนการสแกนมายั งแถวที่ 2 ขาพอร ต 30 จะทํ าหน าที่ นี้ มี การเขี ยนข อมู ล “0” มายั งขาพอร ต 30 เพื่ อส งมายั งขาของสวิ ตช ตํ าแหน ง 4, 5, 6 และ 7 จากน้ั นเข าสู ลู ปตรวจสอบการกดสวิ ตช ด วยคํ าสั่ ง if (in(Cpin[j])==0) อี กครั้ งค าของ j ก็ จะเริ่ มจาก 0 ถึ ง 3 หากมี กดสวิ ตช เกิ ดข้ึ นเมื่ อ j=2 ค าของ key จากคํ าสั่ ง key=(i*4)+j; จะได (1 * 4) + 2 = 4 + 2 = 6 นั่ นคื อ สวิ ตช 6 ถู กกด ในรู ปที่ 8-12 แสดงกลไกการทํ างานของโปรแกรมในการตรวจสอบการกดสวิ ตช เมื่ อ i=1

การทํ างานจะวนเช นน้ี สํ าหรั บ i=2 และ i=3 หากไม มี การกดสวิ ตช ใดๆ ก็ จะวนกลั บไปที่ i=0 ไปตลอดการทํ างาน

รู ปที่ 8-13 และ 8-4 แสดงกลไกการทํ างานของโปรแกรมในการตรวจสอบการกดสวิ ตช เมื่ อ i=2 และi=3

ร ูปที ่ 8-11 กลไกการทํ างานของโปรแกรมในการตรวจสอบการกดสว ิตช เมื ่อ i = 0

Unicon 191

R1-C1 R1-C2 R1-C3 R1-C4

R2-C1 R2-C2 R2-C3 R2-C4

R3-C1 R3-C2 R3-C3 R3-C4

R4-C1 R4-C2 R4-C3 R4-C4

R1

R2

R3

R4

Unicon

+5V

R14.7k *4

4

30

12

6

1

0

2

3

0

1

1

1

C1 C2 C3 C4

4 5 6 7if (in(Cpin[j])==0)

ร ูปที ่ 8-12 กลไกการทํ างานของโปรแกรมในการตรวจสอบการกดสว ิตช เมื ่อ i = 1

R1-C1 R1-C2 R1-C3 R1-C4

R2-C1 R2-C2 R2-C3 R2-C4

R3-C1 R3-C2 R3-C3 R3-C4

R4-C1 R4-C2 R4-C3 R4-C4

R1

R2

R3

R4

Unicon

+5V

R14.7k *4

4

30

12

6

1

0

2

3

0

1

1

1

C1 C2 C3 C4

8 9 10 11

if (in(Cpin[j])==0)

ร ูปที ่ 8-13 กลไกการทํ างานของโปรแกรมในการตรวจสอบการกดสว ิตช เมื ่อ i = 2

192 Unicon

R1-C1 R1-C2 R1-C3 R1-C4

R2-C1 R2-C2 R2-C3 R2-C4

R3-C1 R3-C2 R3-C3 R3-C4

R4-C1 R4-C2 R4-C3 R4-C4

R1

R2

R3

R4

Unicon

+5V

R14.7k *4

4

30

12

6

1

0

2

3

0

1

1

1

C1 C2 C3 C4

14 15

if (in(Cpin[j])==0)

1312

ร ูปที ่ 8-14 กลไกการทํ างานของโปรแกรมในการตรวจสอบการกดสว ิตช เมื ่อ i = 3