久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2379|回復: 0
收起左側

一個經過優化的超高刷新率的ssd1306 OLED I2C單片機代碼

[復制鏈接]
ID:1042569 發表于 2023-4-30 22:55 | 顯示全部樓層 |閱讀模式
一個經過優化的超高刷新率的ssd1306 OLED I2C代碼
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
1.png

單片機源程序如下:
  1. //                @布丁橘長
  2. //                高度優化OLED圖片刷新率,
  3. //
  4. //                提供:        低刷新率         圖片顯示函數:OLED_DrawBMP()
  5. //                                        中刷新率                圖片顯示函數:OLED_DrawBMP_Fast()
  6. //                                        高刷新率                圖片顯示函數:OLED_DrawBMP_Faster()
  7. //                                        圖片左右循環移動函數:BMPmove()
  8. //                0.96 OLED顯示Chrome小恐龍游戲動畫,小恐龍移動、跳躍效果
  9. //                STC89C52RC/STC12C5A60S2/ST15F2K60S2均適用,11.0592MHz,OLED屏為I2C接口
  10. //                OLED_SCL=P2^0;        OLED_SDA=P2^1;               

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

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

  15. sbit LEFTkey = P3^5;                                                        //按鍵左
  16. sbit UPkey = P3^7;                                                                //按鍵右
  17. sbit RIGHTkey = P3^6;                                                        //按鍵上
  18. sbit DOWNkey = P3^4;                                                        //按鍵下

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

  20. extern uchar code BMPclr[];                                //圖片外部變量聲明:空圖片
  21. extern uchar code BMP0[];                                        //圖片外部變量聲明:小恐龍1
  22. extern uchar code BMP1[];                                        //圖片外部變量聲明:小恐龍2                                
  23. extern uchar code BMP2[];                                        //圖片外部變量聲明:云        
  24. extern uchar code BMP3[];                                        //圖片外部變量聲明:仙人掌
  25. extern unsigned char code F6x8[][6];
  26. extern unsigned char code F8X16[];
  27. uchar bx,by;                                                        //圖片坐標,圖片移動坐標
  28. uchar upflag,downflag;                                                //跳躍狀態標志,上升狀態,下落狀態                                                                        

  29. void main(void)
  30. {
  31.         uint i;
  32.         bx = 0;                                                                                                        //小恐龍初始坐標:第0列,第4頁
  33.         by = 4;
  34.         upflag = downflag = 0;                                        //初始化跳躍標志
  35.         OLED_Init();                                                                                //初始化OLED  
  36.         OLED_Clear();                                                                                //清一次屏
  37.         while(1)
  38.         {        
  39.                 i++;
  40.                 if(i>9999) i = 0;
  41.                 OLED_ShowNum(66,3,i,4,8);
  42.                 BMPmove(20,0,52,2,BMP2,LEFT,0);                                                                //云圖片循環左移
  43.                 BMPmove(90,4,106,8,BMP3,LEFT,0);                                                        //仙人掌圖片循環左移
  44.                 OLED_ShowCHinese(0,2,0);        
  45.                 OLED_ShowCHinese(16,2,1);        
  46.                 OLED_ShowCHinese(32,2,2);        
  47.                 OLED_ShowCHinese(48,2,3);
  48.                 OLED_ShowString(100,0,"000",16);               
  49.                 OLED_DrawBMP_Faster(bx,by,bx+32,by+4,BMP0);                                        //繪制小恐龍1        
  50.         //        delay_ms(10);                                                                                                                                        //小恐龍圖1和圖2組合成踏步效果,稍作延時
  51.                 OLED_DrawBMP_Faster(bx,by,bx+32,by+4,BMP1);                                        //繪制小恐龍2
  52.         //        delay_ms(10);                                                                                                                                        //小恐龍圖1和圖2組合成踏步效果,稍作延時
  53.                 if(upflag == 0 && downflag == 0) keyscan();                //小恐龍在地上才掃描按鍵,跳躍狀態按鍵失效
  54.                 if(upflag == 1)                                                                                                                                //跳躍狀態-上升時
  55.                 {
  56.                         if(by == 0)                                                                                                                                        //到最高處
  57.                         {
  58.                                 upflag = 0;
  59.                                 downflag = 1;                                                                                                                        //清空上升標志,下落標志置1
  60.                         }
  61.                         if(by >=1)                                                                                                                                        //行坐標大于等于1頁時,才執行減減操作
  62.                         {
  63.                                 OLED_DrawBMP_Faster(bx,by+3,bx+32,by+4,BMPclr);        //消除腳下殘影
  64.                                 by--;                                                                                                                                                        //往上移動一頁
  65.                         }
  66.                 }
  67.                 if(downflag == 1)                                                                                                                        //下落狀態
  68.                 {
  69.                         if(by == 4)                                                                                                                                        //到最低處
  70.                         {
  71.                                 downflag = 0;                                                                                                                        //清空下落標志
  72.                         }
  73.                         if(by <= 3)                                                                                                                                        //行坐標小于3頁時,才執行加加操作
  74.                         {
  75.                                 OLED_DrawBMP_Faster(bx,by,bx+32,by+1,BMPclr);                //消除頭頂殘影
  76.                                 by++;                                                                                                                                                        //下移一頁
  77.                         }
  78.                 }
  79.                
  80.         }
  81. }
  82. void keyscan()                                                                                                                                                //按鍵掃描
  83. {
  84.         if(UPkey == 0)                                                                                                                                        //上
  85.         {
  86.         //        delay_ms(10);                                                                                                                                        //去抖
  87.                 if(UPkey == 0)
  88.                 {
  89.                         upflag = 1;                                                                                                                                        //跳躍標識置1
  90.                 }
  91.         }
  92.         if(LEFTkey == 0)                                                                                                                                //左
  93.         {
  94.         //        delay_ms(10);
  95.                 if(LEFTkey == 0)
  96.                 {
  97.                         OLED_DrawBMP_Faster(bx+32-8,by,bx+32,by+8,BMPclr);        //消除右邊殘影
  98.                         if(bx <= 0) bx = 128;                                                                                                //控制在128范圍內
  99.                         bx -=8;                                                                                                                                                        //一次左移8列像素
  100.                 }
  101.         }
  102.         if(RIGHTkey == 0)                                                                                                                                //右
  103.         {
  104.         //        delay_ms(10);
  105.                 if(RIGHTkey == 0)
  106.                 {
  107.                         OLED_DrawBMP_Faster(bx,by,bx+8,by+8,BMPclr);                                //消除左邊殘影
  108.                         bx +=8;                                                                                                                                                        //一次右移8列像素
  109.                         if(bx >= 128) bx = 0;                                                                                                //控制住128范圍內
  110.                 }
  111.                
  112.         }
  113. }
