12樓 巨大八爪鱼
2014-9-30 23:34
以下為根據bin文件生成波形圖的php程序代碼: 【portcheck.php】 <?php /* 根據EEPROM內容生成I/O口波形圖像 * 作者:巨大八爪魚 * 時間:2013年9月30日15:08:06 **/ define("US_PER_PX",50); //每像素表示多少微秒 define("FILENAME","錯誤的紅外發射.bin"); header("Content-type:image/png");
function BIT($n) { return 1<<$n; }
$file=fopen(FILENAME,"rb"); # 打開文件 $time=fread($file,480); # 持續時間 $port_states=fread($file,30); # 高低電平標識 fread($file,1); # 該位始終是0x3d,跳過 $length=ord(fread($file,1)); # 長度
# 計算圖片寬度 $width=0; for ($i=0;$i<$length;$i++) { $t=ord($time[$i*2])*256+ord($time[$i*2+1]); $width+=$t; } $width=ceil($width/US_PER_PX);
$im=imagecreatetruecolor($width,64); $back_color=imagecolorallocate($im,251,252,205); imagefill($im,10,5,$back_color); # 背景顏色
$color=imagecolorallocate($im,0,64,0); $x=$y=0; for ($i=0;$i<$length;$i++) { $lasty=$y; $y=10; if (ord($port_states[(int)floor($i/8)])&BIT($i%8)) $y=50; # 如果該位是高電平 # 電平發生跳變時加豎線 if ($y!=$lasty && $i>0) imageline($im,$x,11,$x,49,$color); # 從第二個電平開始更換顏色 if ($i==1) $color=imagecolorallocate($im,0,0,128); $t=ord($time[$i*2])*256+ord($time[$i*2+1]); $t/=US_PER_PX; imageline($im,$x,$y,$x+$t,$y,$color); # 繪製水平線 $x+=$t; }
fclose($file);
imagepng($im); imagedestroy($im); ?>
|