- จอ LCD 16x2 ตัวอักษรและตัวเลข
- 16x2 LCD CCS Library สำหรับ MSP430
- ฟังก์ชั่น LCD สำหรับจอ LCD 16x2 บน MSP430
- แผนภาพวงจรไปยังอินเทอร์เฟซ LCD พร้อม MSP430
- การเขียนโปรแกรม MSP430 โดยใช้ Code Composer Studio สำหรับจอ LCD
บทความนี้เป็นความต่อเนื่องของชุดการสอนของเราเกี่ยวกับการเขียนโปรแกรม MSP430 โดยใช้ Code Composer Studio บทช่วยสอนล่าสุดขึ้นอยู่กับการ ขัดจังหวะภายนอกบน MSP430 โดยใช้พิน GPIO บทช่วยสอนนี้เกี่ยวกับการ เชื่อมต่อจอแสดงผลกับ MSP430เมื่อต้องแสดง จอ LCD 16 * 2 ซึ่ง เป็นตัวเลือกแรกสำหรับผู้ที่ชื่นชอบงานอดิเรกอิเล็กทรอนิกส์ ก่อนหน้านี้เราได้เชื่อมต่อ LCD กับ MSP430 โดยใช้ Arduino IDE แล้วในบทช่วยสอนนี้เราจะใช้แพลตฟอร์มสตูดิโอ Code Composer แทนการใช้ Arduino IDE ด้วยวิธีนี้ในฐานะนักออกแบบเราจะได้รับความยืดหยุ่นมากขึ้น
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับจอ LCD 16x2 และการใช้งานร่วมกับไมโครคอนโทรลเลอร์อื่น ๆ โปรดดูบทแนะนำด้านล่าง
- การเชื่อมต่อ LCD กับ ATmega16
- การเชื่อมต่อ LCD กับ Raspberry Pi
- การเชื่อมต่อ LCD กับไมโครคอนโทรลเลอร์ PIC
- การเชื่อมต่อ LCD กับ ARM7-LPC2148
- การเชื่อมต่อ LCD กับ NodeMCU
- การเชื่อมต่อ LCD กับ STM32
- การเชื่อมต่อ LCD กับ MSP430G2
- การเชื่อมต่อ LCD กับ STM8
มี IC hd44780 ในตัวที่สามารถจัดเก็บคำสั่งและข้อมูลที่ส่งผ่านไปได้ โมดูล LCD มีประมาณ 16 พิน ซึ่งเป็นหมุดข้อมูล 8 ตัวโดย 4 ตัวเป็นหมุดจ่ายสำหรับ LED แบ็คไลท์และโมดูล LCD ทั้งหมด 3 ตัวสำหรับควบคุมการทำงานและ 1 พินสำหรับปรับความคมชัด บทแนะนำนี้ใช้ไลบรารีที่สร้างโดย Dennis Eichmann มันง่ายมากที่จะใช้ไลบรารีที่มีฟังก์ชันแยกกันเพื่อพิมพ์ข้อมูลประเภทต่างๆ นอกจากนี้ยังมีข้อกำหนดในการแสดงข้อมูลในรูปแบบต่างๆโดยมีศูนย์นำหน้าว่างเปล่าและลบ เป็นไลบรารีที่กว้างขวางและครอบคลุมและสามารถกำหนดค่าให้กับการเชื่อมต่อต่างๆได้ ที่นี่ไฟล์ส่วนหัวได้รับการแก้ไขเพื่อรองรับการกำหนดค่าแบบขนาน 8 พินสำหรับการสื่อสารข้อมูล
จอ LCD 16x2 ตัวอักษรและตัวเลข
จอแสดงผล 16x2 ทั่วไปมี IC hd44780 ในตัว (วงกลมสีแดงด้านล่าง) ซึ่งสามารถจัดเก็บคำสั่งและข้อมูลที่ส่งผ่านไปยังมันได้ โมดูล LCD มีประมาณ 16 พิน ซึ่งเป็นหมุดข้อมูล 8 ตัวโดย 4 ตัวเป็นหมุดจ่ายสำหรับ LED แบ็คไลท์และโมดูล LCD ทั้งหมด 3 ตัวสำหรับควบคุมการทำงานและ 1 พินสำหรับปรับคอนทราสต์
โมดูล LCD นี้แสดงไว้ด้านบนอเนกประสงค์และใช้พินขั้นต่ำเมื่อเทียบกับ LCD แบบแบ่งส่วนอื่น ๆ หากคุณอยากรู้ว่าทั้งหมดนี้ทำงานอย่างไรคุณควรตรวจสอบการทำงานของจอ LCD 16x2 ซึ่งเราได้พูดถึงวิธีการทำงานของ LCD โดยละเอียดแล้ว
RS Pin: RS = 1 จะเปิดใช้งานการลงทะเบียนข้อมูลใน LCD ซึ่งใช้ในการเขียนค่าลงในทะเบียนข้อมูลใน LCD RS = 0 จะเปิดใช้งานการลงทะเบียนคำสั่งของ LCD
เปิดใช้งานพิน: ขอบลบทริกเกอร์; เมื่อพินเปลี่ยนจากสถานะสูงเป็นสถานะต่ำ LCD จะได้รับแจ้งให้เขียนไปยังพินข้อมูล ขอบบวกทริกเกอร์; เมื่อพินเปลี่ยนจากสถานะต่ำเป็นสถานะสูง LCD จะได้รับแจ้งให้อ่านจากพินข้อมูล
ขา R / W: R / W = 0 จะเขียนลงในทะเบียนคำสั่งหรือทะเบียนข้อมูลตามการเลือกพิน RS R / W = 1 จะอ่านจาก IR หรือ DR ตามการเลือกพิน RS
RS R / W การทำงาน
0 0 IR เขียนเป็นการทำงานภายใน (แสดงผลชัดเจน ฯลฯ)
0 1 อ่านค่าสถานะไม่ว่าง (DB7) และตัวนับแอดเดรส (DB0 ถึง DB6)
1 0 DR เขียนเป็นการดำเนินการภายใน (DR ถึง DDRAM หรือ CGRAM)
1 1 DR อ่านเป็นการดำเนินการภายใน (DDRAM หรือ CGRAM ถึง DR)
หมุด D0-D7: ข้อมูลจะถูกถ่ายโอนไปยังและจากคำสั่งและข้อมูลจะลงทะเบียนผ่านพินเหล่านี้
หมุดจ่าย: V ss, V dd pins ใช้เพื่อจ่ายไฟให้กับโมดูล LCD A, K พินจะเปิดไฟแบ็คไลท์ LED หมุดV 0ใช้เพื่อควบคุมความคมชัด
16x2 LCD CCS Library สำหรับ MSP430
บทแนะนำนี้ใช้ไลบรารีที่สร้างโดย Dennis Eichmann มันง่ายมากที่จะใช้ไลบรารีที่มีฟังก์ชันแยกกันเพื่อพิมพ์ข้อมูลประเภทต่างๆ นอกจากนี้ยังมีข้อกำหนดในการแสดงข้อมูลในรูปแบบต่างๆโดยมีศูนย์นำหน้าว่างเปล่าและลบ เป็นไลบรารีที่กว้างขวางและครอบคลุมและสามารถกำหนดค่าให้กับการเชื่อมต่อต่างๆได้ ที่นี่ไฟล์ส่วนหัวได้รับการแก้ไขเพื่อรองรับการกำหนดค่าแบบขนาน 8 พินสำหรับการสื่อสารข้อมูล สามารถดาวน์โหลดไลบรารีได้จากลิงค์ด้านล่างหลังจากดาวน์โหลดแล้วให้ทำตามขั้นตอนด้านล่างเพื่อเพิ่มไลบรารีลงใน CCS
ดาวน์โหลด 16x2 Library สำหรับ MSP430 - Code Composer Studio
ขั้นตอนที่ 1: การสร้างไฟล์และโครงการ
โครงการ CCS เริ่มต้นถูกสร้างขึ้นโดยใช้เมนูไฟล์ ในกล่องโต้ตอบสร้างโครงการให้เลือกอุปกรณ์และกำหนด hd44780 เป็นชื่อโครงการ ภายใต้ Project type และ toolchain ให้เลือกประเภทเอาต์พุตเป็นไลบรารีแบบคงที่และสร้างโปรเจ็กต์
ใน Explorer โครงการเลน (ด้านซ้าย) ให้สร้างไฟล์ส่วนหัวภายในรวมถึงโฟลเดอร์และมันเป็นชื่อที่ hd44780.h จากนั้นคัดลอกเนื้อหาของ ไฟล์ hd44780.h ที่ ดาวน์โหลด มาลงใน ไฟล์ ที่สร้างขึ้นใหม่นี้
ตอนนี้สร้างโครงการหลักโดยการเปลี่ยนประเภทการส่งออกไปยังปฏิบัติการและสร้างโครงการชื่อ CCS_LCD
ขั้นตอนที่ 2: รวมเส้นทางการค้นหาไปยังโครงการหลัก
ในกล่องโต้ตอบคุณสมบัติของโปรเจ็กต์ hd44780 และภายในตัวเลือกรวมสำหรับคอมไพเลอร์ MSP430 ให้เพิ่มโฟลเดอร์รวมในไฟล์เส้นทางการค้นหา
จากนั้น สร้างโปรเจ็กต์นี้ เพื่อสร้างไฟล์ลิงค์เกอร์ที่จำเป็นเช่น ไฟล์ . lib การสร้างสิ่งนี้จะสร้าง ไฟล์ hd44780.lib ภายในโฟลเดอร์ debug
ขั้นตอนที่ 3: รวมเส้นทางการค้นหาสำหรับ Linker
ในกล่องโต้ตอบคุณสมบัติสำหรับ โปรเจ็ก ต์ CCS_LCD และในพา ธ การค้นหาไฟล์ของแท็บ MSP430 Linker รวม hd44780.lib ที่ อยู่ภายใน โฟลเดอร์ดีบัก ของโปรเจ็กต์ hd44780 โฟลเดอร์ดีบักจะรวมอยู่ในเส้นทางการค้นหาไฟล์ด้วย
โฟลเดอร์รวมจะถูกเพิ่มอีกครั้งในตัวเลือกรวมของคอมไพเลอร์ MSP430 ของ โครงการ CCS_LCD
ไลบรารีถูกคอมไพล์สำเร็จและเพิ่มไปยังตัวเชื่อมโยงของโปรเจ็กต์หลัก
ฟังก์ชั่น LCD สำหรับจอ LCD 16x2 บน MSP430
เป็นโมฆะ hd44780_timer_isr (โมฆะ): สิ่งนี้ถูกเรียกเป็นระยะใน ISR ของตัวจับเวลา A ตัวจับเวลา A ใช้เพื่อทำหน้าที่ของ LCD เป็นระยะ ๆ เช่นการล้างหน้าจอการตั้งค่าเคอร์เซอร์และการแสดงข้อมูล ฟังก์ชันนี้จะใช้ใน ISR มันกลับไม่มีอะไร
uint8_t hd44780_write_string (char * ch__string, uint8_t u8__row, uint8_t u8__column, uint8_t u8__cr_lf): มันจะเขียนสตริงที่ระบุในอาร์กิวเมนต์แรก
char * ch__string: สตริงที่จะเขียนลงในบัฟเฟอร์ข้อมูล (ภายใน ฟังก์ชันhd44780_timer_isr ) ข้อมูลจะถูกคัดลอกไปยังทะเบียนข้อมูลและทะเบียนคำสั่งของ LCD IC เมื่อ มีการเรียก hd44780_timer_isr เป็นระยะ
uint8_t u8__row: กำหนดแถวที่จะเขียนสตริง
uint8_t u8__column: กำหนดคอลัมน์ที่จะเขียนสตริง
uint8_t u8__cr_lf: ถ้าเป็นชุดที่ 1 แถวนั้นจะถูกย้ายไปยังแถวถัดไป หากเป็น 0 การพิมพ์จะหยุดที่แถวเดียวกัน
เป็นโมฆะ hd44780_clear_screen (โมฆะ): ฟังก์ชันนี้จะล้างหน้าจอทั้งหมด มันกลับไม่มีอะไร
uint8_t hd44780_output_unsigned_16bit_value (uint16_t u16__value, uint8_t u8__leading_zero_handling, uint8_t u8__row, uint8_t u8__column, uint8_t u8__cr_lf): ฟังก์ชันนี้จะแสดงค่าตำแหน่ง 16 บิตที่ไม่ได้ลงนามที่ต้องการ
uint16_t u16__value: จำนวนเต็มที่จะแสดงจะได้รับในอาร์กิวเมนต์แรก
uint8_t u8__leading_zero_handling: ถ้าส่งผ่าน 0 ศูนย์นำหน้าจะแสดงเป็นค่าจำนวนเต็มจะแสดง ถ้าส่งผ่าน 1 ศูนย์จะว่างเปล่า หากมีการส่ง 2 เป็นพารามิเตอร์ระบบจะแสดงเฉพาะเลขนัยสำคัญเท่านั้น
uint8_t u8__row: เลือกแถวที่แสดงจำนวนเต็ม
uint8_t u8__column: คอลัมน์ที่จะพิมพ์ถูกเลือกโดยใช้อาร์กิวเมนต์
uint8_t u8__cr_lf: ถ้าเป็นชุดที่ 1 แถวนั้นจะถูกย้ายไปยังแถวถัดไป หากเป็น 0 การพิมพ์จะหยุดที่แถวเดียวกัน
แผนภาพวงจรไปยังอินเทอร์เฟซ LCD พร้อม MSP430
แผนภาพวงจรที่สมบูรณ์แสดงอยู่ในภาพด้านล่าง อย่างที่คุณเห็นการเชื่อมต่อฮาร์ดแวร์นั้นง่ายมากและเราได้ขับเคลื่อนบอร์ดทั้งหมดโดยใช้อะแดปเตอร์ 5V
การเชื่อมต่อจะทำตามร่างด้านบน โปรดดูตารางด้านล่างสำหรับการเชื่อมต่อโดยละเอียด
Vss | กราวด์ของแหล่งจ่ายไฟ 5V |
Vdd | 5V |
V0 | เอาต์พุตโพเทนชิออมิเตอร์ |
อาร์เอส | P2.1 |
R / W | พื้น |
จ | P2.0 |
D0 | P1.0 |
D1 | P1.1 |
D2 | P1.2 |
D3 | หน้า 1.3 |
D4 | P1.4 |
D5 | P1.5 |
D6 | P1.6 |
D7 | P1.7 |
ก | ตัวต้านทาน 220 โอห์ม |
เค | พื้น |
ไม่สามารถเชื่อมต่อขั้วบวกของไฟแบ็คไลท์ LED กับแหล่งจ่ายไฟ 5V ได้โดยตรง ควรเชื่อมต่อกับความต้านทานเพื่อลดการไหลของกระแสผ่านโมดูล LCD ฉันได้ทำการเชื่อมต่อโดยใช้บอร์ด perf ในการบัดกรี LCD จากนั้นใช้สายจัมเปอร์เพื่อเชื่อมต่อ LCD กับบอร์ด MSP430 การตั้งค่าของฉันมีลักษณะดังนี้ด้านล่าง แต่คุณสามารถใช้เขียงหั่นขนมเพื่อทำการเชื่อมต่อได้
การเขียนโปรแกรม MSP430 โดยใช้ Code Composer Studio สำหรับจอ LCD
รหัสทั้งหมดที่ใช้ในโครงการนี้มีให้ที่ด้านล่างของหน้านี้ คำอธิบายการใช้รหัสมีดังนี้ ขั้นแรกให้เปิดไฟล์ส่วนหัว (hd44780.h) และรวมหมายเลขชิ้นส่วนไมโครคอนโทรลเลอร์ในส่วนแรกของไฟล์
# รวม "msp430g2553.h"
ตัวจับเวลาของสุนัขเฝ้าบ้านต้องหยุดก่อน การลงทะเบียนควบคุมDCOCTL และ BCSCTL1ใช้เพื่อกำหนดค่าออสซิลเลเตอร์ของไมโครคอนโทรลเลอร์ บรรทัดด้านล่างจะกำหนดค่า MCLK เป็น 1MHZ
WDTCTL = (WDTPW - WDTHOLD); BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ;
ต้องระบุพินพอร์ต 1 เป็นเอาต์พุตซึ่งจะใช้สำหรับพินข้อมูล พิน 0 และพิน 1 ยังต้องระบุเป็นเอาต์พุตในพอร์ต 2 ซึ่งจะใช้สำหรับพิน RS และ R / W
P1DIR = 0xFF; P2DIR = (0x01 - 0x02);
มีการใช้ตัวจับเวลาแบบฝังเพื่อแสดงค่าเป็นระยะ ตัวจับเวลา A ถูกเลือกด้วย SMCLK (1MHZ) เป็นแหล่งสัญญาณนาฬิกาและโหมดต่อเนื่องเป็นโหมดการทำงาน
TA0CCR1 = 32768; TA0CCTL1 = CCIE; TA0CTL = (TASSEL_2 - MC_2 - TACLR);
อินเทอร์รัปต์ สำหรับการเปรียบเทียบแชนเนล 1 และ 2 และ ไทเมอร์โอเวอร์รัปต์อินเทอร์รัปต์จะแชร์ เวกเตอร์ อินเทอร์รัปต์ เดียวกัน ( TIMER0_A1_VECTOR ) กับแอดเดรสเริ่มต้นที่ต่างกัน จับภาพเปรียบเทียบช่อง 1 (CCR1) ใช้ 2 เป็นที่อยู่ซึ่งจะใช้ในเคสสวิตช์
#pragma vector = TIMER0_A1_VECTOR __interrupt void timer_0_a1_isr (โมฆะ) { สวิตช์ (TA0IV) { กรณีที่ 2: { hd44780_timer_isr (); หยุดพัก; } } }
เมื่อคุณรวบรวมโค้ดของคุณแล้วคุณสามารถอัปโหลดไปยังบอร์ด MSP430 ได้ตามที่อธิบายไว้ในการเริ่มต้นใช้งานบทช่วยสอน MSP430 หากทุกอย่างเป็นไปตามที่คาดไว้คุณจะเห็น LCD ของคุณแสดงความเปรียบต่างดังที่แสดงด้านล่าง
หากการทดสอบของคุณมืดมากคุณสามารถลองปรับโพเทนชิออมิเตอร์เพื่อให้ได้คอนทราสต์ที่ดีขึ้น คุณสามารถดูการทำงานทั้งหมดของโครงการได้ในวิดีโอที่ลิงก์ด้านล่าง หวังว่าคุณจะสนุกกับโครงการและพบว่ามันน่าสนใจที่จะสร้างของคุณเอง หากคุณมีคำถามใด ๆ โปรดทิ้งไว้ในส่วนความคิดเห็นด้านล่าง คุณยังสามารถเขียนคำถามทางเทคนิคทั้งหมดของคุณในฟอรัมเพื่อรับคำตอบหรือเพื่อเริ่มการสนทนา