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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

FT32單片機+0.96OLED顯示幾何圖形與簡單動畫的時鐘程序

[復制鏈接]
跳轉到指定樓層
樓主
簡單的時間顯示,時間可以在x 0-127 y 0-63任意地方顯示,圖形都是覆蓋顯示不會擦除原有的圖案,還有一個簡單的時鐘動畫


單片機源程序如下:
  1. #include "main.h"
  2. #include "FT32f0xx.h"
  3. #include "FT32f0xx_gpio.h"
  4. #include "FT32f0xx_syscfg.h"
  5. #include "FT32f0xx_rcc.h"
  6. #include "FT32f0xx_iwdg.h"
  7. #include "core_cm0.h"

  8. #include "delay.h"
  9. #include "timer.h"
  10. #include "gpio.h"
  11. #include "exti.h"
  12. #include "uart.h"
  13. #include "pwm.h"
  14. #include "ad.h"
  15. #include "IIC.h"
  16. #include "SPI.h"

  17. #include "OLEDDriver.h"
  18. #include "OLEDDraw.h"
  19. #include "stdio.h"
  20. #include "string.h"
  21. #include "OLED_TIME.h"
  22. #include "OLED_TIMEString.h"
  23. #include "pul.h"
  24. #include "OLED.h"
  25. /* Private functions ---------------------------------------------------------*/
  26. /**
  27.   * @brief  Main program.
  28.   * @param  None
  29.   * @retval None
  30.   */



  31. //獨立看門狗
  32. //prescaler---0~0x06--IWDG_Prescaler_x---x=4,8,16,32,64,128,256
  33. //reload---0~0x0FFF
  34. //reset time=reload*prescaler/40KHZ(ms)
  35. void iwdg_init(uint8_t prescaler,uint16_t reload)
  36. {
  37.         //LSI 40KHZ for IWDG
  38.         RCC_LSICmd(ENABLE);
  39.         
  40.         //write KR=0x5555---enable write PR or RLR
  41.         IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
  42.         //write PR
  43.         IWDG_SetPrescaler(prescaler);
  44.         //write RLR 0~0x0FFF
  45.         IWDG_SetReload(reload);
  46.         
  47.         //reload write KR 0xAAAA
  48.         IWDG_ReloadCounter();
  49.         
  50.         //enable IWDG write KR 0xCCCC
  51.         IWDG_Enable();
  52. }



  53. //uint8_t Flag = 0;
  54. //uint16_t Count = 0;

  55. uint8_t gAddMode = 0;
  56. //uint8_t gCountTrisFlag = 0;
  57. Cube Adress1,Adress2;
  58. uint8_t AdressX,AdressY;
  59. uint8_t AdressX2,AdressY2;
  60. int main(void)
  61. {
  62.         SYSCFG_DeInit();
  63.         SystemInit();//48MHZ
  64.         
  65.         RCC_HCLKConfig(RCC_SYSCLK_Div1);//AHB clock 48MHZ   APBH1CLK = PLLCLOCK * 1 = 48MHZ * 1 = 48MHZ
  66.         //APB分頻為1時 timerx時鐘時APB時鐘 否則timerx時鐘是APB時鐘的2倍頻
  67.         RCC_PCLKConfig(RCC_HCLK_Div1);//APB clock  48MHZ
  68.         
  69.         //以HCLK作時鐘源48MHZ
  70.         //48000000/1000---1ms
  71.         //48000000/100000---10us
  72.         //48000000/1000000---1us
  73.         while(SysTick_Config(48000000/100000)){}
  74.         Time6Init(124,0);
  75.         SET_GPIO_Out_PP(GPIOC,GPIO_Pin_13);
  76.         SET_GPIO_Out_PP(GPIOC,GPIO_Pin_14);
  77.                
  78.         SET_GPIO_Out_PP(GPIOB,GPIO_Pin_13);
  79.         SET_GPIO_Out_PP(GPIOA,GPIO_Pin_5);
  80.                
  81.         GPIO_ResetBits(GPIOB,GPIO_Pin_13);
  82.         GPIO_ResetBits(GPIOA,GPIO_Pin_5);
  83.                
  84.                 SET_GPIO_Out_PP(GPIOA,GPIO_Pin_2);
  85.                 GPIO_ResetBits(GPIOA,GPIO_Pin_2);
  86.         SPI1_INIT(GPIOA,GPIO_Pin_4,GPIOA, GPIO_Pin_5,GPIOA, GPIO_Pin_6,GPIOA, GPIO_Pin_7);
  87.         OLED_Init();
  88.                
  89.         memset(BMP1,0x00,sizeof(BMP1));
  90.         DrawPic(BMP1[0]);
  91.                 AdressX = 0;
  92.                 AdressY = 16;
  93.                 AdressX2 = 67-32;
  94.                 AdressY2 = 63-32;
  95.   while (1)
  96.   {
  97.                 if(gFlashCount >= 256)
  98.                 {
  99.                         gFlashCount = 0;               
  100.         
  101.         //                DrawNumber1(0,2,NumberTable[12],TestTable[0]);
  102.                         
  103.                         DrawTime((uint8_t)(gTime / 3600),(uint8_t)(gTime % 3600 / 60),(uint8_t)(gTime % 60),97,32,30);        
  104.                         
  105.                         DrawNumber(0,0,NumberTable[(gTime / 3600) / 10],BMP1[0]);
  106.                         DrawNumber(8,0,NumberTable[(gTime / 3600) % 10],BMP1[0]);
  107.                         DrawNumber(16,0,NumberTable[10],BMP1[0]);
  108.                         DrawNumber(24,0,NumberTable[(gTime % 3600 / 60) / 10],BMP1[0]);
  109.                         DrawNumber(32,0,NumberTable[(gTime % 3600 / 60) % 10],BMP1[0]);
  110.                         DrawNumber(40,0,NumberTable[10],BMP1[0]);
  111.                         DrawNumber(48,0,NumberTable[(gTime % 60) / 10],BMP1[0]);
  112.                         DrawNumber(56,0,NumberTable[(gTime % 60) % 10],BMP1[0]);
  113.                         
  114.                         Adress1 = DrawSquare(AdressX2,AdressY2,(AdressX2 + 32),(AdressY2 + 32));
  115.                         Adress2 = DrawSquare(AdressX,AdressY,(AdressX + 32),(AdressY + 32));
  116.                         DrawCube(Adress1,Adress2);
  117.                         if(gAddMode == 0)
  118.                         {
  119.                                 if(AdressX < (67 - 32))
  120.                                 {
  121.                                         AdressX++;
  122.                                         AdressX2--;
  123.                                 }
  124.                                 else
  125.                                 {
  126.                                         gAddMode = 1;
  127.                                 }
  128.                         }
  129.                         else if(gAddMode == 1)
  130.                         {
  131.                                 if(AdressY < (63 - 32))
  132.                                 {
  133.                                         AdressY++;
  134.                                         AdressY2--;
  135.                                 }
  136.                                 else
  137.                                 {
  138.                                         gAddMode = 2;
  139.                                 }
  140.                         }
  141.                         else if(gAddMode == 2)
  142.                         {
  143.                                 if(AdressX > 0)
  144.                                 {
  145.                                         AdressX--;
  146.                                         AdressX2++;
  147.                                 }
  148.                                 else
  149.                                 {
  150.                                         gAddMode = 3;
  151.                                 }
  152.                         }
  153.                         else if(gAddMode == 3)
  154.                         {
  155.                                 if(AdressY > 16)
  156.                                 {
  157.                                         AdressY--;
  158.                                         AdressY2++;
  159.                                 }
  160.                                 else
  161.                                 {
  162.                                         gAddMode = 0;
  163.                                 }
  164.                         }
  165.                         
  166.                         DrawPic(BMP1[0]);
  167.                 }
  168.   }
  169. }



  170. ……………………

  171. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

