BASIC-51 COURSE Chapter5 (Thai)

Page 1

Proto Tech - Series

Embedded System ศักดิ์ชัย ผางสำ�เนียง

เรี ย น-เล่ น -ใช้

ไมโครคอนโทรลเลอร์ MCS-51 ด้วยโปรแกรม ภาษาเบสิก

ตอนที่ 5 : ง่ายๆ กับการแสดงผลข้อความด้วยโมดูล LCD

มาถึงการทดลองใช้งานโมดูล LCD แบบ 16 ตัวอักษร 2 บรรทัด ด้วย ความสามารถของ BASCOM-51 จะท� ำ ให้ ก ารเขี ย นโปรแกรมเพื่ อ ติ ด ต่ อ โมดู ล แสดงผลยอดนิ ย มตั ว นี้ ง่ายในแบบที่คาดไม่ถึง จากผู้เขียน บนบอร์ ด TPE-51 ที่ผมชวนคุณๆ สร้ างหรื อจัดหามาใช้ ในการ ทดลองเรียนรู้ อุปกรณ์เอาต์พตุ ตัวหนึง่ ทีม่ มี าพร้ อมในชุดนัน่ คือ โมดูล LCD 16 ตัวอักษร 2 บรรทัด ซึง่ มีวงจรการเชือ่ มต่ออย่างง่ายและใช้ ขาพอร์ตของไมโครคอนโทรลเลอร์น้อยทีส่ ดุ แสดงในรูปที่ 5-1 ในอดีตการ ติดต่อกับอุปกรณ์แสดงผลตัวนี ้เป็ นเรื่องค่อนข้างซับซ้อนและยาก เพราะ ต้ องเขียนโปรแกรมเพือ่ ส่งค�ำสัง่ ก�ำหนดการแสดงผล ส่งข้ อมูลทีต่ ้ องการ แสดงผล ทังนี ้ ้ยังไม่รวมการแปลงค่าข้ อมูลที่ต้องเป็ นรหัสแอสกี ้จึงจะ ท�ำให้การแสดงผลทีโ่ มดูล LCD ถูกต้อง แต่ด้วยการใช้ BASCOM-51 ความยุง่ ยากซับซ้ อนที่เคยเป็ นมา ในอดีตจะถูกท�ำให้ งา่ ยขึ ้น ไม่ใช่งา่ ยธรรมดา ขอบอกว่า ง่ายมาก การ อธิบายถึงความง่ายของการเขียนโปรแกรมเพือ่ ติดต่อกับโมดูล LCD ของ BASCOM-51 จะขออ้างอิงถึงโปรแกรมที่ 5-1 เป็ นหลัก

ก�ำหนดขาเชื่อมต่อได้อิสระ

ค�ำสัง่ ที่ใช้ คือ Config Lcdpin = Pin

โดยเมือ่ พิจารณาจากวงจรในรูปที่ 5-1 จะพบว่า ได้ กำ� หนดให้ ขา D4 ถึง D7 ของโมดูล LCD ต่อกับขาพอร์ ต P2.4 ถึง P2.7 ส่วนขา E ต่อกับขา พอร์ ต P2.1 และขา RS ต่อกับขา P2.0 ในการเขียนโปรแกรมภาษาเบสิก บน BASCOM-51 เพื่อให้ คอมไพเลอร์ ทราบถึงการเชื่อมต่อนี ้ ต้ องเขียน โปรแกรมดังนี ้ (ต้ องเขียนต่อเนือ่ งเป็ นบรรทัดเดียวกัน) Config Lcdpin = Pin , Db4 = P2.4 , Db5 = P2.5 ,

Db6 = P2.6 , Db7 = P2.7 , E = P2.1 , Rs = P2.0

72

The Prototype Electronics

จะเห็ น ว่ า มัน ง่ า ยมาก หากต้ อ งการเปลี่ ย นขาพอร์ ต ของไมโคร คอนโทรลเลอร์ ที่ต้องการติดต่อ นอกจากนันยั ้ งสามารถก�ำหนดขาพอร์ ตที่ ต่อกับขาข้ อมูลของโมดูล LCD ได้ อย่างอิสระได้ เพียงแต่ต้องเรี ยงกันตาม บิตนัยส�ำคัญต�่ำไปหาสูง เช่น Config Lcdpin = Pin , Db4 = P2.3 , Db5 = P2.4 ,

Db6 = P2.5 , Db7 = P2.6 , E = P2.1 , Rs = P2.0

