You are currently viewing {FRDM-KL46Z} Điều khiển LED ba màu (tri-color LED)

{FRDM-KL46Z} Điều khiển LED ba màu (tri-color LED)

Trong bài thực nghiệm này chúng ta nối thêm một LED ba màu RGB (Red, Green, Blue) tới các chân PTB18 (tương ứng với LED màu đỏ), PTB19 (tương ứng với LED màu xanh lá) và PTC0 (tương ứng với LED màu xanh dương) như chỉ ra trong Hình 5‑13.

FRDM-KL46Z điều khiển LED 3 màu

Hình 5‑13. Ghép nối LED ba màu RGB tới cổng B và C trên bo mạch FRDM-KL46Z.

Chương trình 5‑7 chỉ ra cách điều khiển bật/tắt liên tục LED ba màu RGB được ghép nối thêm tới bo mạch FRDM-KL46Z qua đầu cắm mở rộng. Lưu ý là các LED trong cụm LED ba màu không được ghép nối tới cùng một cổng của vi điều khiển.

//Chương trình 5 7: Điều khiển bật/tắt LED 3 màu 
/* Chương trình bật/tắt LED 3 màu được ghép nối thêm tới bo mạch FRDM-KL46Z.
* red LED được kết nối tới chân PTB18.
* green LED được kết nối chân PTB19.
* blue LED được kết nối tới chân PTC0.
* Các LED được kích hoạt ở mức thấp (tức là một giá trị ‘0’ trên chân VDK sẽ bật LED).
*/
#include "MKL46Z4.h"    // NXP::Device:Startup
int main (void) {
void delayMs(int n);
SIM->SCGC5 |= 0x400; /* cho phép cấp xung nhịp tới cổng Port B */
SIM->SCGC5 |= 0x800; /* cho phép cấp xung nhịp tới cổng Port C */
PORTB->PCR[18] = 0x100; /* thiết lập chân PTB18 làm GPIO */
PORTB->PCR[19] = 0x100; /* thiết lập PTB19 pin as GPIO */
PTB->PDDR |= 0xC0000; /* thiết lập chân PTB18, 19 làm chân lối ra */
PORTC->PCR[0] = 0x100; /* thiết lập chân PTC0 làm GPIO */
PTC->PDDR |= 0x01; /* thiết lập chân PTD1 làm chân lối ra */
while (1) {
PTB->PDOR &= ~0xC0000; /* bật red LED và green LED */
PTC->PDOR &= ~0x01; /* bật blue LED */
delayMs(500);
PTB->PDOR |= 0xC0000; /* tắt red và green LED */
PTC->PDOR |= 0x01; /* tắt blue LED */
delayMs(500);
}
}
/* Hàm tạo trễ n milliseconds
* Xung clock cho lõi CPU được đặt tới MCGFLLCLK bằng 41.94 MHz trong hàm SystemInit().
*/
void delayMs(int n) {
int i;
int j;
for(i = 0 ; i < n; i++)
for (j = 0; j < 7000; j++) {}
}

Chương trình 5‑8 chỉ ra cách tạo ra tất cả 8 tổ hợp màu của LED ba màu. Một bộ đếm tăng dần bằng phần mềm được sử dụng. Bit 0 của bộ đếm được sử dụng để điều khiển LED màu đỏ. Bit 1 của bộ đếm được sử dụng để điều khiển LED xanh lá. Bit 2 của bộ đếm được sử dụng để điều khiển đèn LED xanh dương. Có thể tạo ra nhiều màu hơn bằng cách sử dụng điều chế độ rộng xung PWM (Pulse Width Modulation) nhưng đó là chủ đề của chương sau.

//Chương trình 5 8: Điều khiển quét qua tất cả các tổ hợp màu của LED 3 màu 
/* Chương trình quét qua tất cả 8 tổ hợp màu của LED 3 màu.
* red LED được kết nối tới chân PTB18.
* green LED được kết nối chân PTB19.
* blue LED được kết nối tới chân PTC0.
* Các LED được kích hoạt ở mức thấp (tức là một giá trị ‘0’ trên chân VDK sẽ bật LED).
#include <MKL25Z4.H>
int main (void) {
void delayMs(int n);
int counter = 0;
SIM->SCGC5 |= 0x400; /* cho phép cấp xung nhịp tới cổng Port B */
SIM->SCGC5 |= 0x800; /* cho phép cấp xung nhịp tới cổng Port C */
PORTB->PCR[18] = 0x100; /* thiết lập chân PTB18 làm GPIO */
PORTB->PCR[19] = 0x100; /* thiết lập PTB19 pin as GPIO */
PTB->PDDR |= 0xC0000; /* thiết lập chân PTB18, 19 làm chân lối ra */
PORTC->PCR[0] = 0x100; /* thiết lập chân PTC0 làm GPIO */
PTC->PDDR |= 0x01; /* thiết lập chân PTD1 làm chân lối ra */
while (1) {
if (counter & 1) /* sử dụng bit 0 của bộ đếm counter để điều khiển red LED */
PTB->PCOR = 0x40000; /* bật red LED */
else
PTB->PSOR = 0x40000; /* tắt red LED */
if (counter & 2) /* sử dụng bit 1 của bộ đếm counter để điều khiển green LED */
PTB->PCOR = 0x80000; /* bật green LED */
else
PTB->PSOR = 0x80000; /* tắt green LED */
if (counter & 4) /* sử dụng bit 2 của bộ đếm counter để điều khiển blue LED */
PTC->PCOR = 0x01; /* bật blue LED */
else
PTC->PSOR = 0x01; /* tắt blue LED */
counter++;
delayMs(500);
}
}
/* Hàm tạo trễ n milliseconds
* Xung clock cho lõi CPU được đặt tới MCGFLLCLK bằng 41.94 MHz trong hàm SystemInit().
*/
void delayMs(int n) {
int i;
int j;
for(i = 0 ; i < n; i++)
for (j = 0; j < 7000; j++) {}
}

(Trích từ “Cấu trúc và lập trình hệ thống nhúng với vi điều khiển ARM Cortex-M” – Nguyễn Kiêm Hùng)

Nguyễn Kiêm Hùng

Hung K. Nguyen studied “Electronic Engineering” in both his bachelor’s and master’s degrees at the Vietnam National University, Hanoi, Vietnam. He received the bachelor’s degree in 2003. After receiving his bachelor’s degree, He worked as an internship in the Research Center of Electronics and Telecommunications. In 2006, He received the master’s degree in electronic engineering from VNU University of Engineering and Technology (VNU-UET). Before pursuing his Ph.D’s degree, He worked as a researcher at the Laboratory for Smart Integrated Systems in VNU University of Engineering and Technology for two years. In 2008, He went to Southeast University, Nanjing, China to get his Ph.D degree. He received the Ph.D. degree in Microelectronics and Solid State Electronics from Southeast University in 2013. After got his Ph.D’s degree, He returned to VNU University of Engineering and Technology to continue his research in VLSI design. He works currently as an assistant professor and senior researcher at VNU Key Laboratory for Smart Integrated Systems. His research interests mainly include multimedia processing, reconfigurable computing, and SoC designs.

Trả lời