Keil代碼51hei附件下載:
OLED時鐘.7z (179.01 KB, 下載次數: 20)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天色综网| 国产精品一区在线观看 | 欧美精品一区二区三区四区 | 亚洲一区二区国产 | 国产精品一区二区三区四区 | 中文字幕在线观看第一页 | 精品国产成人 | 欧美综合色 | 五月天国产 | 国产69久久精品成人看动漫 | 国产精品久久久久久久久免费 | 黄色男女网站 | 午夜精品91| 亚州精品天堂中文字幕 | 久久国产精品视频 | 成人不卡 | 国产精品久久久久久福利一牛影视 | 国产偷录视频叫床高潮对白 | 一级欧美黄色片 | 精品久| 日本福利一区 | 欧美日韩一本 | 一区二区三区四区不卡 | 欧美精品欧美精品系列 | 中文字幕高清视频 | 国内精品久久影院 | 亚洲福利一区二区 | 欧美网站一区二区 | 亚洲风情在线观看 | 精品日韩在线观看 | 日本三级视频 | 国产中文一区二区三区 | 91久久精品日日躁夜夜躁欧美 | 国产成人精品综合 | 久久精品成人 | 日韩成人免费视频 | 精品一区二区三区在线播放 | 日韩精品一区二区三区中文字幕 | 91中文字幕在线观看 | 成人亚洲 | 国产a区 |