Lập trình STM32 quét led 7 thanh hiển thị nhiều số

lap trinh stm32 quét led 7 thanh

Trong bài này chúng ta sẽ cùng tìm hiểu cách sử dụng STM32 quét led 7 thanh (led 7 seg), tìm hiểu cách hoạt động của led 7 thanh, phương pháp quét là gì và cách triển khai code với STM32

Bài 3 phần device trong Serie Học STM32 từ A tới Z

Led 7 thanh là gì?

Led 7 đoạn là thiết bị hiển thị điện tử để hiển thị số. Khi mỗi đoạn chiếu sáng thì một phần của chữ số sẽ được hiển thị. Led 7 đoạn được sủ dụng rộng rãi trong đồng hồ số, máy tính hay các thiết bị điện tử khác.

Ngày nay led 7 thanh vẫn được ưa chuộng sử dụng bởi đặc tính rẻ, bền và khá thẩm mĩ.

Cấu tạo led 7 thanh

LED 7 đoạn bao gồm 8 LED được kết nối song song để có thể thắp sáng hiển thị số  “0, 1, 2, 3, 4, 5, 7, 8, 9, A, b, C, d, E, F, …”.

  • Mỗi đoạn Led được đánh dấu từ A tới G.
  • Đoạn thứ tám gọi là “chấm thập phân” (Decimal Point) ký hiệu DP được sử dụng khi hiển thị số không phải là số nguyên

Dựa vào cực chung nối với nguồn, sẽ phân thành 2 loại:

  • Loại dương chung (Common Anode): nếu cực dương (anode) của tất cả 8 LED được nối với nhau và các cực âm (cathode) đứng riêng lẻ.
  • Loại âm chung (Common Cathode): nếu cực âm (cathode) của tất cả 8 LED được nối với nhau và các cực dương (anode) đứng riêng lẻ.
Led 7 thanh Anot chung
Led 7 thanh Kathot chung

Cách hoạt động của Led 7 thanh

Nguyên tắc chung : muốn LED nào sáng thì LED đó phải được phân cực thuận.Do đó muốn tạo ra chữ số nào ta chỉ cần cho LED ở các vị trí tương ứng sáng lên. Để tạo thành các số và chữ, chúng ta cho sáng led tương ứng của của chữ, số đó.

Vì led 7 thanh có 8 led, vậy nên chúng ta thường sử dụng 1 byte để điều khiển 1 led. Byte này thường đc biểu diễn dạng HEX và có thể chuyển thành BIN để biểu hiện led nào sáng, led nào tắt.

Để biểu diễn một số tương ứng với mã HEX, chúng ta có bảng sự thật (truth table) như sau:

Bảng sự thật Kathot chung
Bảng sự thật Anot chung

Kết luận: Để led 7 thanh hiển thị đúng chúng ta cần:

  • Nối Anot hoặc Kathot vào nguồn
  • Bắn các giá trị của led ra 1 port để hiển thị số tương ứng

Lập trình STM32 hiển thị led 7 thanh

Sơ đồ nguyên lý

Chúng ta sẽ đấu nối theo sơ đồ sau, sử dụng led 7 kathot.

STM32 Led 7 thanh

Trên CubeMX chúng ta setup các chân ở chế độ Output push pull.

Lập trình trên Keil C

Đầu tiên download thư viện Led7 tại đây: https://github.com/nguyenkhue2608/STM32_Device_Lib

Sau đó copy thư mục: LED7SEG vào thư mục của project

Thêm đường dẫn thư viện vừa copy

Trong main.c chúng ta #include "LED7SEG.h" và add LED7SEG.c vào project

Khởi tạo một led 7 thanh với lệnh: LED7SEG_Device_Name LED7;

Init Led 7 thanh, truyền vào các chân Seg A tới Seg H của led 7

Để in dữ liệu ra, chúng ta sử dụng lệnh LED7SEG_WriteOneNumber(&LED7, 1); 

