前陣子做了led控制板,led控制顯示的程式仍需編寫。之前將漢字顯示程式實現,最近需要實現滾動顯示,於是考慮滾動顯示演算法。
程式編寫之前需要將led顯示原理搞清楚,即控制板通過控制dm137來實現對led燈的控制。對於led顯示屏,由於每個dm137有16個引腳,因此可用來控制16列或16行(如果燈顏色只有一種),具體需要檢視硬體原理圖,首先應該將顯示方式弄清楚,然後確認實現演算法。在本地端通過cpu控制板的16個引腳來直接控制掃瞄16列,對於每個dm137則通過乙個迴圈將相應的控制資訊通過spi引腳輸出至dm137。
for(i=0;i<16;i++)
for(j=0;j<3;j++)
at91f_spi_putchar(at91c_base_spi1,testdata[i][j],0);
while(!(at91c_base_spi1->spi_sr& at91c_spi_tdre);
wait();
//控制輸出設定。
對於要顯示的資料,均通過陣列testdata來實現,其中i是控制列,一共16列,j為dm137個數。cpu控制板需要將資料資訊賦值給每個dm137(通過putchar函式實現)。這樣每次掃瞄一列(每次掃瞄dm137的同一列),一共掃瞄十六列即可完成所有顯示。這樣實現較為容易,避免行掃瞄的繁瑣。
對於滾動顯示,每個dm137內部的滾動可由陣列移位賦值得到。但若是想實現連貫性,即乙個資料滾動顯示完不同的dm137,則需要將不同dm137臨界點的資料儲存然後賦值給另一dm137臨界列來實現。若是想實現由右向左的滾動效果,則需將要顯示的資料賦值給最左側的一列,然後依次滾動實現顯示效果。當然,對於硬體內部實現結構的不同,需進行相應的變更,具體應檢視硬體電路的實現原理。
for(j=0;j<3;j++)
datatemp[i]= testdata[0][j]; //儲存臨界值
i++;
for(i=1;i<16;i++)
for(j=0;j<3;j++)
testdata[i-1][j]= testdata[i][j]; //實現15列的移動
for(j=0;j<2;j++)
testdata[15][j] = datatemp[j+1];
testdata[15][2]=(hao1[shiftindex]<<8);
testdata[15][2]+=hao1[shiftindex+1];
shiftindex +=2;
在滾動顯示中,最重要的是需要搞明白led屏的顯示方式,然後根據顯示方式編寫具體函式來實現滾動顯示。對於顯示方式的檢視,可編寫相應的測試程式實現:控制單個點、單個列掃瞄、單個行掃瞄。
《趣彈幕 滾動LED顯示屏 隱私協議》
趣彈幕 滾動led顯示屏 隱私協議 趣彈幕 您的隱私的保護對我們來說至關重要。我們承諾不會盜取使用者隱私。適用範圍 1.資訊相關 a.本產品使用不關聯個人相關使用者資訊,簡單的乙個使用工具不會和使用者利益產生衝突 b.我們不會以 qq等任何 索要您的個人資訊請不要洩露 某些服務需要傳輸您已經安裝的我...
QT 用QTimer實現滾動顯示文字
當控制項或螢幕較小時,顯示的文字較多,無法完全顯示,則需要滾動顯示文字,其他有用qpainter實現的,這裡為了方便,用qtimer與控制項settext事件。原理 將需要顯示的文字以文字 空格 文字的新式重新組合,通過timer每次更新從左邊第i個顯示固定個數的字型,每次timer都i加一。例如 ...
STM32實現德飛萊LED滾動效果
首先搞清楚,取模的方式有橫向取模和縱向取模兩種。一般以c51格式取出來的16x16的漢字,由32個十六進製制組成。每個十六進製制,0是白色的畫素點,1是黑色的畫素點,文字是由黑色的畫素點組成。我們需要指導每個十六進製制對應漢字的哪個位置。橫向取模 文字 口 新宋體12 此字型下對應的點陣為 寬x高 ...