標(biāo)題:
一個(gè)經(jīng)過優(yōu)化的超高刷新率的ssd1306 OLED I2C單片機(jī)代碼
[打印本頁]
作者:
asdfghjuyntl
時(shí)間:
2023-4-30 22:55
標(biāo)題:
一個(gè)經(jīng)過優(yōu)化的超高刷新率的ssd1306 OLED I2C單片機(jī)代碼
一個(gè)經(jīng)過優(yōu)化的超高刷新率的ssd1306 OLED I2C代碼
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
1.png
(44.07 KB, 下載次數(shù): 37)
下載附件
2023-5-1 03:02 上傳
單片機(jī)源程序如下:
// @布丁橘長(zhǎng)
// 高度優(yōu)化OLED圖片刷新率,
//
// 提供: 低刷新率 圖片顯示函數(shù):OLED_DrawBMP()
// 中刷新率 圖片顯示函數(shù):OLED_DrawBMP_Fast()
// 高刷新率 圖片顯示函數(shù):OLED_DrawBMP_Faster()
// 圖片左右循環(huán)移動(dòng)函數(shù):BMPmove()
// 0.96 OLED顯示Chrome小恐龍游戲動(dòng)畫,小恐龍移動(dòng)、跳躍效果
// STC89C52RC/STC12C5A60S2/ST15F2K60S2均適用,11.0592MHz,OLED屏為I2C接口
// OLED_SCL=P2^0; OLED_SDA=P2^1;
#include <reg51.h>
#include <oled.h> //OLED庫函數(shù)
#define uchar unsigned char //用uchar 表示 unsigned char類型
#define uint unsigned int //用uint 表示 unsigned int類型
sbit LEFTkey = P3^5; //按鍵左
sbit UPkey = P3^7; //按鍵右
sbit RIGHTkey = P3^6; //按鍵上
sbit DOWNkey = P3^4; //按鍵下
void keyscan(); //按鍵掃描函數(shù)聲明
extern uchar code BMPclr[]; //圖片外部變量聲明:空?qǐng)D片
extern uchar code BMP0[]; //圖片外部變量聲明:小恐龍1
extern uchar code BMP1[]; //圖片外部變量聲明:小恐龍2
extern uchar code BMP2[]; //圖片外部變量聲明:云
extern uchar code BMP3[]; //圖片外部變量聲明:仙人掌
extern unsigned char code F6x8[][6];
extern unsigned char code F8X16[];
uchar bx,by; //圖片坐標(biāo),圖片移動(dòng)坐標(biāo)
uchar upflag,downflag; //跳躍狀態(tài)標(biāo)志,上升狀態(tài),下落狀態(tài)
void main(void)
{
uint i;
bx = 0; //小恐龍初始坐標(biāo):第0列,第4頁
by = 4;
upflag = downflag = 0; //初始化跳躍標(biāo)志
OLED_Init(); //初始化OLED
OLED_Clear(); //清一次屏
while(1)
{
i++;
if(i>9999) i = 0;
OLED_ShowNum(66,3,i,4,8);
BMPmove(20,0,52,2,BMP2,LEFT,0); //云圖片循環(huán)左移
BMPmove(90,4,106,8,BMP3,LEFT,0); //仙人掌圖片循環(huán)左移
OLED_ShowCHinese(0,2,0);
OLED_ShowCHinese(16,2,1);
OLED_ShowCHinese(32,2,2);
OLED_ShowCHinese(48,2,3);
OLED_ShowString(100,0,"000",16);
OLED_DrawBMP_Faster(bx,by,bx+32,by+4,BMP0); //繪制小恐龍1
// delay_ms(10); //小恐龍圖1和圖2組合成踏步效果,稍作延時(shí)
OLED_DrawBMP_Faster(bx,by,bx+32,by+4,BMP1); //繪制小恐龍2
// delay_ms(10); //小恐龍圖1和圖2組合成踏步效果,稍作延時(shí)
if(upflag == 0 && downflag == 0) keyscan(); //小恐龍?jiān)诘厣喜艗呙璋存I,跳躍狀態(tài)按鍵失效
if(upflag == 1) //跳躍狀態(tài)-上升時(shí)
{
if(by == 0) //到最高處
{
upflag = 0;
downflag = 1; //清空上升標(biāo)志,下落標(biāo)志置1
}
if(by >=1) //行坐標(biāo)大于等于1頁時(shí),才執(zhí)行減減操作
{
OLED_DrawBMP_Faster(bx,by+3,bx+32,by+4,BMPclr); //消除腳下殘影
by--; //往上移動(dòng)一頁
}
}
if(downflag == 1) //下落狀態(tài)
{
if(by == 4) //到最低處
{
downflag = 0; //清空下落標(biāo)志
}
if(by <= 3) //行坐標(biāo)小于3頁時(shí),才執(zhí)行加加操作
{
OLED_DrawBMP_Faster(bx,by,bx+32,by+1,BMPclr); //消除頭頂殘影
by++; //下移一頁
}
}
}
}
void keyscan() //按鍵掃描
{
if(UPkey == 0) //上
{
// delay_ms(10); //去抖
if(UPkey == 0)
{
upflag = 1; //跳躍標(biāo)識(shí)置1
}
}
if(LEFTkey == 0) //左
{
// delay_ms(10);
if(LEFTkey == 0)
{
OLED_DrawBMP_Faster(bx+32-8,by,bx+32,by+8,BMPclr); //消除右邊殘影
if(bx <= 0) bx = 128; //控制在128范圍內(nèi)
bx -=8; //一次左移8列像素
}
}
if(RIGHTkey == 0) //右
{
// delay_ms(10);
if(RIGHTkey == 0)
{
OLED_DrawBMP_Faster(bx,by,bx+8,by+8,BMPclr); //消除左邊殘影
bx +=8; //一次右移8列像素
if(bx >= 128) bx = 0; //控制住128范圍內(nèi)
}
}
}
復(fù)制代碼
Keil代碼與Proteus仿真下載:
OLED_圖片高刷新率(51+STC32).7z
(964.81 KB, 下載次數(shù): 51)
2023-5-1 03:02 上傳
點(diǎn)擊文件名下載附件
OLED優(yōu)化超高刷新率
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1