เลือกขนาดการแสดงผลของโมดูล LCD ได้ BASCOM-51 ยังมีค�ำสัง่ ที่ช่วยให้ ลดความผิดพลาดในการเขียนโปรแ กรมเพื่อติดต่อกับโมดูล LCD นัน่ คือ ค�ำสัง่ Config Lcd อันเป็ นค�ำสัง่ เลือก ขนาดของการแสดงผล มีตวั อย่างการใช้ ค�ำสัง่ ดังนี ้ Config Lcd =

จ�ำนวนตัวอักษรใน 1 บรรทัด * จ�ำนวนบรรทัด

หากเขียนเป็ น Config Lcd 16 * 2 จะเป็ นการประกาศให้ ทราบ ว่า โมดูล LCD ทีใ่ ช้ ในโปรแกรมนี ้คือ โมดูล LCD 16 ตัวอักษร 2 บรรทัด ท�ำให้ คอมไพเลอร์ ทราบว่า ต้ องก�ำหนดค่าแอดเดรสของหน่วยความจ�ำแสดงผล ของโมดูล LCD แบบนี ้ไว้ อย่างไรจึงจะท�ำให้ การแสดงผลออกมาถูกต้ อง ั ้ 16 ค�ำสัง่ Config Lcd สามารถเลือกจ�ำนวนการแสดงผลได้ ตงแต่ ตัวอักษร 1 บรรทัด ไปจนถึง 40 ตัวอักษร 4 บรรทัด


ค�ำสั่งควบคุมการแสดงผลของโมดูล LCD นับเป็ นคอมไพเลอร์ ไม่กี่ตวั ในโลกที่อ�ำนวยความสะดวกต่อผู้พฒ ั นา โปรแกรมมากถึงขนาดนี ้ โดย BASCOM-51 บรรจุค�ำสัง่ ควบคุมการแสดง ผลของโมดูล LCD ไว้ ให้ ใช้ งาน โดยผู้พฒ ั นาโปรแกรมไม่จ�ำเป็ นต้ องเขียน ฟั งก์ชนั่ เหล่านี ้เอง ประกอบด้ วย Cursor On/Off Blink/Noblink เป็ นค�ำสัง่ เปิ ดหรื อ ปิ ดการแสดงเคอร์ เซอร์ หรื อแถบสีด�ำ และเพื่อเลือกว่าต้ องการให้ เคอร์ เซอร์ กะพริ บ (blink) หรื อไม่กะพริ บ (Noblink) ผู้พฒ ั นาโปรแกรมสามารถเขียน ค�ำสัง่ ต่อเนื่องกันหรื อแยกก็ได้ ดังนี ้ Cursor On Noblink หมายถึง เปิ ดการแสดงผลเคอร์ เซอร์ และไม่กะพริ บ หมายถึง เปิ ดการแสดงผลเคอร์ เซอร์

Cursor On

Cursor blink หมายถึง ก�ำหนดให้ เคอร์ เซอร์ กะพริ บ

Cls คือค�ำสัง่ ล้ างหรื อเคลียร์ การแสดงผลที่หน้ าจอของโมดูล LCD ให้ วา่ งเปล่า หรื อเพื่อเตรี ยมการส�ำหรับการแสดงผลชุดใหม่ Locate เป็ นค�ำสัง่ ก� ำหนดต�ำแหน่งส�ำหรั บแสดงผล โดยพารา มิ เ ตอร์ ที่ ต ามหลัง มาตัว แรกคื อ ต� ำ แหน่ ง บรรทัด จากนั น้ จึ ง ตามด้ วย ต�ำแหน่งของตัวอักษรในบรรทัดนันๆ ้ เช่น Locate 1,5 หมายถึง ให้ แสดงผล ในต�ำแหน่งที่ 5 ของบรรทัดที่ 1 จากนันต้ ้ องตามด้ วยค�ำสัง่ เขียนข้ อมูลแสดง ผลหรื อ Lcd เสมอ ั ้ วอักษรและตัวแปร เช่น LCD เป็ นค�ำสัง่ แสดงผล ซึง่ แสดงได้ ทงตั Locate 1,1 Lcd “TPE-51” หมายถึงให้ แสดงค�ำว่า TPE-51 ในบรรทัดที่ 1 ต�ำแหน่งที่ 1 เป็ นต้ นไป หรื อ Dim I As byte I = 123

Locate

หมายถึงให้ แสดงค่า 123 ในบรรทัดที่ 1 ต�ำแหน่งที่ 1 เป็ นต้ นไป

Lcd

I

