首先搞清楚,取模的方式有橫向取模和縱向取模兩種。
一般以c51格式取出來的16x16的漢字,由32個十六進製制組成。
每個十六進製制,0是白色的畫素點,1是黑色的畫素點,文字是由黑色的畫素點組成。
我們需要指導每個十六進製制對應漢字的哪個位置。
橫向取模:
/*-- 文字: 口 --*/
/*-- 新宋體12; 此字型下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x00,0x00,0x3f,0xf8,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,
0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x3f,0xf8,0x20,0x08,0x00,0x00,
其中第一行的前兩個十六進製制,代表的是最上邊的16個畫素點。每兩個十六進製制一組,自上而下表示完所有的畫素點。
縱向取模:
/*-- 文字: 口 --*/
/*-- 新宋體12; 此字型下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3f,0x00,0x00,0x00,
0x00,0x00,0xfe,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xfe,0x00,0x00,0x00,
其中上邊一行的16個十六進製制,表示的是漢字的上半部分,第一行的第乙個表示縱著的8個畫素點,自左向右表示漢字的上半部分,第二行十六進製制以同樣的方式表示漢字的下半部分。
然後,需要根據led顯示的方式,選擇合適的取模方式。(當然,也可以不這麼麻煩,無非多試幾次)
r1或者g1 的暫存器,是要輸入十六進製製鎖存的。因為一行或一列led點有16個,所以需要輸入兩個位元組大小的資料。
輸入1,轉換成連個16進製制就是0x00,0x01。觀察led屏,發現亮點在乙個角上。
根據上面取模的方式,需要直接把取模得到的16進製制直接輸入到r1或者g1 的暫存器,所以只能由兩種擺放的方式,乙個是把亮點放到右上角,對應橫向取模,乙個是把亮點放到左下角,對應縱向取模。
橫向取模,每次把左右相鄰的兩個十六進製制輸入到暫存器,自上而下重新整理顯示。
縱向取模,每次把兩行的同一列的兩個十六進製制輸入到暫存器,自左向右重新整理顯示。
如果,不級聯顯示,這兩種方式都是可以的,單個螢幕的滾動和靜止顯示都沒問題。
但是,當你想要級聯的時候,想要做乙個較長螢幕的滾動顯示,你會發現級聯介面正好對應著橫向取模的方式。
所以,放棄縱向取模的顯示方式,改用橫向取模的顯示方式。
原理其實很簡單,若干個靜止的狀態連續的有規律地切換,就形成了滾動的效果。
而每次切換改變的僅僅是每塊屏的最左邊一列和最右邊一列。
因此只需要,前乙個位元組左移n位|後乙個位元組右移8-n位,
但是,這個暫存器在輸入的時候必須把bit流倒著輸入,所以就需要倒序取模,前乙個位元組右移n位|後乙個位元組左移8-n位。
然後需要保持這個狀態靜止一段時間才完成一次的移動。保持的方法是每次重新整理加乙個細小的延時,延後迴圈n次。
當完成8次移動之後,需要取出乙個新的位元組。所以需要預先多取出兩個位元組,移動16次乙個迴圈,迴圈完成後取出下乙個漢字。
stm32實現LED燈亮滅
wangxl 20180808 本章中,不特殊說明都以st m32f103 vet6 為例,軟體平台為 iar6.4 通過檢視原理圖,我們的 led指示燈配置在pb8 pb9管腳上,通過配置 gpiob時鐘及引腳 來控制指示燈的亮滅。學會檢視原理圖 理解stm32埠配置 學會操作使用 iar程式設計...
STM32彙編LED工程
要移植作業系統,彙編是道不得不跨過去的坎。所以承接上篇的思路,我準備用彙編寫乙個簡單的閃爍led燈的程式。以此練習彙編,為作業系統做準備。第一步,還是和上篇一樣,建立乙個空的資料夾。第二步,因為是要用彙編來寫程式,所以不需要啟動 這裡選擇否。第三步,建立乙個.s檔案,並把檔案新增到工程中。第四步,在...
STM32的LED燈實驗
實驗目的 讓我的開發板的led燈亮滅閃爍 實驗程式 led.c include stm32f4xx.h 在system目錄下可以找到,把st官方的部分庫抽取出來,組成了乙個system目錄 include sys.h void led init void led.h ifndef led h def...