前言:
這個星期很開心的利用了國外 FORTH 同好的程式碼,搞定了 gFORTH 跟 wiringPi 在 RaspberryPi 樹莓派上 GPIO 的控制 (請點此篇部落格文),初步測試控制 LED 點滅是完全沒有問題的。所以可以開始來做更複雜的測試囉!來測試一下 SPI 介面的控制吧。
SPI 介面的最佳控制範例就是拿來跟 MAX 7219 溝通囉! MAX7219 是個 8x8 LED 陣列,或是8顆 7段LED顯示器的控制器。它透過SPI介面來跟外界溝通。去年用 Arduino UNO 來用這個做了一個 8x8 LED陣列的迷你跑馬燈(請點此篇部落格文)。今年來做個一模一樣的東西吧,只是這次我們選用的平台從 Arduino UNO + C++ 來改成 RaspberryPi ZeroW + gFORTH 吧!順便我們也可以測試一下 gFORTH 跟 wiringPi 搭配之下,進一步的控制能耐囉。
SPI 介面簡介
SPI介面的全名是 Serial Peripheral Interface (序列周邊介面),最早是由 Motorola 公司所推出的一種同步全雙工序列介面,它允許兩個裝置之間以同步,全雙工,序列的方式進行高速數據通信。且速度較其他兩個常用的 UART,I2C 介面的速度還要快,所以廣泛的被使用在各種重視傳輸速度的電子裝置上,例如 SD記憶卡,佳能 Canon 相機的 EF接環,數位/類比轉換IC,液晶顯示器,... etc.
SPI 通訊的主軸如下圖所示,其實關鍵是兩的環狀的頭尾相連的8位元位移暫存器,在一個時脈內,頭尾互相交換資料。總共需要四個通訊接腳,定義如下:
MOSI (Master Output Slave Input): 主機往周邊發送訊號的訊號線
MISO (Master Input Slave Output): 周邊往主機發送訊號的訊號線
SS (Slave Select or Chip Select - CS): 周邊通訊選擇 (SPI 可以支援多重周邊通訊),用來指定要連線的週邊設備,邏輯假(Low) 代表選取,邏輯真(High) 代表未選。
SCLK (Serial Clock): 主機跟周邊兩邊交換資料時兩邊的時脈基準
以上是單一周邊的連接方式,多周邊的連接方式如下 (這時候 Master 需要針對每個 Slave 都要有一個 SS 周邊選擇致能控制)
特點:
1. 透過主從的方式支援多重周邊通訊:一台主機可以跟多台周邊對談交換資料。主機藉由對不同周邊的 SS 周邊選擇訊號線的致能,選擇所欲交談的對象。
2. 採用同步的方式來傳輸交換數據:主機須於 SCK 訊號線提供兩周邊對談所需的同步時脈訊號。因為採用時脈來同步雙方數據交換,所以雙方通訊的速度由此時脈訊號的速度來決定,理論上最大傳輸速度沒有限制,實際上可以達到 20 Mbit/sec 的高資料傳輸速率。
3. 全雙工的方式主機跟周邊同時交換資料:在一個時脈週期內, MOSI/MISO 兩條線同時對周邊跟主機交換資料。
8x8 LED 陣列模組 (使用 MAX7219)
這個迷你跑馬燈,主角是一個 8x8 的 LED 陣列。 這個 LED 陣列總共有 8x8 = 64 個數量龐大的 LED,要控制這麼多的 LED習慣上會採用專門設計的IC來控制。MAX7219 就是這樣的一個控制IC,被設計來控制驅動 8x8 的 LED陣列,或是8個七段顯示器。然後它採用 SPI 介面來跟外界溝通。
所以市面上很容易買到現成已經用 MAX7219 跟 8x8 LED 陣列製作好的模組,透過現成的模組,很方便就可以組成我們的迷你跑馬燈。而控制這種 8x8 LED陣列的主軸,自然轉向如何透過 SPI 通訊介面來跟 MAX7219 溝通!
底下是實際買到的模組
實際硬體接線
如下圖所示,很簡單的啦!不過要注意喲,再次溫馨提醒,RaspberryPi 的邏輯系統用的是 3.3V 的,且 GPIO 都沒有內部電流保護,電流過高,錯接 5V,或任何短路,就會燒毀這片貴貴的板子囉!
實際照片
程式解說
GPIO 的控制
啟始一下 wiringPi
wiringPiSetup drop ( setup and adopt wPi numbering system for pin)
要注意,這裡用的是 wiringPiSetup 這個函式來啟始,所以 pin 腳的編號採用 wPi 的命名系統。 pin 腳定義如下
(如果用 wiringPiSetupGpio 函式來啟始, pin 腳的編號會變成 BCM 的命名系統. )
12 constant DATA ( SPI MOSI)
14 constant CLOCK ( SPI SCLK)
10 constant CS ( CE0 enable)
wPi 12 = BCM 10 = 物理接腳 pin 19 (MOSI)
wPi 14 = BCM 11 = 物理接腳 pin 23 (SCLK)
wPi 10 = BCM 7 = 物理接腳 pin 24 (CE0)
三個主要跟 GPIO 控制的指令
: ->HIGH ( pin --) HIGH digitalWrite ;
: ->LOW ( pin --) LOW digitalWrite ;
: WaitTrans ( pin --) digitalRead drop ;
->HIGH 指令會讓接腳訊號變成 HIGH,所以 DATA ->HIGH 會讓 wPi 12 號接腳的 I/O 輸出轉為 HIGH. 反之 DATA ->LOW 會讓 wPi 12 號接腳的 I/O 輸出轉為 LOW
WaitTrans 其實是讀取的指令,這裏利用它來做等待。讀完時剛好讓 clock 的時脈週期結束,下一個 Transition 開始。
SPI 的通訊
MAX7219 SPI 協定:
MAX7219 的封包每次 16位元 (2 bytes),前 8位元是資料,給暫存器用。後 8位元是暫存器位址,暫存器位址的高位元組4位元未使用。
真實傳送時,須從暫存器位址先傳送,再傳送8位元暫存器資料。
兩個主要跟 SPI 通訊的指令
ByteSend ( data --) 將八位元的資料,透過 SPI 送出去。送的順序是從高位元往低位元逐 bit 逐 bit 送。
Send ( data register --) 配合 MAX7219, 連送兩個八位元的資料。第一個送出去的是暫存器的位址。第二個送出去的是給暫存器的資料。
: ByteSend ( data --)
8 0 用個 do-loop 把 1byte 拆成8bits,總共做8次
do dup MASK and 用個 B10000000 的遮罩,取出八位元最左邊的 bit
if DATA ->HIGH 假如這個bit=1的話,讓 Data pin(MOSI)輸出 HIGH
else DATA ->LOW then 假如這個bit=0的話,讓 Data pin(MOSI)輸出 LOW
CLOCK ->HIGH 剛剛DATA pin資料準備好了,SCLK變成 HIGH 通知對方吧
1 LSHIFT 把傳送資料往左移一位,準備下一 bit 的傳送
CLOCK WaitTrans 等一下SCLK,確定都OK囉
CLOCK ->LOW 將 SCLK 變成 LOW 通知對方吧
loop drop
;
: Send ( data register --)
CS ->LOW CS = Chip Select,LOW 表示通知對方,要跟你做 SPI 傳送了
ByteSend 將 1 byte 大小的 register編號代碼傳送出去
ByteSend 將 1 byte 大小的 data 資料傳送出去
CS ->HIGH Chip Select 設成 LOW,結束全部 SPI 傳送
CS WaitTrans 等待一下,確定 CS 訊號已改變
CLOCK WaitTrans 等待一下,確定 SCLK 訊號已改變
;
Max7219 的控制
有了上面那兩個SPI傳送指令後,剩下一切就很簡單了! init7219 除了先啟始一下 DATA, CLOCK, CS 傳送埠外,然後透過SPI傳送指令傳送一堆控制設定給給7129
MAX7219 內部一共有14個八位元的暫存器,解說如下
暫存器名稱 | 位址 (16進位) | 用途 |
Digit 0 | 0x1 | LED矩陣第1行內容 |
Digit 1 | 0x2 | LED矩陣第2行內容 |
Digit 2 | 0x3 | LED矩陣第3行內容 |
Digit 3 | 0x4 | LED矩陣第4行內容 |
Digit 4 | 0x5 | LED矩陣第5行內容 |
Digit 5 | 0x6 | LED矩陣第6行內容 |
Digit 6 | 0x7 | LED矩陣第7行內容 |
Digit 7 | 0x8 | LED矩陣第8行內容 |
No-Op | 0x0 | 未使用 |
Decode Mode | 0x9 | 是否啟用BCD解碼 (七段顯示器 only) |
Intensity | 0xA | LED 顯示亮度 |
Scan Limit | 0xB | 可顯示的 LED 陣列或七段顯示器的數目 |
Shutdown | 0xC | 關閉所有LED,但仍可接收資料 |
Display Test | 0xF | 顯示器測試模式開啟(讓所有LED全亮,目視測試誰壞了) |
MAX7219 的運作方式很簡單,它會不斷的檢視這14個暫存器的內容,根據內容採取對應的控制動作。所以我們只要透過 SPI 介面,根據我們的需求,不斷更新這14個暫存器的內容就可以囉。
所以針對8x8 LED 螢幕更新部分,程式這邊定義了一個 8x8 大小的螢幕緩衝區 (8 bytes) ScreenBuffer 來跟 MAX7219 的 第1號到第8號 LED 點矩陣暫存器對應。 MAX7219 螢幕的顯示靠這8個暫存器。裡面有什麼值, 8x8 LED點矩陣就顯示什麼。
create ScreenBuffer 8 chars allot
隨時呼叫 UpdateScreen 來維持 ScreenBuffer 內容對 MAX7219 的 第1號到第8號 LED 點矩陣暫存器內容的更新和同步。這樣,我們要的圖形就顯示出來囉
: UpdateScreen \ update buffer data to 7219
8 0
do ScreenBuffer i chars + c@ 準備 data 圖形資料
i 1+ 準備 register 編號代碼 (1-8)
Send 透過 SPI 通訊送給 7219
loop
;
螢幕捲動
螢幕捲動的邏輯很簡單, ScreenBuffer 螢幕緩衝區 (8 bytes) 裏頭的每一 byte 就是對應到8x8 LED點矩陣的一個垂直欄,所以把7個 bytes 往前搬,顯示的圖形就往左移一個垂直欄囉!最後一欄填入後面新加入的圖形資料,這樣就形成捲動的動作。
ScrollScreen 就是這樣捲動的指令,使用時需要跟它說,要捲動新的 8 bytes 的新的圖形資料放在哪個地方呢?然後它就拿這個資料捲進去 ScreenBuffer 囉!
: ScrollScreen ( P.addr --) \ P.addr is the address of your 8x8 picture
8 0
do
利用 cmove 指令,將螢幕緩衝區的資料往左搬動(往左捲動)
ScreenBuffer char+ ScreenBuffer 7 cmove
螢幕緩衝區最後一個位置填入 P.addr 所指向的最新圖形資料直欄
dup c@ ScreenBuffer 7 chars + c!
char+ 將P.addr指向下一個圖形資料直欄
UpdateScreen PausedTime delay 透過SPI介面,更新給7219最新的圖形資料
loop drop
;
字型表
就很簡單,create 一個 fonts 詞頭後,用 c, 依序 8 bytes 一組,照 asc code 的順序將字型編入記憶體。所以透過 asc-code * 8 chars + fonts-addr 的公式就可以存取到對應字型的開頭。
跟 FORTH 語言的串接
FORTH 有標準的螢幕輸出指令,例如 emit 來輸出一個字元,type 來輸出一個字串, ." 來編譯印出一串以引號定義出來的文字。
這裡仿效一樣的做法, ScrollChar 輸出捲動一個字元,Scrolling 來輸出捲動一個字串,Scrolling" 來編譯輸出捲動一串以引號定義出來的文字。這樣整個就可以跟 FORTH 語言緊密的結合在一起,不只是一個捲動程式而已,而是更有威力,解決問題,成為一個完整問題導向的語言。
捲動一個字元,為了彈性利用 'font 指標變數指向字型表的起始位置
: ScrollChar ( char --) 給 asc-code, 捲動對應字體
0 max 127 min 限制一下,必須在 0-127之間
8 chars * 'fonts + 計算一下字型圖形資料在記憶體的位置
ScrollScreen 捲動這 8 bytes 圖形資料的圖形
;
捲動一個 counted 字串,字串起始位址 addr,長度 n
: Scrolling ( addr n --) 字串位址,跟字串長度
0 do dup i chars + c@ ScrollChar 用個do-loop取出字串裡面每個字元丟給ScrollChar去捲動
loop drop
;
捲動一個 “ 引號所框定的文字
這個對 FORTH 初學者會比較複雜難懂些,因為要了解並控制改變 FORTH 編譯器的編譯過程。
: Scrolling" ( " --)
[char] " parse 先從字串緩衝區,掃瞄出"所分隔出的字串的位址跟長度
state @ ( compile time?) 現在是在編譯狀態嗎?
是的話就用 sliteral 把這個字串編譯進去,接續編譯Scrolling字串捲動指令
if postpone sliteral postpone Scrolling
不是的話就是在翻譯狀態,立刻執行Scrolling字串捲動指令
else Scrolling then
; immediate 當然,要改變編譯器的編譯動作,所以這是立即詞(編譯器指令)
執行實況
簡單的一句 FORTH 執行碼美聲天后,海莉 Hayley Westenra 妹妹生日快樂!
: GO
init7219
begin Scrolling" Happy Birthday Hayley Westenra" again
;
這個影片犯了小小的低級錯誤!程式裡面利用變數 PausedTime 來控制捲動的速度,一般而言設定為 100 (100 millisecond, 0.1 sec) 捲動的速度最剛好!可是這個影片裡面感覺捲動的速度跑起來慢很多,覺得很納悶,感覺不像是 0.1秒的樣子。實際利用 FORTH 的交談性, dump 出變數內容後大吃一驚,奇怪怎麼是 256這個數字 (0.256 秒) ?難怪慢那麼多! (可是明明程式裡面的設定設的是 100 啊!)
就這樣, Trouble-Shooting 了好久,最後終於發現,對厚,不是已經用 hex 改成 16進制了嗎,所以這個 0x100 = 256 囉! 應該設成 0x64 = 100 才對啦! (暈...)
最後,完整原始程式列表
\
\ 8x8 LED Matrix Scrolling Test
\
\ 2019.1.19 Frank Lin
\
include wiringPi.fs
\ setup wiringPi
wiringPiSetup drop ( setup and adopt wPi numbering system for pin)
\ digital I/O
: ->HIGH ( pin --) HIGH digitalWrite ;
: ->LOW ( pin --) LOW digitalWrite ;
: WaitTrans ( pin --) digitalRead drop ;
\
\ SPI communication
\
\ pin assignment
12 constant DATA ( SPI MOSI)
14 constant CLOCK ( SPI SCLK)
10 constant CS ( CE0 enable)
hex
80 constant MASK
: ByteSend ( data --)
8 0
do dup MASK and
if DATA ->HIGH
else DATA ->LOW then
CLOCK ->HIGH
1 LSHIFT
CLOCK WaitTrans
CLOCK ->LOW
loop drop
;
: Send ( data register --)
CS ->LOW
ByteSend
ByteSend
CS ->HIGH
CS WaitTrans
CLOCK WaitTrans
;
\
\ MAX 7219 control
\
\ MAX 7219 registers
0 constant NO_OP
9 constant DECODE_MODE
A constant INTENSITY
B constant SCAN_LIMIT
C constant SHUTDOWN
F constant DISPLAY_TEST
: init7219
DATA OUTPUT pinMode
CLOCK OUTPUT pinMode
CS OUTPUT pinMode
DATA ->LOW
CLOCK ->LOW
CS ->HIGH
0 NO_OP Send
1 SHUTDOWN Send
0 DISPLAY_TEST Send
1 INTENSITY Send
7 SCAN_LIMIT Send
0 DECODE_MODE Send
;
\ screen buffer mapped to 7219 registers of 8x8 LED matrix
create ScreenBuffer 8 chars allot
64 value PausedTime \ control the speed of scrolling
0 value 'fonts \ pointer pointed to the address of the font data
: UpdateScreen \ update buffer data to 7219
8 0
do ScreenBuffer i chars + c@
i 1+
Send
loop
;
\ scrolling data inside screen buffer
: ScrollScreen ( P.addr --) \ P.addr is the address of your 8x8 picture
8 0
do ( P.addr)
( move one line forward inside screen buffer)
ScreenBuffer char+ ScreenBuffer 7 cmove
( supply new data from P.addr to the end of screen buffer)
dup c@ ScreenBuffer 7 chars + c!
char+ ( step P.addr)
UpdateScreen PausedTime delay ( refresh 8x8 LED Matrix)
loop drop
;
\ scroll a character
: ScrollChar ( char --)
0 max 127 min ( range check)
8 chars * 'fonts + ( calc actual address of font)
ScrollScreen
;
\
\ Syntax Examples:
\
\ S" Happy Birthday Hayley Westenra" Scrolling
\ Scrolling" Happy Birthday Hayley Westenra!"
\
\ scroll a counted string
: Scrolling ( addr n --)
0 do dup i chars + c@ ScrollChar
loop drop
;
\ scroll a string delimited by "
: Scrolling" ( " --)
[char] " parse
state @ ( compile time?)
if postpone sliteral postpone Scrolling
else Scrolling then
; immediate
\ Let's have some funs
: GO
init7219
begin Scrolling" Happy Birthday Hayley Westenra"
again
;
: p 1000 delay ;
: Hana
init7219
begin
S" Hana - Hayley Westenra " Scrolling p
S" I see the river in the daylight " Scrolling p
S" Glistening as it flows its way " Scrolling p
S" I see the people travelling " Scrolling p
S" Through the night and through the day " Scrolling p
S" I see their paths colliding " Scrolling p
S" Water drops and golden rays " Scrolling p
S" Flowers bloom, oh, flowers bloom " Scrolling p
S" On this blessed day " Scrolling p
S" Let the tears fall back " Scrolling p
S" Let the laughter through " Scrolling p
S" One day, oh, one day " Scrolling p
S" The Flowers will reach full bloom " Scrolling p
p p p
again
;
\ 127 fonts data for 8x8 LED Matrix
\ the order is as in ascii code
create fonts
00 c, 00 c, 00 c, 00 c, 00 c, 00 c, 00 c, 00 c, \ 00
7E c, 81 c, 95 c, B1 c, B1 c, 95 c, 81 c, 7E c, \ 01
7E c, FF c, EB c, CF c, CF c, EB c, FF c, 7E c, \ 02
0E c, 1F c, 3F c, 7E c, 3F c, 1F c, 0E c, 00 c, \ 03
08 c, 1C c, 3E c, 7F c, 3E c, 1C c, 08 c, 00 c, \ 04
18 c, BA c, FF c, FF c, FF c, BA c, 18 c, 00 c, \ 05
10 c, B8 c, FC c, FF c, FC c, B8 c, 10 c, 00 c, \ 06
00 c, 00 c, 18 c, 3C c, 3C c, 18 c, 00 c, 00 c, \ 07
FF c, FF c, E7 c, C3 c, C3 c, E7 c, FF c, FF c, \ 08
00 c, 3C c, 66 c, 42 c, 42 c, 66 c, 3C c, 00 c, \ 09
FF c, C3 c, 99 c, BD c, BD c, 99 c, C3 c, FF c, \ 0A
70 c, F8 c, 88 c, 88 c, FD c, 7F c, 07 c, 0F c, \ 0B
00 c, 4E c, 5F c, F1 c, F1 c, 5F c, 4E c, 00 c, \ 0C
C0 c, E0 c, FF c, 7F c, 05 c, 05 c, 07 c, 07 c, \ 0D
C0 c, FF c, 7F c, 05 c, 05 c, 65 c, 7F c, 3F c, \ 0E
99 c, 5A c, 3C c, E7 c, E7 c, 3C c, 5A c, 99 c, \ 0F
7F c, 3E c, 3E c, 1C c, 1C c, 08 c, 08 c, 00 c, \ 10
08 c, 08 c, 1C c, 1C c, 3E c, 3E c, 7F c, 00 c, \ 11
00 c, 24 c, 66 c, FF c, FF c, 66 c, 24 c, 00 c, \ 12
00 c, 5F c, 5F c, 00 c, 00 c, 5F c, 5F c, 00 c, \ 13
06 c, 0F c, 09 c, 7F c, 7F c, 01 c, 7F c, 7F c, \ 14
40 c, DA c, BF c, A5 c, FD c, 59 c, 03 c, 02 c, \ 15
00 c, 70 c, 70 c, 70 c, 70 c, 70 c, 70 c, 00 c, \ 16
80 c, 94 c, B6 c, FF c, FF c, B6 c, 94 c, 80 c, \ 17
00 c, 04 c, 06 c, 7F c, 7F c, 06 c, 04 c, 00 c, \ 18
00 c, 10 c, 30 c, 7F c, 7F c, 30 c, 10 c, 00 c, \ 19
08 c, 08 c, 08 c, 2A c, 3E c, 1C c, 08 c, 00 c, \ 1A
08 c, 1C c, 3E c, 2A c, 08 c, 08 c, 08 c, 00 c, \ 1B
3C c, 3C c, 20 c, 20 c, 20 c, 20 c, 20 c, 00 c, \ 1C
08 c, 1C c, 3E c, 08 c, 08 c, 3E c, 1C c, 08 c, \ 1D
30 c, 38 c, 3C c, 3E c, 3E c, 3C c, 38 c, 30 c, \ 1E
06 c, 0E c, 1E c, 3E c, 3E c, 1E c, 0E c, 06 c, \ 1F
00 c, 00 c, 00 c, 00 c, 00 c, 00 c, 00 c, 00 c, \ ' '
00 c, 06 c, 5F c, 5F c, 06 c, 00 c, 00 c, 00 c, \ '!'
00 c, 07 c, 07 c, 00 c, 07 c, 07 c, 00 c, 00 c, \ '"'
14 c, 7F c, 7F c, 14 c, 7F c, 7F c, 14 c, 00 c, \ '#'
24 c, 2E c, 6B c, 6B c, 3A c, 12 c, 00 c, 00 c, \ '$'
46 c, 66 c, 30 c, 18 c, 0C c, 66 c, 62 c, 00 c, \ '%'
30 c, 7A c, 4F c, 5D c, 37 c, 7A c, 48 c, 00 c, \ '&'
04 c, 07 c, 03 c, 00 c, 00 c, 00 c, 00 c, 00 c, \ '''
00 c, 1C c, 3E c, 63 c, 41 c, 00 c, 00 c, 00 c, \ '('
00 c, 41 c, 63 c, 3E c, 1C c, 00 c, 00 c, 00 c, \ ')'
08 c, 2A c, 3E c, 1C c, 1C c, 3E c, 2A c, 08 c, \ '*'
08 c, 08 c, 3E c, 3E c, 08 c, 08 c, 00 c, 00 c, \ '+'
00 c, 80 c, E0 c, 60 c, 00 c, 00 c, 00 c, 00 c, \ ' c,'
08 c, 08 c, 08 c, 08 c, 08 c, 08 c, 00 c, 00 c, \ '-'
00 c, 00 c, 60 c, 60 c, 00 c, 00 c, 00 c, 00 c, \ '.'
60 c, 30 c, 18 c, 0C c, 06 c, 03 c, 01 c, 00 c, \ '/'
3E c, 7F c, 71 c, 59 c, 4D c, 7F c, 3E c, 00 c, \ '0'
40 c, 42 c, 7F c, 7F c, 40 c, 40 c, 00 c, 00 c, \ '1'
62 c, 73 c, 59 c, 49 c, 6F c, 66 c, 00 c, 00 c, \ '2'
22 c, 63 c, 49 c, 49 c, 7F c, 36 c, 00 c, 00 c, \ '3'
18 c, 1C c, 16 c, 53 c, 7F c, 7F c, 50 c, 00 c, \ '4'
27 c, 67 c, 45 c, 45 c, 7D c, 39 c, 00 c, 00 c, \ '5'
3C c, 7E c, 4B c, 49 c, 79 c, 30 c, 00 c, 00 c, \ '6'
03 c, 03 c, 71 c, 79 c, 0F c, 07 c, 00 c, 00 c, \ '7'
36 c, 7F c, 49 c, 49 c, 7F c, 36 c, 00 c, 00 c, \ '8'
06 c, 4F c, 49 c, 69 c, 3F c, 1E c, 00 c, 00 c, \ '9'
00 c, 00 c, 66 c, 66 c, 00 c, 00 c, 00 c, 00 c, \ ':'
00 c, 80 c, E6 c, 66 c, 00 c, 00 c, 00 c, 00 c, \ ';'
08 c, 1C c, 36 c, 63 c, 41 c, 00 c, 00 c, 00 c, \ '<'
24 c, 24 c, 24 c, 24 c, 24 c, 24 c, 00 c, 00 c, \ '='
00 c, 41 c, 63 c, 36 c, 1C c, 08 c, 00 c, 00 c, \ '>'
02 c, 03 c, 51 c, 59 c, 0F c, 06 c, 00 c, 00 c, \ '?'
3E c, 7F c, 41 c, 5D c, 5D c, 1F c, 1E c, 00 c, \ '@'
7C c, 7E c, 13 c, 13 c, 7E c, 7C c, 00 c, 00 c, \ 'A'
41 c, 7F c, 7F c, 49 c, 49 c, 7F c, 36 c, 00 c, \ 'B'
1C c, 3E c, 63 c, 41 c, 41 c, 63 c, 22 c, 00 c, \ 'C'
41 c, 7F c, 7F c, 41 c, 63 c, 3E c, 1C c, 00 c, \ 'D'
41 c, 7F c, 7F c, 49 c, 5D c, 41 c, 63 c, 00 c, \ 'E'
41 c, 7F c, 7F c, 49 c, 1D c, 01 c, 03 c, 00 c, \ 'F'
1C c, 3E c, 63 c, 41 c, 51 c, 73 c, 72 c, 00 c, \ 'G'
7F c, 7F c, 08 c, 08 c, 7F c, 7F c, 00 c, 00 c, \ 'H'
00 c, 41 c, 7F c, 7F c, 41 c, 00 c, 00 c, 00 c, \ 'I'
30 c, 70 c, 40 c, 41 c, 7F c, 3F c, 01 c, 00 c, \ 'J'
41 c, 7F c, 7F c, 08 c, 1C c, 77 c, 63 c, 00 c, \ 'K'
41 c, 7F c, 7F c, 41 c, 40 c, 60 c, 70 c, 00 c, \ 'L'
7F c, 7F c, 0E c, 1C c, 0E c, 7F c, 7F c, 00 c, \ 'M'
7F c, 7F c, 06 c, 0C c, 18 c, 7F c, 7F c, 00 c, \ 'N'
1C c, 3E c, 63 c, 41 c, 63 c, 3E c, 1C c, 00 c, \ 'O'
41 c, 7F c, 7F c, 49 c, 09 c, 0F c, 06 c, 00 c, \ 'P'
1E c, 3F c, 21 c, 71 c, 7F c, 5E c, 00 c, 00 c, \ 'Q'
41 c, 7F c, 7F c, 09 c, 19 c, 7F c, 66 c, 00 c, \ 'R'
26 c, 6F c, 4D c, 59 c, 73 c, 32 c, 00 c, 00 c, \ 'S'
03 c, 41 c, 7F c, 7F c, 41 c, 03 c, 00 c, 00 c, \ 'T'
7F c, 7F c, 40 c, 40 c, 7F c, 7F c, 00 c, 00 c, \ 'U'
1F c, 3F c, 60 c, 60 c, 3F c, 1F c, 00 c, 00 c, \ 'V'
7F c, 7F c, 30 c, 18 c, 30 c, 7F c, 7F c, 00 c, \ 'W'
43 c, 67 c, 3C c, 18 c, 3C c, 67 c, 43 c, 00 c, \ 'X'
07 c, 4F c, 78 c, 78 c, 4F c, 07 c, 00 c, 00 c, \ 'Y'
47 c, 63 c, 71 c, 59 c, 4D c, 67 c, 73 c, 00 c, \ 'Z'
00 c, 7F c, 7F c, 41 c, 41 c, 00 c, 00 c, 00 c, \ '['
01 c, 03 c, 06 c, 0C c, 18 c, 30 c, 60 c, 00 c, \ backslash
00 c, 41 c, 41 c, 7F c, 7F c, 00 c, 00 c, 00 c, \ ']'
08 c, 0C c, 06 c, 03 c, 06 c, 0C c, 08 c, 00 c, \ '^'
80 c, 80 c, 80 c, 80 c, 80 c, 80 c, 80 c, 80 c, \ '_'
00 c, 00 c, 03 c, 07 c, 04 c, 00 c, 00 c, 00 c, \ '`'
20 c, 74 c, 54 c, 54 c, 3C c, 78 c, 40 c, 00 c, \ 'a'
41 c, 7F c, 3F c, 48 c, 48 c, 78 c, 30 c, 00 c, \ 'b'
38 c, 7C c, 44 c, 44 c, 6C c, 28 c, 00 c, 00 c, \ 'c'
30 c, 78 c, 48 c, 49 c, 3F c, 7F c, 40 c, 00 c, \ 'd'
38 c, 7C c, 54 c, 54 c, 5C c, 18 c, 00 c, 00 c, \ 'e'
48 c, 7E c, 7F c, 49 c, 03 c, 02 c, 00 c, 00 c, \ 'f'
98 c, BC c, A4 c, A4 c, F8 c, 7C c, 04 c, 00 c, \ 'g'
41 c, 7F c, 7F c, 08 c, 04 c, 7C c, 78 c, 00 c, \ 'h'
00 c, 44 c, 7D c, 7D c, 40 c, 00 c, 00 c, 00 c, \ 'i'
60 c, E0 c, 80 c, 80 c, FD c, 7D c, 00 c, 00 c, \ 'j'
41 c, 7F c, 7F c, 10 c, 38 c, 6C c, 44 c, 00 c, \ 'k'
00 c, 41 c, 7F c, 7F c, 40 c, 00 c, 00 c, 00 c, \ 'l'
7C c, 7C c, 18 c, 38 c, 1C c, 7C c, 78 c, 00 c, \ 'm'
7C c, 7C c, 04 c, 04 c, 7C c, 78 c, 00 c, 00 c, \ 'n'
38 c, 7C c, 44 c, 44 c, 7C c, 38 c, 00 c, 00 c, \ 'o'
84 c, FC c, F8 c, A4 c, 24 c, 3C c, 18 c, 00 c, \ 'p'
18 c, 3C c, 24 c, A4 c, F8 c, FC c, 84 c, 00 c, \ 'q'
44 c, 7C c, 78 c, 4C c, 04 c, 1C c, 18 c, 00 c, \ 'r'
48 c, 5C c, 54 c, 54 c, 74 c, 24 c, 00 c, 00 c, \ 's'
00 c, 04 c, 3E c, 7F c, 44 c, 24 c, 00 c, 00 c, \ 't'
3C c, 7C c, 40 c, 40 c, 3C c, 7C c, 40 c, 00 c, \ 'u'
1C c, 3C c, 60 c, 60 c, 3C c, 1C c, 00 c, 00 c, \ 'v'
3C c, 7C c, 70 c, 38 c, 70 c, 7C c, 3C c, 00 c, \ 'w'
44 c, 6C c, 38 c, 10 c, 38 c, 6C c, 44 c, 00 c, \ 'x'
9C c, BC c, A0 c, A0 c, FC c, 7C c, 00 c, 00 c, \ 'y'
4C c, 64 c, 74 c, 5C c, 4C c, 64 c, 00 c, 00 c, \ 'z'
08 c, 08 c, 3E c, 77 c, 41 c, 41 c, 00 c, 00 c, \ ''
00 c, 00 c, 00 c, 77 c, 77 c, 00 c, 00 c, 00 c, \ '|'
41 c, 41 c, 77 c, 3E c, 08 c, 08 c, 00 c, 00 c, \ ''
02 c, 03 c, 01 c, 03 c, 02 c, 03 c, 01 c, 00 c, \ '~'
fonts to 'fonts
decimal
xxx
留言列表