Home Upper/Lower เป็ นค�ำสัง่ ที่ก�ำหนดให้ เคอร์ เซอร์ กลับมา ยังต�ำแหน่งเริ่ มต้ นทางซ้ ายสุดของบรรทัดที่ก�ำลังติดต่ออยู่ Home (ไม่มีพารามิเตอร์ ต่อท้ าย) เป็ นการก�ำหนดให้ เคอร์ เซอร์ กลับมายังต�ำแหน่งเริ่ มต้ นทางซ้ ายสุดของบรรทัดที่ก�ำลังติดต่ออยู่ Home Upper ก�ำหนดให้ เคอร์ เซอร์ กลับมายังต�ำแหน่งเริ่ มต้ น ของบรรทัด อยู่เ หนื อ ขึน้ ไปของบรรทัด ที่ ก� ำ ลัง ติ ด ต่อ อยู่ อาทิ เคอร์ เ ซอร์ ปั จจุบนั อยูท่ ี่บรรทัดที่ 1 ก็จะเปลี่ยนต�ำแน่งไปยังต�ำแหน่งเริ่ มต้ นของบรรทัด ที่ 2 Home Lower ก�ำหนดให้ เคอร์ เซอร์ กลับมายังต�ำแหน่งเริ่มต้ น ของบรรทัดอยูต่ �่ำลงไปของบรรทัดที่ก�ำลังติดต่ออยู่ อาทิ เคอร์ เซอร์ ปัจจุบนั อยูท่ ี่บรรทัดที่ 4 ก็จะเปลี่ยนต�ำแน่งไปยังต�ำแหน่งเริ่ มต้ นของบรรทัดที่ 3 Shiftlcd Left/Right เป็ นค�ำสัง่ เลื่อนต�ำแหน่งของตัว อักษรที่แสดงผลมาทางซ้ าย (Left) หรื อขวา (Right) 1 ต�ำแหน่ง Display on/Off เป็ นค�ำสัง่ เปิ ด/ปิ ดการแสดงผลของโมดูล LCD Shiftcursor Left/Right เป็ นค�ำสัง่ เลื่อนต�ำแหน่งของ เคอร์ เซอร์ มาทางซ้ าย (Left) หรื อขวา (Right) 1 ต�ำแหน่ง LCDINIT เป็ นค�ำสัง่ อินิเชียลหรื อเตรี ยมความพร้ อมให้ แก่โมดูล LCD ก่อนเริ่ มใช้ งาน

การทดลองที่ 8 แสดงผลบนโมดูล LCD อย่างง่าย การทดลองนี ้เป็ นการเขียนโปรแกรมเพื่อติดต่อกับโมดูล LCD 16 ตัว อักษร 2 บรรทัดในโหมดการติดต่อ 4 บิต (L8.1) ต่อวงจรตามรูปที่ L8-1 หรื อน�ำโมดูล LCD ที่มากับบอร์ ด TPE51 มาเสียบเข้ าที่คอนน็กเตอร์ LCD บนบอร์ ด TPE-51

1,1

First/Second/Third/Forthline เป็ นค�ำสัง่ เลือกบรรทัด ที่ ต้อ งการแสดงผล โดย Firstline คื อ บรรทัด ที ่ 1,Secondline คือบรรทัดที ่ 2, Thirdline คือบรรทัดที ่ 3 และ Forthline คือบรรทัด ้ ้ ที ่ 4 จากนันตามด้ ้ วยต�ำแหน่งทีต่ ้ องการเขียนซึง่ มักจะเป็ นค�ำสัง่ Home ทังนี เพื่อให้ เขียนข้ อมูลแสดงผลที่ต�ำแหน่งแรกของบรรทัดนันๆ แต่ ้ คำ� สัง่ นี ้ไม่นิยม ใช้ เนือ่ งจากต้ องเขียนค�ำสัง่ หลายค�ำสัง่ จึงก�ำหนดต�ำแหน่งการแสดงผลได้ ปกติ แล้ วหากต้ องการเลือกต�ำแหน่งการแสดงผล มักใช้ ค�ำสัง่ Locate เพราะ สะดวกและสามารถก�ำหนดได้ ทงบรรทั ั้ ดและต�ำแหน่งของตัวอักษในบรรทัด นันๆ ได้ ้ โดยตรง

รูปที่ L8-1 วงจรส�ำหรับติดต่อกับโมดูล LCD และการติดตั้งโมดูล LCD เข้ากับ บอร์ด TPE-51 The Prototype Electronics

73


