[Raspberry Pi] - Bài 4: Lập trình điều khiển LED 7 đoạn - BeeLab

Wednesday, May 10, 2017

[Raspberry Pi] - Bài 4: Lập trình điều khiển LED 7 đoạn

Trong bài này, mình sẽ hướng dẫn cách sử dụng GPIO để điều khiển Led 7 thanh, một ứng dụng rất quen thuộc với người học và làm điện tử.
1. Cấu tạo và cách tạo mã ra led 7 thanh
1.1. Cấu tạo
Cấu tạo leb 7 thanh
Led 7 thanh gồm 8 led đơn được nối với nhau tương ứng 7 đoạn và 1 dấu chấm.​
Nhìn vào sơ đồ nguyên lý ta thấy 8 led đơn được nối chung với nhau. Nếu các chân Anode(cực dương) được nối chung với nhau và nối với dương nguồn thì ta được led 7 thanh loại Anode chung.Tương tự led 7 thanh loại Cathode các chân được nối chung với nhau và nối với âm nguồn.
1.2. Tạo mã led 7 thanh
Ở đây ta tìm hiểu cách tạo mã led 7 thanh loại Anode . Loại Cathode cũng tương tự.​ Vì led 7 thanh loại Anode được nối chung cực dương nên led sẽ sáng tương ứng bit đầu vào mức logic 0 và led sẽ tắt tương ứng mức logic 1 (5V)​.
Như vậy ta sẽ có bảng mã như sau:
// Tạo mảng gồm 10 phần tử để chứa mã các chữ số từ 0->9 vừa tạo ra ở trên
uint8_t  chuso[10]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
2. Lập trình hiển thị ra LED 7 thanh
  • Các bước thực hiện việc tạo chương trình và biên dịch giống như các bước thực hiện ở bài 3 trong output và input GPIO.

  • Bước 1: Tạo một thư mục có tên là led7thanh
mkdir led7thanh
  • Bước 2: Vào thư mục led7thanh và tạo một chương trình có tên là “led7thanh.c”
$cd /led7thanh$sudo nano led7thanh.c
Chương trình hiển thị ra LED 7 thanh
#include <bcm2835.h>#define PINA RPI_V2_GPIO_P1_11#define PINB RPI_V2_GPIO_P1_12#define PINC RPI_V2_GPIO_P1_13#define PIND RPI_V2_GPIO_P1_15#define PINE RPI_V2_GPIO_P1_16#define PINF RPI_V2_GPIO_P1_18#define PING RPI_V2_GPIO_P1_22#define PINH RPI_V2_GPIO_P1_29//0xC0 = 0b1100 0000
     uint8_t  chuso[10]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
int main(int argc, char **argv)
{
if (!bcm2835_init())
return 1;
// Set the pin to be an output
bcm2835_gpio_fsel(PINA, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(PINB, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(PINC, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(PIND, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(PINE, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(PINF, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(PING, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(PINH, BCM2835_GPIO_FSEL_OUTP);
// Display to LED 7 segment
while (1)
{
//Display number 0
bcm2835_gpio_write(PINA, HIGH);
bcm2835_gpio_write(PINB, HIGH);
bcm2835_gpio_write(PINC, LOW);
bcm2835_gpio_write(PIND, LOW);
bcm2835_gpio_write(PINE, LOW);
bcm2835_gpio_write(PINF, LOW);
bcm2835_gpio_write(PING, LOW);
bcm2835_gpio_write(PINH, LOW); 
//Delay 2s
bcm2835_delay(2000);
//Display number 1
bcm2835_gpio_write(PINA, HIGH);
bcm2835_gpio_write(PINB, HIGH);
bcm2835_gpio_write(PINC, HIGH);
bcm2835_gpio_write(PIND, HIGH);
bcm2835_gpio_write(PINE, HIGH);
bcm2835_gpio_write(PINF, LOW);
bcm2835_gpio_write(PING, LOW);
//Delay 2s
bcm2835_delay(2000);
}
bcm2835_close();
return 0;
}