復制代碼

Keil代碼與Proteus仿真下載:
OLED_圖片高刷新率(51+STC32).7z (964.81 KB, 下載次數: 51)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区免费看 | 欧美久久久网站 | 国产成人精品一区二区三区网站观看 | 麻豆毛片| 久久9久| 国产亚洲二区 | 国产精品毛片一区二区在线看 | 午夜免费观看网站 | 丁香久久| 成年无码av片在线 | 免费观看羞羞视频网站 | 欧美精品乱码99久久影院 | 伊人春色在线观看 | 夜夜草| 蜜桃视频在线观看免费视频网站www | 欧洲一区视频 | 国产精品久久久久无码av | 欧美精品在线免费 | 欧美视频精品 | 亚洲视频欧美视频 | 中文字幕久久精品 | 自拍偷拍第一页 | 91就要激情| 日韩不卡三区 | 欧美日日| 天天射夜夜操 | 国产成人jvid在线播放 | 中文字幕日韩一区 | 一区二区三区在线播放视频 | 91.色| 亚洲一区二区三区四区五区中文 | 亚洲在线 | 黄色一级网 | 综合第一页 | 日日干天天操 | 一区二区视频 | 51ⅴ精品国产91久久久久久 | 黄色大片在线视频 | 中文字幕第5页 | 欧美日韩在线播放 | 天天草天天射 |