仿真及完整代碼
51hei.gif (83.73 KB, 下載次數: 51)
下載附件
2022-8-5 00:46 上傳
#include <reg51.h> //51通用頭文件
#include <oled.h> //OLED庫函數
#define uchar unsigned char //用uchar 表示 unsigned char類型
#define uint unsigned int //用uint 表示 unsigned int類型
//#define UP 0
//#define DOWN 1
#define LEFT 2
#define RIGHT 3
extern uchar code BMPclr[]; //圖片清屏用
extern uchar code BMP0[]; //oledfont.h中,圖片0取模數組,做外部變量聲明
extern uchar code BMP1[]; //oledfont.h中,圖片1取模數組,做外部變量聲明(如用到更多圖片,均需要聲明)
void HZmove(uchar *sz,uint sudu,uchar fx); //漢字移動函數
//3個形參分別為:漢字數組名,移動速度,移動方向
void BMPmove(uchar BMPx1,uchar BMPy1,uchar BMPx2,uchar BMPy2,uchar *BMPn,uchar BMPfx);//圖片移動函數
//6個形參分別為:圖片起始列坐標,起始頁坐標,結束列坐標,結束頁坐標,圖片名,移動方向
uchar hzsz[9]={0,0,0,0,0,5,6,7,8};//移動漢字數組,支持1-8個漢字,需要顯示移動效果的文字序號,按順序填入數組,從1開始,hzsz[0]不可用
uchar bx,by,hx,hy;//圖片移動坐標,漢字移動坐標變量
void main(void)
{
OLED_Init(); //初始化OLED
OLED_ShowCHinese(hx,0,hzsz[8]);
while(1);
// while(1)
// {
// HZmove(hzsz,0,LEFT); //漢字,移速0(最快),右移
// BMPmove(0,2,64,8,BMP0,LEFT); //BMP0,初始:0-64列,2-8頁,循環左移
// BMPmove(0,2,64,8,BMP1,LEFT); //BMP1,初始:0-64列,2-8頁,循環左移 //BMP0和BMP1兩圖合成為動畫效果
// }
}
void HZmove(uchar *sz,uint sudu,uchar fx) //漢字移動函數(數組名,移動方向)
{
if(fx == RIGHT) //右移
{
if(hx >= 128) hx = 0;
if(hx <= 128) //128列范圍內移動
{
OLED_ShowCHinese(hx,0,sz[8]); //按當前坐標更新漢字
OLED_ShowCHinese(hx+16,0,sz[7]);
OLED_ShowCHinese(hx+32,0,sz[6]);
OLED_ShowCHinese(hx+48,0,sz[5]);
OLED_ShowCHinese(hx+64,0,sz[4]);
OLED_ShowCHinese(hx+80,0,sz[3]);
OLED_ShowCHinese(hx+96,0,sz[2]);
OLED_ShowCHinese(hx+112,0,sz[1]); //漢字逆向顯示(從右往左顯示)
delay_ms(sudu*10); //速度暫時用delay控制
hx +=8; //每次右移8列像素
}
}
if(fx == LEFT) //左移
{
if(hx <= 0) hx = 120;
if(hx >= 8) //128列范圍移動
{
OLED_ShowCHinese(hx,0,sz[1]); //按當前坐標更新漢字
OLED_ShowCHinese(hx+16,0,sz[2]);
OLED_ShowCHinese(hx+32,0,sz[3]);
OLED_ShowCHinese(hx+48,0,sz[4]);
OLED_ShowCHinese(hx+64,0,sz[5]);
OLED_ShowCHinese(hx+80,0,sz[6]);
OLED_ShowCHinese(hx+96,0,sz[7]);
OLED_ShowCHinese(hx+112,0,sz[8]); //正向顯示漢字(從左往右顯示)
delay_ms(sudu*10); //速度暫時用delay控制
hx -=8; //每次左移8列像素
}
}
}
void BMPmove(uchar BMPx1,uchar BMPy1,uchar BMPx2,uchar BMPy2,uchar *BMPn,uchar BMPfx)//圖片循環移動函數
{
if(BMPfx == LEFT) //左移
{
if(bx <= 0) bx = 128;
if(bx >= 8) //128列范圍
{
OLED_DrawBMP(bx+BMPx1,BMPy1,bx+BMPx2,BMPy2,BMPn); //按當前坐標更新圖形
OLED_DrawBMP(bx+BMPx2,BMPy1,bx+BMPx2+8,BMPy2,BMPclr); //擦除部分圖像
bx -= 8;
}
}
if(BMPfx == RIGHT) //右移
{
if(bx >= 128) bx = 0;
if(bx <= 128) //128列范圍
{
OLED_DrawBMP(bx+BMPx1,BMPy1,bx+BMPx2,BMPy2,BMPn); //按當前坐標更新圖形
OLED_DrawBMP(bx+BMPx1,BMPy1,bx+BMPx1+8,BMPy2,BMPclr); //擦除部分圖像
bx +=8;
}
}
}
代碼有錯誤 求幫助:
OLED漢字圖片左右循環移動.zip
(1.93 MB, 下載次數: 6)
2022-7-29 11:17 上傳
點擊文件名下載附件
|