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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32F103C8T6+DS1302+DS18B20+0.96OLED萬年歷程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:269766 發表于 2021-9-30 12:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
業余時間把論壇上一位大神的51單片機LCD12864萬年歷移植到STMC8T6+0.96OLED屏上,可按鍵設置時間日期鬧鐘,代碼不規范,有一些暫時沒發現的bug歡迎指教。

制作出來的實物圖如下:


單片機源程序如下:
  1. #include "main.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "led.h"
  5. #include "usart.h"
  6. #include "oled.h"
  7. #include "timer.h"
  8. #include "stm32f10x.h"
  9. #include "key.h"
  10. #include "nonli.h"
  11. #include "yangli.h"
  12. #include "ds18b20.h"
  13. #include "DS1302.h"


  14. enum eStaSystem staSystem = E_NORMAL;  //系統運行狀態
  15. u8 flag1s = 0;    //1s定時標志位
  16. u8 flag200ms = 0; //200ms定時標志

  17. extern void KeyDriver(void);
  18. extern void RefreshLunarn(void);
  19. extern void KeyScan(void);





  20. int main()
  21. {
  22.        
  23.        

  24.        

  25.           SystemInit();
  26.         delay_init(72);             //延時初始化
  27.         NVIC_Configuration();
  28.         uart_init(9600);   //串口初始化
  29.         //Timerx_Init(5000,7199);//10Khz的計數頻率,計數到5000為500ms
  30.           Timerx_Init(99,719);//10Khz的計數頻率,計數到50為1ms
  31.           OLED_Init();
  32.         Init_DS1302();
  33.         LED_Init();
  34.    DS18B20_Init();
  35.        
  36.          KEY_Init();
  37.         delay_ms(50);
  38.                 RefreshTime();        //刷新時間
  39.         RefreshDate(1);        //立即刷新日期
  40.         RefreshTemp(1); //立即刷新溫度顯示
  41.         RefreshLunarn();


  42.          while(1)
  43.          {  


  44.                  
  45.                  
  46.                         KeyScan();//按鍵掃描
  47.             KeyDriver();        //按鍵檢測
  48.                 if(flag200ms)        //200ms時間到
  49.                 {
  50.                         flag200ms = 0;        //清零標志位
  51.                         AlarmMonitor(); //監控鬧鐘
  52.                         if (staSystem == E_NORMAL)//如果系統正常運行
  53.                         {
  54.                                 RefreshTime(); //刷新時間
  55.                                 RefreshDate(0);//刷新日期
  56.                            RefreshLunarn();//刷新主界面農歷
  57.                         }
  58.                         if (staSystem == Dis_Alarm)
  59.                         {
  60.                                 RefreshLunar(); //刷新陰歷
  61.                         }
  62.                 }       
  63.                 if(flag1s && (staSystem == E_NORMAL))//1s時間到并且系統為正常運行
  64.                 {
  65.                         flag1s = 0;//清零標志位
  66.                         RefreshTemp(0);//刷新溫度       
  67.                 }




  68.         }
  69.    
  70. }


  71. /* 溫度刷新函數,讀取當前溫度并根據需要刷新液晶顯示,
  72. ** ops-刷新選項:為0時只當溫度變化才刷新,非0則立即刷新 */
  73. void RefreshTemp(uint8_t ops)
  74. {
  75.     short temp;
  76.   
  77.     static int16_t backup = 0;
  78.    
  79.    temp=DS18B20_Get_Temp(); //獲取當前溫度值
  80.     //DS18B20_Start();        //啟動下一次轉換
  81.     //temp >>= 4;          //舍棄4bit小數位

  82.    
  83.     if ((backup!=temp) || (ops!=0)) //按需要刷新液晶顯示
  84.     {
  85.                

  86.                      if(temp/10 > 0)
  87.                         OLED_P8x16Str(80,6,temp/100);  //顯示溫度十位
  88.                 else
  89.                         OLED_P8x16Str(80,6,12);             //否則溫度十位為0不顯示
  90.                 OLED_P8x16Str(88,6,temp % 100/10);  //顯示溫度個位
  91.                 OLED_P8x16Str(96,6,14);                   //顯示小數點
  92.                 OLED_P8x16Str(104,6,temp % 10); //顯示溫度小數第1位
  93.                 OLED_ShowCHinese(112,6,14);                   //顯示℃符號
  94.                 OLED_ShowCHinese(96, 0, 43);         //顯示星期
  95.     OLED_ShowCHinese(64,6,21);                   //顯示溫度圖標  大
  96.          //RefreshLunarn();//刷新主界面農歷
  97.                 temp= 0;
  98.                 backup = temp;             //刷新上次溫度值

  99.     }
  100. }

  101. void TIM3_IRQHandler(void)   //TIM3中斷
  102. {
  103.                 static uint8_t tmr1s = 0;
  104.     static uint8_t tmr200ms = 0;
  105.        
  106.         if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //檢查指定的TIM中斷發生與否:TIM 中斷源
  107.                 {
  108.                 TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中斷待處理位:TIM 中斷源



  109.         tmr200ms++;  //定時200ms
  110.     if (tmr200ms >= 1)
  111.     {
  112.         tmr200ms = 0;
  113.         flag200ms = 1;
  114.         tmr1s++;  //定時1s
  115.         if (tmr1s >= 5)
  116.         {
  117.             tmr1s = 0;
  118.             flag1s = 1;
  119.         }
  120.     }
  121.         //KeyScan();//按鍵掃描
  122.                        

  123.                 }
  124. }
