欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2334|回復: 3
打印 上一主題 下一主題
收起左側

單片機oled高刷新率代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:1038352 發表于 2022-7-25 13:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
//                @布丁橘長  20220720
//                高度優化OLED圖片刷新率,
//
//                提供:        低刷新率         圖片顯示函數:OLED_DrawBMP()
//                                        中刷新率                圖片顯示函數:OLED_DrawBMP_Fast()
//                                        高刷新率                圖片顯示函數:OLED_DrawBMP_Faster()
//                                        圖片左右循環移動函數:BMPmove()
//                0.96 OLED顯示Chrome小恐龍游戲動畫,小恐龍移動、跳躍效果
//                STC89C52RC/STC12C5A60S2/ST15F2K60S2均適用,11.0592MHz,OLED屏為I2C接口
//                OLED_SCL=P2^0;        OLED_SDA=P2^1;               


#include <oled.h>                                                                        //OLED庫函數

#define uchar unsigned char                                //用uchar 表示 unsigned char類型
#define uint unsigned int                                        //用uint 表示 unsigned int類型

sbit LEFTkey = P2^7;                                                        //按鍵左
sbit UPkey = P2^6;                                                                //按鍵右
sbit RIGHTkey = P2^5;                                                        //按鍵上
sbit DOWNkey = P2^4;                                                        //按鍵下

void keyscan();                                                                                //按鍵掃描函數聲明

extern uchar code BMPclr[];                                //圖片外部變量聲明:空圖片
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;                                                        //圖片坐標,圖片移動坐標
uchar upflag,downflag;                                                //跳躍狀態標志,上升狀態,下落狀態                                                                        

void main(void)
{
        uint i;
        bx = 0;                                                                                                        //小恐龍初始坐標:第0列,第4頁
        by = 4;
        upflag = downflag = 0;                                        //初始化跳躍標志
        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);                                                                //云圖片循環左移
                BMPmove(90,4,106,8,BMP3,LEFT,0);                                                        //仙人掌圖片循環左移
                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組合成踏步效果,稍作延時
                OLED_DrawBMP_Faster(bx,by,bx+32,by+4,BMP1);                                        //繪制小恐龍2
        //        delay_ms(10);                                                                                                                                        //小恐龍圖1和圖2組合成踏步效果,稍作延時
                if(upflag == 0 && downflag == 0) keyscan();                //小恐龍在地上才掃描按鍵,跳躍狀態按鍵失效
                if(upflag == 1)                                                                                                                                //跳躍狀態-上升時
                {
                        if(by == 0)                                                                                                                                        //到最高處
                        {
                                upflag = 0;
                                downflag = 1;                                                                                                                        //清空上升標志,下落標志置1
                        }
                        if(by >=1)                                                                                                                                        //行坐標大于等于1頁時,才執行減減操作
                        {
                                OLED_DrawBMP_Faster(bx,by+3,bx+32,by+4,BMPclr);        //消除腳下殘影
                                by--;                                                                                                                                                        //往上移動一頁
                        }
                }
                if(downflag == 1)                                                                                                                        //下落狀態
                {
                        if(by == 4)                                                                                                                                        //到最低處
                        {
                                downflag = 0;                                                                                                                        //清空下落標志
                        }
                        if(by <= 3)                                                                                                                                        //行坐標小于3頁時,才執行加加操作
                        {
                                OLED_DrawBMP_Faster(bx,by,bx+32,by+1,BMPclr);                //消除頭頂殘影
                                by++;                                                                                                                                                        //下移一頁
                        }
                }
               
        }
}
void keyscan()                                                                                                                                                //按鍵掃描
{
        if(UPkey == 0)                                                                                                                                        //上
        {
        //        delay_ms(10);                                                                                                                                        //去抖
                if(UPkey == 0)
                {
                        upflag = 1;                                                                                                                                        //跳躍標識置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范圍內
                        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范圍內
                }
               
        }
}

OLED_高刷新率.zip

57.35 KB, 下載次數: 27, 下載積分: 黑幣 -5

oled小恐龍

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:829010 發表于 2022-7-25 17:09 | 只看該作者
沒有頭文件吧
回復

使用道具 舉報

板凳
ID:64089 發表于 2022-7-27 17:41 | 只看該作者
實測沒有問題,不過有個問題就是用STC8H3K64S2的P55,P54做OLED驅動時,即使設置了推挽模式也沒有顯示,敢問是什么問題,有沒有遇到過,謝謝
回復

使用道具 舉報

地板
ID:64089 發表于 2022-7-27 19:43 | 只看該作者
已解決,謝謝!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表