(L8.2) เปิ ดโปรแกรม Bascom-8051 ขึ ้นมา เขียนโปรแกรมที่ 5-1 บัน ทึ ก ชื่ อ เป็ น LCDOut.bas จากนัน้ ท� ำ การคอมไพล์ แ ละดาวน์ โ หลด โปรแกรมลงบอร์ ด TPE-51 โปรแกรมที่ 5-1 ไฟล์ LCDOut.bas โปรแกรมติดต่อกับโมดูล LCD​ 16 ตัวอักษร 2 บรรทัดเพื่อแสดงข้อความอย่างง่าย

(L9.1) ต่อวงจรตามรูปที่ L9-1 พร้ อมกับน�ำโมดูล LCD เสียบเข้ าที่ คอนน็กเตอร์ LCD บนบอร์ ด TPE-51 (L9.2) เปิ ดโปรแกรม Bascom-8051 ขึ ้นมา เขียนโปรแกรมที่ L9-1 บันทึกชื่อเป็ น In8_monitor.bas จากนันท� ้ ำการคอมไพล์และดาวน์โหลด โปรแกรมลงบอร์ ด TPE-51

$regfile = “89C51RD.DAT” $default Xram $ramstart = 0 $ramsize = 1024 $crystal = 11059200 Config Lcdpin = Pin , Db4 = P2.4 , Db5 = P2.5 , Db6 = P2.6 , Db7 = P2.7 , E = P2.1 , Rs = P2.0 Config Lcd = 16 * 2 Cursor Off Noblink Cls Locate 1 , 1 Lcd “ I am TPE-51 “ Locate 2 , 1 Lcd “ SAWASDEE KRUB” End

+5V

SW2 RESET

9 R4 10k

40

31

C5 1/50V

C6 0.1/63V

RESET

P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7

P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0

(L8.3) รันโปรแกรมด้ วยการกดสวิตช์ RESET หากทุกอย่างถูกต้ อง ที่โมดูล LCD ต้ องแสดงข้ อความดังนี ้

OSC1 18 C7 33pF

I am TPE-51

+5V

P89V51RD2

OSC2 19 C8 33pF

XTAL2 11.0592MHz

RN1 10k

39

P0.0

38

P0.1

37

P0.2

36

P0.3

35

P0.4

34

P0.5

33

P0.6

32

P0.7 +5V RN3 10k

28

S1 DIP SW. *8 P2.7

27

P2.6

26

P2.5

25

P2.4

24

P2.3

23

P2.2

22

P2.1

21

P2.0 +5V 14 13 12 11 D7 D6 D5 D4

6

4 15 E RS

DSP1 LCD 16x2 (BL) RW D0 D1 D2 D3 K 5 7 8 9 10 16

2 3 1

VR1 10k

SAWASDEE KRUB

รูปที่ L9-1 วงจรอ่านค่าจากดิปสวิตช์ 8 จุดแสดงผลผ่านโมดูล LCD

การทดลองที่ 9 ระบบตรวจสอบอินพุต 8 ช่องอย่างง่าย เมื่อใช้ งานโมดูล LCD กันพอได้ แล้ ว ก็นา่ จะมาต่อยอดทดลองสร้ าง ระบบตรวจสอบสถานะทางลอจิก 8 ช่องอย่างง่ายๆ เพื่อน�ำค่าที่ตรวจสอบ ได้ มาแสดงที่ โมดูล LCD อุปกรณ์ ที่น�ำมาใช้ เพิ่ มเติมในการทดลองนี ค้ ื อ ดิปสวิตช์ 8 ช่อง ดังมีวงจรของการทดลองนี ้แสดงในรูปที่ L9-1 ในการทดลองจริ งๆ มีทางเลือกส�ำหรับการต่อวงจรอยู่ 2 ทางคือ ต่อ วงจรสวิตช์ลงบนเบรดบอร์ ดแล้ วต่อสายเข้ ากับขาพอร์ ต P0 ของบอร์ ด TPE51 หรื อใช้ บอร์ ด miniDSW8 อันเป็ นหนึง่ ในอนุกรมบอร์ ด miniShield ที่ได้ แนะน�ำให้ สร้ างกันใน TPE ฉบับที่ 20 ต่อเข้ ากับจุดต่อพอร์ ต P0 ของบอร์ ด TPE-51 ดังรูปที่ L9-2

(L9.3) ท�ำการรั นโปรแกรม ที่โมดูล LCD จะแสดงค่าของพอร์ต P0 ทั้ง 8 ช่อง ในรูปของเลขฐานสอง, เลขฐานสิบ และเลขฐานสิบหก ทดลองเลื่อนดิปสวิตช์ในแต่ละต�ำแหน่ง แล้ วดูผลการเปลี่ยนแปลงที่หน้ า จอแสดงผลของโมดูล LCD