復制代碼

所有代碼51hei附件下載:
51黑論壇OLED萬年歷.7z (211.71 KB, 下載次數: 660)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:229641 發表于 2021-10-2 21:15 來自觸屏版 | 只看該作者
大佬能弄個ds3231的嗎?1302的精度不靠譜哇
回復

使用道具 舉報

板凳
ID:269766 發表于 2021-10-21 23:22 | 只看該作者
無需修改程序可應用到2.42寸SSD1309驅動的OLED屏上

IMG_20211021_225353.jpg (2.02 MB, 下載次數: 58)

IMG_20211021_225353.jpg

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:269766 發表于 2021-11-3 01:18 | 只看該作者
DS3231高精度帶溫度時鐘萬年歷在2.42寸SSD1309驅動的OLED正常顯示,也能應用在中景園的0.96OLED屏上

2.42OLED萬年歷DS3231.7z

214.03 KB, 下載次數: 130, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:269766 發表于 2021-11-3 01:22 | 只看該作者
觸景情傷 發表于 2021-10-2 21:15
大佬能弄個ds3231的嗎?1302的精度不靠譜哇

弄了個ds3231的程序
回復

使用道具 舉報

6#
ID:89537 發表于 2021-12-19 01:57 | 只看該作者
#include "ds18b20.h" 這個頭文件怎么能調用上,我想與其他芯片通訊
回復

使用道具 舉報

7#
ID:845470 發表于 2021-12-25 16:05 | 只看該作者
現在的芯片好買嗎?
回復

使用道具 舉報

8#
ID:717124 發表于 2022-3-30 21:57 | 只看該作者
樓主可以給一份引腳連接圖嗎?不然看著很懵圈啊
回復

使用道具 舉報

9#
ID:1143758 發表于 2025-2-12 11:19 | 只看該作者
里面可以按鍵設置嗎
回復

使用道具 舉報

10#
ID:668601 發表于 2025-2-19 19:33 | 只看該作者
你們都正常嗎,為什么我寫入時間的時候讀取的時間除了年份是2099其他都正常呢
回復

使用道具 舉報

11#
ID:822082 發表于 2025-3-25 20:41 | 只看該作者
為啥我下載程序后沒有顯示啊,STM32103FC8T6,7針OLED顯示屏;代碼編譯沒有錯誤

回復

使用道具 舉報

12#
ID:982032 發表于 2025-4-4 22:07 | 只看該作者
請教一下,怎么把DS1302的時間,通過一個模塊語音播報出來?
回復

使用道具 舉報

13#
ID:66862 發表于 2025-4-8 23:07 | 只看該作者
好資料先收藏起來,方便學習用
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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