|
關(guān)于如何實(shí)現(xiàn)坐標(biāo)轉(zhuǎn)換以及轉(zhuǎn)換方法這里不做討論,想了解原理以及計(jì)算過(guò)程可以自行查閱資料。
以下是很長(zhǎng)時(shí)間之前我在網(wǎng)上下載別人的開源代碼,但是具體從哪里下載的我忘記了,今天就測(cè)試了一下,完美運(yùn)行。
如果有人知道出處可以在評(píng)論區(qū)留言,我會(huì)加上出處。
下面是錄的OLED演示視頻:
https://player.youku.com/embed/XNDU3NTU3NzczNg==
維圖形顯示源碼功能描述:
三維圖形變換操作
- transform_3D.c文檔中包含“變換算法”
- projection.c文檔中包含“投影算法”
- rotation_cube.c文檔應(yīng)用“變換矩陣算法”和“投影算法”實(shí)現(xiàn)旋轉(zhuǎn)立方體
- rotation_font3D.c文檔實(shí)現(xiàn)三維空間中旋轉(zhuǎn)圖片(優(yōu)化算法)
三維圖形變換基于“變換矩陣算法”和“投影算法”來(lái)構(gòu)建新坐標(biāo)
顯示效果是 立方體繞Y軸旋轉(zhuǎn),圖片也隨之旋轉(zhuǎn)。
以下是下載的單片機(jī)源代碼,大家可以移植一下,文件里面有說(shuō)明,如下:
- /*******************************************************************************
- * 工程: 基于STC單片機(jī)“12864液晶顯示旋轉(zhuǎn)的立方體和圖片(優(yōu)化算法)”實(shí)例
- * 編譯: Keil uVersion 3
- * 創(chuàng)建: 2014-11-26 15:57:14
- * 更新: NULL
- * 版本: 1.0
- *******************************************************************************/
- /*******************************************************************************
- * 文檔: main.c
- * 作者: Wu LianWei
- * 描述: 1.三維圖形變換操作
- * 2.transform_3D.c文檔中包含“變換算法”
- * 3.projection.c文檔中包含“投影算法”
- * 4.rotation_cube.c文檔應(yīng)用“變換矩陣算法”和“投影算法”實(shí)現(xiàn)旋轉(zhuǎn)立方體
- * 5.rotation_font3D.c文檔實(shí)現(xiàn)三維空間中旋轉(zhuǎn)圖片(優(yōu)化算法)
- * 6.三維圖形變換基于“變換矩陣算法”和“投影算法”來(lái)構(gòu)建新坐標(biāo)
- * 7.顯示效果是 立方體繞Y軸旋轉(zhuǎn),圖片也隨之旋轉(zhuǎn)。
- *******************************************************************************/
- #include "STC15F2K60S2.h"
- #include "public.h"
- #include "rtc.h"
- #include "lcd_drive.h"
- #include "dis_general.h"
- #include "rotation_cube.h"
- #include "rotation_font3D.h"
- #include "font.h"
- /******************************************************************************/
- /* 程序變量定義 */
- /******************************************************************************/
- volatile bit flash; //閃爍標(biāo)志
- float idata turn; //轉(zhuǎn)向角度
- uchar idata pic;
- sbit BG = P0^5; //低電平有效
- /******************************************************************************/
- /* MAIN主程序 */
- /******************************************************************************/
- void main(void)
- {
- WDT_CONTR = 0x05; //關(guān)閉看門狗
- //--------------------------------
- RTC_cfg(); //配置實(shí)時(shí)時(shí)鐘(啟動(dòng)定時(shí)器0)
- LcdInit(); //LCD12864初始化
- ClearScreen(); //清空屏幕
- //------------
- turn=0; //轉(zhuǎn)向角度置0
- pic=0;
-
- while(1)
- {
- if(T20msFlg) //每過(guò)20ms處理事件標(biāo)志位
- {
- T20msFlg=0;
- //-----------------
- ClearDis(); //清緩存也可以理解為清屏
-
- RotateCube2(0,turn,0); //立方體旋轉(zhuǎn)計(jì)算并寫入緩存區(qū)
- //RotatePic32x32(&SETICO[pic][0],0,turn,0); //固定32*32旋轉(zhuǎn)
- BG = 0; //打開LCD片選
-
- RefreshScreen(); //將緩存區(qū)發(fā)送到LCD顯示
- }
-
- if(T100msFlg) //每過(guò)100ms處理事件標(biāo)志位
- {
- T100msFlg=0;
- //-----------------
- turn+=1; //每過(guò)100ms將旋轉(zhuǎn)的角度加1
- if(turn>=360)turn=0;
- if(turn==280) //270
- {
- pic++;
- if(pic>7)pic=0;
- }
-
- }
-
- if(T500msFlg) //每過(guò)500ms處理事件標(biāo)志位
- {
- T500msFlg=0;
- //-----------------
- flash=!flash; //閃爍標(biāo)志
-
- }
-
- if(T1sFlg) //每過(guò)1s處理事件標(biāo)志位
- {
- T1sFlg=0;
- //-----------------
-
- }
- }
- }
復(fù)制代碼
只需要以上4個(gè).c和對(duì)應(yīng).h文件就可以移植了。
注意:使用LCD12864,是可以取屏幕數(shù)據(jù)的,OLED12864用SPI或I2C驅(qū)動(dòng)是不能讀取屏幕數(shù)據(jù),需要占用單片機(jī)102
4個(gè)RAM空間作為顯存區(qū),這樣就可以實(shí)現(xiàn)。當(dāng)然也可以不用顯存區(qū),直接寫,這樣操作可能會(huì)覆蓋其他像素,看自己是否需要選擇。
個(gè)人測(cè)試:STC8A8K64S4A12 28M晶振 SPI是4分頻 刷新 OLED12864(SPI驅(qū)動(dòng)) 整個(gè)屏幕 大約需要4.8ms。 推薦還是用STM32加DMA這樣就大大節(jié)省時(shí)間了。
全部資料51hei下載地址:
LCD三維顯示源碼分享.zip
(174.7 KB, 下載次數(shù): 134)
2020-3-6 11:04 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|