รูปที่ L9-2 แสดงการต่อทดลองโดยใช้บอร์ด mini-DSW8 ร่วมกับบอร์ด TPE-51 74

The Prototype Electronics


โปรแกรมที่ L9-1 ไฟล์ In8_monitor.bas โปรแกรมอ่านค่าจากดิปสวิตช์ 8 ช่องที่พอร์ต P0 น�ำมาแสดงผลบนโมดูล LCD เพื่อสร้างระบบตรวจ สอบอินพุต 8 ช่องอย่างง่าย (ค�ำสั่ง config Lcd Pin ต้องเขียนต่อเนื่อง อยู่บนบรรทัดเดียวกัน) $regfile = “89C51RD.DAT” $default Xram $ramstart = 0 $ramsize = 1024 $crystal = 11059200 Config Lcdpin = Pin , Db4 = P2.4 , Db5 = P2.5 , Db6 = P2.6 , Db7 = P2.7 , E = P2.1 , Rs = P2.0 Config Lcd = 16 * 2 Cursor Off Noblink Cls Dim Value As Byte Dim Binst As String * 8 SW Alias P0 Do SW = &B11111111 Value = SW Value = Not Value Cls Locate 1 , 1 Lcd “DEC :” ; Value Locate 1 , 10 Lcdhex “HEX :” ; Value Binst = Bin(value) Locate 2 , 1 Lcd “BIN : “ ; Binst Wait 1 Loop

www.tpemagazine.com

เมื่อดูจากโปรแกรมที่ L9-1 และผลการท�ำงานที่เกิดขึน้ หลายท่าน คงจะเคืองในอยู่นิดๆ ว่า ท�ำไมการรับหรื อส่งข้ อมูลออกทางพอร์ ตจึงต้ อง กลับสถานะด้ วยการใช้ ค�ำสัง่ NOT ค�ำตอบคือ โครงสร้ างพอร์ ตของไมโครคอนโทรลเลอร์ MCS-51 ทุก พอร์ ตในสภาวะปกติจะมีสถานะลอจิกสูงหรื อเท่ากับ &HFF หรื อ 255 หรื อ &B11111111 เมื่อมีการป้อนลอจิก “0” เข้ าที่ขา P0.0 หากเปรี ยบเทียบ กับวงจรที่ท�ำการทดลองก็คือ การเลื่อนสวิตช์บติ แรกให้ ตอ่ ลงกราวด์ นัน่ คือขาพอร์ ต P0.0 มีสถานะลอจิกเป็ น “0” จะได้ คา่ ของพอร์ ต P0 เป็ น &b11111110 หรื อเท่ากับ 254 ในฐานสิบหรื อ &HFE เมื่อผ่านการ NOT จะได้ คา่ เป็ น &B00000001 อันจะช่วยให้ การตีความผลลัพธ์ของการท�ำงาน ท�ำได้ งา่ ยขึ ้น จากผลการท�ำงานในการทดลองนี ้ เราสามารถดัดแปลงไปเป็ นระบบ แจ้ งเตือนการบุกรุ กได้ โดยก�ำหนดให้ สวิตช์แต่ละตัวที่ต่อกับขาพอร์ ตเป็ น สวิตช์ ที่ติดตัง้ ในแต่ละจุดทั่วบ้ าน หากสวิตช์ ตัวใดเกิ ดการต่อวงจร ก็ ให้ แสดงค่ามายังโมดูล LCD ทันที ท�ำให้ เราทราบว่า ขณะนี ้จุดใดเกิดการถูก บุกรุก เป็ นต้ น จากการทดลองทั้ง 9 ที่ผ่านมาเป็นการการทดลองพื้นฐานที่เกี่ยวกับ การส่งค่าไปยังเอาต์พุต, อ่านค่าจากอินพุต และการแสดงผลการท�ำงาน ผ่านอุปกรณ์แสดงผลพื้นฐานตั้งแต่ LED ธรรมดาๆ, LED ตัวเลข 7 ส่วน และโมดูล LCD ซึ่งเรื่องราวเหล่านี้อาจดูง่ายๆ แต่เราจ�ำเป็นต้องเรียนรู้ ท�ำความเข้าใจให้ดี เพราะเรื่องเหล่านี้จะเป็นพื้นฐาส�ำคัญส�ำหรับการต่อ ยอดไปยังการทดลองที่ซับซ้อนขึ้น

The Prototype Electronics

75


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.