找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7926|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

STM32F103C8T6+DS1302+DS18B20+0.96OLED萬(wàn)年歷程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:269766 發(fā)表于 2021-9-30 12:44 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
業(yè)余時(shí)間把論壇上一位大神的51單片機(jī)LCD12864萬(wàn)年歷移植到STMC8T6+0.96OLED屏上,可按鍵設(shè)置時(shí)間日期鬧鐘,代碼不規(guī)范,有一些暫時(shí)沒(méi)發(fā)現(xiàn)的bug歡迎指教。

制作出來(lái)的實(shí)物圖如下:


單片機(jī)源程序如下:
  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;  //系統(tǒng)運(yùn)行狀態(tài)
  15. u8 flag1s = 0;    //1s定時(shí)標(biāo)志位
  16. u8 flag200ms = 0; //200ms定時(shí)標(biāo)志

  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);             //延時(shí)初始化
  27.         NVIC_Configuration();
  28.         uart_init(9600);   //串口初始化
  29.         //Timerx_Init(5000,7199);//10Khz的計(jì)數(shù)頻率,計(jì)數(shù)到5000為500ms
  30.           Timerx_Init(99,719);//10Khz的計(jì)數(shù)頻率,計(jì)數(shù)到50為1ms
  31.           OLED_Init();
  32.         Init_DS1302();
  33.         LED_Init();
  34.    DS18B20_Init();
  35.        
  36.          KEY_Init();
  37.         delay_ms(50);
  38.                 RefreshTime();        //刷新時(shí)間
  39.         RefreshDate(1);        //立即刷新日期
  40.         RefreshTemp(1); //立即刷新溫度顯示
  41.         RefreshLunarn();


  42.          while(1)
  43.          {  


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




  68.         }
  69.    
  70. }


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

  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);  //顯示溫度個(gè)位
  91.                 OLED_P8x16Str(96,6,14);                   //顯示小數(shù)點(diǎn)
  92.                 OLED_P8x16Str(104,6,temp % 10); //顯示溫度小數(shù)第1位
  93.                 OLED_ShowCHinese(112,6,14);                   //顯示℃符號(hào)
  94.                 OLED_ShowCHinese(96, 0, 43);         //顯示星期
  95.     OLED_ShowCHinese(64,6,21);                   //顯示溫度圖標(biāo)  大
  96.          //RefreshLunarn();//刷新主界面農(nóng)歷
  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中斷發(fā)生與否:TIM 中斷源
  107.                 {
  108.                 TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中斷待處理位:TIM 中斷源



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

  123.                 }
  124. }
復(fù)制代碼

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

評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:229641 發(fā)表于 2021-10-2 21:15 來(lái)自手機(jī) | 只看該作者
大佬能弄個(gè)ds3231的嗎?1302的精度不靠譜哇
回復(fù)

使用道具 舉報(bào)

板凳
ID:269766 發(fā)表于 2021-10-21 23:22 | 只看該作者
無(wú)需修改程序可應(yīng)用到2.42寸SSD1309驅(qū)動(dòng)的OLED屏上

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

IMG_20211021_225353.jpg

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:269766 發(fā)表于 2021-11-3 01:18 | 只看該作者
DS3231高精度帶溫度時(shí)鐘萬(wàn)年歷在2.42寸SSD1309驅(qū)動(dòng)的OLED正常顯示,也能應(yīng)用在中景園的0.96OLED屏上

2.42OLED萬(wàn)年歷DS3231.7z

214.03 KB, 下載次數(shù): 130, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

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

弄了個(gè)ds3231的程序
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

7#
ID:845470 發(fā)表于 2021-12-25 16:05 | 只看該作者
現(xiàn)在的芯片好買(mǎi)嗎?
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

回復(fù)

使用道具 舉報(bào)

12#
ID:982032 發(fā)表于 2025-4-4 22:07 | 只看該作者
請(qǐng)教一下,怎么把DS1302的時(shí)間,通過(guò)一個(gè)模塊語(yǔ)音播報(bào)出來(lái)?
回復(fù)

使用道具 舉報(bào)

13#
ID:66862 發(fā)表于 2025-4-8 23:07 | 只看該作者
好資料先收藏起來(lái),方便學(xué)習(xí)用
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表