2017-05-07 79 views
0

因此,我正在爲我的微處理器最終開發一種類型的電子雞(虛擬寵物)。我製作了128x64像素長的自己的圖像,因爲我使用的是具有該分辨率的顯示器,因此每個圖像的重量均爲1K字節。我使用的是at89s52(8052)微控制器,它沒有足夠的內存來存儲我想要的所有動畫。我的計劃(我希望保持這種方式)是使用EPROM以intel hex格式保存所有圖像(我使用的程序員是SUPERPRO,並導入該類型的文件)。當然,在ROM中有數據之後,彙編代碼對我來說很容易。我不是一個程序員開發一個代碼,不需要我想要的代碼(將圖像轉換爲英特爾十六進制代碼),並且我嘗試過的所有軟件都不能正確生成它們(插入不應該是那裏,例如:在一個空白空間應該只有零,並且還有另一個值)。我已經嘗試與PNG透明背景,白色背景和JPG。我的圖像是這樣的:將簡單圖像轉換爲英特爾十六進制

http://imgur.com/a/yiCOb (好像不准我在這裏發表圖片)

我不看到在互聯網上的其他地方有很大幫助,所以這個問題的答案會對未來基於MCU的程序員有很大的幫助。謝謝。

+0

他們是否只有黑白圖像?這應該是一個微不足道的轉換 - 將黑色位設置爲1,將白色位設置爲0.我不確定您找到的軟件有什麼問題。 (另外,我不確定世界上「intel hex」是什麼。英特爾的十六進制格式與其他人不同的是什麼?據我所知,它不是。) –

+0

@CodyGray這是一個[命名格式不正確] (https://en.wikipedia.org/wiki/Intel_HEX)直到現在我從未聽說過:)對於OP:你到底在問什麼?用於將圖像轉換爲Intel HEX的工具?恐怕這是題外話題。你有沒有想過使用精靈?或只是刻錄一個原始二進制文件 –

+0

沒有錯誤地命名爲intel hex和motorola srecord,如果你現在只聽說過它,那麼無論你是微控制器新手還是格式比你年長。eeprom程序員從eeprom出來之前或實際上可能以前一直在使用其中一種或另一種文件格式,在flash出現之前需要使用相同的格式來編程mcus,然後在將它們插入編程器之前將它們插入板中。 –

回答

1

這是30年以來我上次做:-)

的EPROM無論如何,你需要兩件事情...

第一部分

首先,你的文件是PNG格式,其意味着它們具有日期,時間,調色板,伽瑪塊和一堆壓縮數據,您不能將其複製到屏幕緩衝區。因此,您需要將PNG轉換爲簡單的二進制格式,其中0關閉,1打開,文件中沒有任何其他內容。最簡單的方法是使用ImageMagick,它安裝在大多數Linux平臺上,並可在macOS和Windows上免費使用。比方說,你的幀中的一個被稱爲anim.png,我們希望它得到一個簡單的格式,如PGM(便攜式灰度圖 - 見Wikipedia description),我們可以在控制檯使用ImageMagick的這樣的:

convert anim.png -compress none anim.pgm 

第一幾行會:

P2 
128 64 
255 
255 255 255 255 255 255 255 ... 
... 
... 

因爲圖像是128×64,並在文件中的最大亮度爲255,則所有的數據在ASCII如下(因爲我把-compress none)。在那裏,255代表白色,0代表黑色。

由於這是太大的屏幕,這是它的外觀形象 - 希望你可以看到你的黑盒子的底部中間一串零的:

enter image description here

現在,如果再次運行相同的命令,但刪除-compress none,則會生成相同的頭文件,但數據將以二進制形式出現。

convert anim.png anim.pgm 

而且我們還可以使用sed刪除3行頭的:

convert anim.png anim.pgm | sed '1,3d' > anim.bin 

現在你有隻是純粹像素的二進制文件,它是免費的日期/時間,作者和版權,調色板和壓縮數據,你可以傳給下一部分。

第2部分

其次,一旦你在一個合理的二進制格式有你的數據,你需要將其轉換爲Intel Hex,爲此,你需要srec_cat其中每日通過自制軟件支持Linux在Mac上的

然後,我沒有測試過這一點,從來沒有使用過它,我想你會想是這樣的:

srec_cat anim.bin -binary -output -intel 

:020000040000FA 
:20000000323535203235352032353520323535203235352032353520323535203235352000 
:200020003235352032353520323535203235352032353520323535203235352032353520E0 
:200040003235352032353520323535203235352032353520323535203235352032353520C0 
:200060003235352032353520323535203235352032353520323535203235352032353520A0 
:20008000323535203235352032353520323535203235352032353520323535203235352080 
... 
:207E8000353520323535203235352032353520323535203235352032353520323535203202 
:207EA0003535203235352032353520323535203235352032353520323535203235352032E2 
:147EC000353520323535203235352032353520323535200A2A 
:00000001FF 

摘要

可以縮寫和簡化什麼,我上面提示 - 我會離開它,所以人們可以在將來了解它!

convert YourImage.png gray: | srec_cat - -binary -output -intel 

gray:是一個非常簡單的ImageMagick 等同格式只是一個PGM文件的二進制部分沒有任何報頭。像PGM它使用每像素一個字節,因此對於純黑色和白色的需求,它會有點低效。通過查看文件大小可以看出,PGM文件是8192字節,因此每像素1字節。如果你真的想每像素1位,你可以使用PBM格式是這樣的:

convert YourImage.png pbm: | sed '1,3d' | srec_cat - -binary -output -intel 

注:

  1. 從V7 ImageMagick的起的,你應該magick取代convert所以以避免與Windows內置的convert命令衝突,該命令將文件系統轉換爲NTFS。

  2. ImageMagick的是一個相當大的包,你可以只用的NetPBM套房做到這一點同樣好,用到位convert稱爲pngtopnm工具。

+0

非常感謝!我嘗試將圖像轉換爲二進制,然後使用srec_cat轉換爲十六進制...但我認爲我從來沒有考慮過png中的垃圾。哇,我從來沒有想過製作EPROM,我想過去的事情。它給我的眼睛帶來了眼淚,那裏有這樣一個活躍的社區可以提供幫助。 – Neko

+0

我在使用windows時遇到了「sed」命令的問題。任何想法甜蜜maestre?它表示「sed」不被識別爲內部或外部命令,程序或可執行批次的文件。 – Neko

+0

Windows?啊!我從來沒有試過這個,但根據這篇文章,你可以使用'MORE + 3'http://stackoverflow.com/a/11432438/2836621 –