SDL示例一 實現七段數碼管的顯示

2022-05-28 01:57:11 字數 1222 閱讀 6783

本文主要目標是使用sdl圖形介面實現類似七段數碼管的led顯示效果。

通常led顯示乙個10進製數字(0-9)都使用七個led(點亮或者熄滅),如下圖:

+ --0-- +

| |

5 1

| |

+ --6-- +

| |

4 2

| |

+ --3-- +

這裡按照順時針的方向將0-6編號的七個數碼管組成數字,如果全部點亮就是數字8,如果編號為6的數碼管不點亮,就是數字0。如果我們依次把0-6的編號數碼管對應到乙個位元組的低位到高位,因此可以使用二進位制分別對0-9進行編碼。對應下表:

dec對應的二進位制編碼

00x3f

10x06

20x5b

30x4f

40x66

50x6d

60x7d

70x07

80x7f

90x6f

e0x79

注:這裡還定義乙個錯誤的字母e,如果遇到無法識別的字元,可以直接顯示錯誤。

至此七段數碼管基本原理介紹完畢。我們可以簡單的用乙個矩形表示乙個數碼管,顯示的話表示點亮1,不顯示的話表示不點亮0

sdl2中提供了sdl_renderfillrectssdl_renderfillrect用於填充矩形,可以用這個實現。

int sdl_renderfillrects(sdl_renderer*   renderer,

const sdl_rect* rects,

int count);

int sdl_renderfillrect(sdl_renderer* renderer,

const sdl_rect* rect)

其實繪製部分最主要的關於七個數碼管顯示位置的計算。這需要一定的區域規劃和大小控制。具體**如下:

void segmentdigit::calculate_pos(const sdl_rect & rc)

在呼叫時建議設定繪製的矩形區域寬高比為0.6。

由於sdl2支援的圖形繪製較少,所以led顯示效果略差。

最終繪製效果請參考step-into-sdl2的示例一。

繪製七段數碼管

seven digits draw v1.0 第一,繪製線 第二,繪製七段數碼管組成的數字 第三,繪製優化數碼管間距 第四,繪製多組數字 第五,獲取系統時間 第六,主函式執行程式。如下 import turtle as t import time def drawline draw drawgap ...

七段數碼管繪製

步驟1 繪製單個數字對應的數碼管 步驟2 獲得一串數字,繪製對應的數碼管 步驟2 獲得當前系統時間,繪製對應的數碼管 步驟1 繪製單個數字對應的數碼管 基本問題是繪製一條線,可將其定義為乙個基本函式 def drawline draw turtle.pendown if draw else turt...

Python 七段數碼管

缺點 七段數碼管間無間隔不美觀,沒有 年 月 日 字樣不直觀,不能表示系統時間需手動輸入 import turtle defdrawline draw 繪製單段數碼管 turtle.pendown if draw else turtle.penup turtle.fd 40 turtle.right...