本文主要目標是使用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_renderfillrects
和sdl_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...