Kết quả

Chúng ta đã hiện thị được số ra 1 led 7.

Phương pháp quét nhiều Led 7 thanh

Phương pháp quét led 7 thanh là gì?

Quét led là phương pháp hiển thị led trong 1 khoảng thời gian nhất định rồi tắt đi, hiển thị led khác với tần số nhỏ hơn tần số lưu ảnh của mắt. Điều này làm cho chúng ta cảm giác 2 led sáng đồng thời nhưng thực tế là chúng sáng tắt liên tục.

Tần số quét là thời gian bắt đầu sáng 1 led tới khi sáng led đó lần tiếp theo. Thông thường tần số quét chỉ cần lớn hơn 1/24 thì mắt người đã không thể phân biệt sự sáng tắt rồi.

Quét led 7 với tốc độ tăng dần

Quét led 7 thanh để làm gì?

Khi chúng ta có nhiều led 7 cần hiển thị, mỗi led 7 thanh sẽ gồm 8 chân. Nếu chúng ta sử dụng như phương pháp thông thường, nghĩa là số chân vđk sẽ tăng lên tương ứng với số led 7 x8. Điều này là không thể khi chân vđk là có hạn.

Vậy nên với phương pháp quét chúng ta chỉ cần sử dụng 8 chân + số led 7 cần quét:

VD: Nếu bạn quét 4 led, nghĩa là bạn sẽ sử dụng 8 + 4 = 12 chân. Thay vì 8×4 = 32 chân nếu dùng phương pháp thông thường.

Lập trình STM32 quét led 7 thanh

Sơ đồ nguyên lý

Chúng ta cấu hình thêm 4 led tương ứng với các số hàng nghìn, trăm, chục, đơn vị.

Lập trình trên Keil C

Khai báo thêm LED7SEG_Num LED_TEMP; để chứa các chân của các led

Sử dụng hàm LED7SEG_InitScan4Led(&LED_TEMP, LED1_GPIO_Port, LED1_Pin, LED2_GPIO_Port,LED2_Pin, LED3_GPIO_Port,LED3_Pin, LED4_GPIO_Port,LED4_Pin); để truyền các chân điều khiển led.

Trong while sử dụng hàm LED7SEG_Scan4Led(&LED_TEMP, &LED7, 2345); để quét led, sau đó delay 200. Nghĩa là ghi vào led 7 mỗi 200ms

Kết quả

Chúng ta đã hiển thị được Led 7 nhiều số. Lưu ý: Các bạn có thể cho hàm Scan led vào call back của Timer, để tránh bị ảnh hưởng bởi các code khác trong while (có thể bị delay) dẫn tới led bị nháy.

Giải thích thư viện quét led 7 thanh

Chúng ta khai báo bảng sự thật cho Led 7 thông qua 2 mảng

Để ghi dữ liệu lên các chân SEG A tới H, chúng ta sử dụng hàm. Biểu thức &0x01 tới 0x80 là lấy từng bit của dữ liệu bảng sự thật. Sau đó thông qua biểu tượng tam phân để xác định ghi 0 hay 1 cho chân GPIO

Hàm chuyển đổi số int thành struct bao gồm các số hàng chục nghìn, hàng nghìn, hàng trăm, hàng chục, hàng đơn vị

Hàm scan led sẽ bật tắt từng led, sau đó ghi dữ liệu cho led ở vị trí đó.

Kết

Vậy là chúng ta đã học được cách sử dụng led 7 thanh. Các bạn có thể download source code tại: https://github.com/nguyenkhue2608/STM32_Device_Exam

Nếu thấy bài viết này hay, hãy chia sẻ tới những người bạn học hay đồng nghiệp của mình. Và nếu thắc mắc điều gì, hãy để lại bình luận nhé

Và cùng gia nhập những người nghiện lập trình tại đây nhé: Hội anh em nghiện lập trình

5/5 - (1 bình chọn)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *