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

標題: OLED12864+DS3231的萬年歷制作,帶農歷,大字體(單片機源碼+實物) [打印本頁]

作者: lids    時間: 2019-1-3 18:39
標題: OLED12864+DS3231的萬年歷制作,帶農歷,大字體(單片機源碼+實物)
最近逛論壇,看到有做OLED 屏幕顯示的萬年歷,但都沒有把農歷加進去;我這個把農歷加上了,時分秒大字體顯示;溫度是讀的DS3231的溫度顯示出來的;OLED12864和DS3231時鐘芯片都是IIC通信的,共用時鐘線和數據線,接線簡單;4個按鍵(設置,+,-,退出),校時的時候,按設置鍵,相應的位會閃爍,再按+-調整,設置鍵按到第8次就退出設置,設置的位較多,中途按退出鍵也可以退出設置。單片機:用12T,或1T的都可以,我用的STC12C5A60S2,1T刷新快些;DS3231是買的模塊;OLED是0.96寸黃藍雙色的,實物比照片好看,就是太小了,
附件里有完整的源代碼。

制作出來的實物圖如下:


部分源代碼:
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. #include "codetab.h"
  4. #include "nongli.h"


  5. #define uint  unsigned int
  6. #define uchar unsigned char

  7. // ------------------------------------------------------------
  8. // IO口模擬I2C通信

  9. // ------------------------------------------------------------
  10. sbit SCL=P3^6; //串行時鐘
  11. sbit SDA=P3^7; //串行數據

  12. sbit KEY1=  P3^0;                  //調整
  13. sbit KEY2=  P3^1;                  //++
  14. sbit KEY3=  P3^2;                  //--
  15. sbit KEY4=  P3^3;                  //退出

  16. uchar  a1,a2,a3,a4;                      //按鍵消抖用
  17. uchar  disflag=0; //時間調整相關



  18. #define        Brightness        0xcf //
  19. #define X_WIDTH         128
  20. #define Y_WIDTH         64

  21. /********************************************************************************************************
  22. **         DS3231常數定義
  23. ********************************************************************************************************/
  24. #define DS3231_WriteAddress 0xD0    //器件寫地址
  25. #define DS3231_ReadAddress  0xD1    //器件讀地址
  26. #define DS3231_SECOND       0x00    //秒
  27. #define DS3231_MINUTE       0x01    //分
  28. #define DS3231_HOUR         0x02    //時
  29. #define DS3231_WEEK         0x03    //星期
  30. #define DS3231_DAY          0x04    //日
  31. #define DS3231_MONTH        0x05    //月
  32. #define DS3231_YEAR         0x06    //年

  33. #define DS3231_TEMPERATUREH 0x11    //溫度寄存器高字節(8位)        整數部分
  34. #define DS3231_TEMPERATUREL 0x12    //溫度寄存器低字節(低2位) 小數部分



  35. #define NACK    1
  36. #define ACK     0

  37. uchar shan_count; //:號閃爍計時變量
  38. uchar shan_js;    //校時閃爍計時變量
  39. bit flag;                //校時閃爍標志
  40. char hour,minute,second,year,month,day,date,week;
  41. uint TH3231;
  42. bit        ack;                //應答標志位
  43. /*********************OLED驅動程序用的延時程序************************************/
  44. /*void delay(unsigned int z)
  45. {
  46.         unsigned int x,y;
  47.         for(x=z;x>0;x--)
  48.                 for(y=1100;y>0;y--);  
  49. }        */
  50. void        Delay5US()           //@12.000MHz           延時5us
  51. {
  52.    _nop_(); _nop_();        _nop_();_nop_(); //1T單片機用4個nop,12T用1個nop
  53. }


  54. /**************************/
  55. void Timer0Init(void)                //10毫秒@11.0592MHz
  56. {
  57. //        AUXR &= 0x7F;                //定時器時鐘12T模式
  58.         TMOD &= 0xF0;                //設置定時器模式
  59.         TMOD |= 0x01;                //設置定時器0,16位模式
  60.         TL0 = 0x00;                //設置定時初值
  61.         TH0 = 0xDC;                //設置定時初值
  62.         TF0 = 0;                //清除TF0標志
  63.         TR0 = 1;                //定時器0開始計時
  64.         ET0 = 1;
  65.         EA = 1;
  66. }

  67. /**********************************************
  68. //IIC Start
  69. **********************************************/
  70. void IIC_Start()
  71. {
  72.    SCL = 1;               
  73.    SDA = 1;
  74.    SDA = 0;
  75.    SCL = 0;
  76. }

  77. /**********************************************
  78. //IIC Stop
  79. **********************************************/
  80. void IIC_Stop()
  81. {
  82.    SCL = 0;
  83.    SDA = 0;
  84.    SCL = 1;
  85.    SDA = 1;
  86. }


  87. /********************************************************************************************************
  88. **         3231
  89. ********************************************************************************************************/


  90. uchar        BCD2HEX(uchar val)
  91. {
  92.         return        ((val>>4)*10)+(val&0x0f);
  93. }

  94. uchar        HEX2BCD(uchar val)
  95. {
  96.         return        (((val%100)/10)<<4)|(val%10);
  97. }


  98. void SendByte(uchar c)
  99. {
  100.     uchar BitCnt;
  101.    
  102.     for(BitCnt=0;BitCnt<8;BitCnt++)         //要傳送的數據長度為8位
  103.     {
  104.         if((c<<BitCnt)&0x80)
  105.             SDA=1;                          //判斷發送位
  106.         else
  107.             SDA=0;     
  108.         SCL=1;                            //置時鐘線為高,通知被控器開始接收數據位
  109.         Delay5US();                       //保證時鐘高電平周期大于4μs   
  110.         SCL=0;
  111.     }
  112.     SDA=1;                                  //8位發送完后釋放數據線,準備接收應答位
  113.     SCL=1;
  114.     Delay5US();
  115.     if(SDA==1)
  116.         ack=0;   
  117.     else
  118.         ack=1;                              //判斷是否接收到應答信號
  119.     SCL=0;
  120.     Delay5US();
  121. }           

  122. uchar RcvByte()
  123. {
  124.    uchar retc;
  125.    uchar BitCnt;

  126.    retc=0;
  127.    SDA=1;                           //置數據線為輸入方式
  128.    for(BitCnt=0;BitCnt<8;BitCnt++)
  129.    {
  130.         SCL=0;                      //置時鐘線為低,準備接收數據位      
  131.         Delay5US();                 //時鐘低電平周期大于4.7μs                       
  132.         SCL=1;                      //置時鐘線為高使數據線上數據有效
  133.         Delay5US();
  134.         retc=retc<<1;
  135.         if(SDA==1)
  136.             retc=retc+1;            //讀數據位,接收的數據位放入retc中
  137.         Delay5US();
  138.    }
  139.    SCL=0;
  140.    return(retc);
  141. }                           

  142. void Ack_I2C(bit a)
  143. {
  144.         SDA        =        a;  
  145.     SCL=1;                     
  146.     Delay5US();             //時鐘低電平周期大于4us   
  147.     SCL=0;                  //清時鐘線,鉗住I2C總線以便繼續接收
  148.     Delay5US();   
  149. }                                            

  150. uchar write_byte(uchar addr, uchar write_data)
  151. {
  152.     IIC_Start();
  153.     SendByte(DS3231_WriteAddress);
  154.     if (ack == 0)
  155.         return 0;
  156.    
  157.     SendByte(addr);   
  158.     if (ack == 0)
  159.         return 0;
  160.    
  161.     SendByte(write_data);
  162.     if (ack == 0)
  163.         return 0;
  164.    
  165.     IIC_Stop();
  166.     Delay5US();      
  167.     Delay5US();      
  168.     return 1;
  169. }                                          

  170. uchar read_current()
  171. {
  172.     uchar read_data;
  173.     IIC_Start();
  174.     SendByte(DS3231_ReadAddress);
  175.     if(ack==0)
  176.         return(0);              
  177.     read_data = RcvByte();
  178.     Ack_I2C(1);
  179.     IIC_Stop();
  180.     return read_data;
  181. }                                                

  182. uchar read_random(uchar random_addr)
  183. {
  184.     uchar Tmp;
  185.         IIC_Start();
  186.     SendByte(DS3231_WriteAddress);
  187.     if(ack==0)
  188.         return(0);            
  189.     SendByte(random_addr);
  190.     if(ack==0)
  191.         return(0);
  192.         Tmp=read_current();
  193.         if(random_addr==DS3231_HOUR)
  194.                 Tmp&=0x3f;
  195.                                             
  196.     return(BCD2HEX(Tmp));//都轉10進制輸出
  197. }

  198. /***********************/
  199. uchar read_random1(uchar random_addr)  //這個是讀溫度函數
  200. {
  201.     uchar Tmp;
  202.         write_byte(0x0e,0x20);//0x0e寄存器的CONV位置1開啟溫度轉換,要這句,溫度實時刷新,這句不要,溫度要64s才刷新1次
  203.         IIC_Start();
  204.     SendByte(DS3231_WriteAddress);
  205.     if(ack==0)
  206.         return(0);            
  207.     SendByte(random_addr);
  208.     if(ack==0)
  209.         return(0);
  210.         Tmp=read_current();
  211.         return Tmp;
  212. }                                 

  213. void ModifyTime(uchar address,uchar num)
  214. {
  215.     uchar temp=0;
  216.            if(address>6 && address <0) return;
  217.     temp=HEX2BCD(num);
  218.         write_byte(address,temp);
  219. }
復制代碼

全部資料51hei下載地址:
OLED 萬年歷 (顯示正負溫度版).rar (224.28 KB, 下載次數: 1683)





作者: hawkfyj    時間: 2019-1-3 19:28
贊一個!正是我準備做的!
作者: LLL7    時間: 2019-1-4 09:18
請問利用STC單片機,將滑動變阻器的分壓輸入AD轉換接口,實現4通道的模擬量轉換為數字量,在12864上顯示。芯片是STC15F2K60S2.怎么做?感謝!
作者: 文鳳軒    時間: 2019-1-4 10:56
謝謝分享
作者: fang880413    時間: 2019-1-4 13:41
oled這樣一直顯示不會燒屏嗎
作者: 溯行    時間: 2019-1-4 23:11
樓主感謝!
作者: jialishoushi    時間: 2019-1-5 01:37
這個漂亮  有空也玩玩   多謝分享
作者: nsj21n    時間: 2019-1-5 11:35
比較完整的資料,很不錯。
作者: gh001    時間: 2019-1-5 14:46
很有幫助,!!!
作者: 1113634577    時間: 2019-1-26 11:31
OLED+DS3231+農歷轉換的常規程序,頂!
作者: luxianjun    時間: 2019-1-26 15:36
樓主可以幫忙改一份用90c58單片機的嗎,萬分感謝。
作者: hellowC8051    時間: 2019-1-29 09:15
做得不錯,值得學習
作者: bg4ajj    時間: 2019-2-15 08:27
謝謝分享!
作者: aibude001    時間: 2019-2-15 09:59
贊一個!正是我準備做的!
作者: ygnlhxyzj    時間: 2019-2-15 11:04
請問樓主,農歷如何計算
作者: lids    時間: 2019-2-18 11:59
ygnlhxyzj 發表于 2019-2-15 11:04
請問樓主,農歷如何計算

資料里面有農歷轉換的程序,你下載看看就知道了
作者: YQS    時間: 2019-2-18 12:56
謝謝樓主分享好資料,請問可否加入GPS或WIFI主動校時?
作者: lids    時間: 2019-2-18 16:23
YQS 發表于 2019-2-18 12:56
謝謝樓主分享好資料,請問可否加入GPS或WIFI主動校時?

DS3231內部帶溫補晶振,精度已經很高了,沒必要加GPS校時了
作者: lids    時間: 2019-2-18 16:27
YQS 發表于 2019-2-18 12:56
謝謝樓主分享好資料,請問可否加入GPS或WIFI主動校時?

DS3231供電用3.3V,精度很高的,測試了2個月,與手機時間對比1秒不差
作者: hashdog    時間: 2019-2-21 17:26

學習學習備用
作者: kadnn    時間: 2019-2-22 11:00
謝謝樓主,了
作者: Simon21251    時間: 2019-3-1 23:41
厲害了
作者: nsj21n    時間: 2019-3-2 17:34
lids 發表于 2019-2-18 16:23
DS3231內部帶溫補晶振,精度已經很高了,沒必要加GPS校時了

沒錯,我DIY一個數字鐘,15年到現在沒有調過時間,所以后面設計都用它了,主要是省心。
作者: nanning321    時間: 2019-3-7 13:04
再加一個鬧鐘功能就更好了
作者: opop1988    時間: 2019-3-20 13:19
灰常不錯,贊一個
作者: ysw26340    時間: 2019-3-22 09:24
求電路原理圖在哪里???
作者: lthy640220    時間: 2019-3-28 11:09
電路圖在哪里?
作者: lids    時間: 2019-3-28 16:55
lthy640220 發表于 2019-3-28 11:09
電路圖在哪里?

電路圖

OLED.jpg (49.3 KB, 下載次數: 294)

OLED.jpg

作者: luxianjun    時間: 2019-3-29 08:06
lids 發表于 2019-3-28 16:55
電路圖

手上沒有12c5a60s2.用15f2k60s2芯片測試了一下,顯示不正常,要更改那里。
作者: ilovedpj    時間: 2019-3-29 12:53
不錯謝謝樓主分享。
作者: lids    時間: 2019-4-1 12:34
luxianjun 發表于 2019-3-29 08:06
手上沒有12c5a60s2.用15f2k60s2芯片測試了一下,顯示不正常,要更改那里。

改接口定義就可以了,sbit SCL=P?^?; //串行時鐘
sbit SDA=P?^?; //串行數據
把?號改為你硬件連接的端口
作者: 終極蜘蛛俠    時間: 2019-4-8 20:02
下載來看了,那個農歷算法有點看不懂,想要更詳細的注釋


作者: 晴天彡小霖    時間: 2019-4-8 20:21
急。。調試沒反應,就是按鍵沒反應,還有時鐘也沒有反應。
作者: lids    時間: 2019-4-9 12:06
晴天彡小霖 發表于 2019-4-8 20:21
急。。調試沒反應,就是按鍵沒反應,還有時鐘也沒有反應。

看下你接線有沒有錯,只要線接對了,不會有問題的
作者: hs88    時間: 2019-4-9 13:28
這個還要外接晶振的,太舊了
作者: 晴天彡小霖    時間: 2019-4-10 16:01
lids 發表于 2019-4-9 12:06
看下你接線有沒有錯,只要線接對了,不會有問題的

它一直保持這個圖片,就是不會開始運行

1554883270677..jpg (1.22 MB, 下載次數: 221)

1554883270677..jpg

作者: 可愛的小丹寶    時間: 2019-4-10 18:30
樓主 這個用紐扣電池供電可以嗎?
作者: lids    時間: 2019-4-11 09:21
晴天彡小霖 發表于 2019-4-10 16:01
它一直保持這個圖片,就是不會開始運行

時鐘模塊的sck,sda和oled的sck,sda是接在一起的,看圖片,時鐘模塊的數據是讀出來了的,具體原因靠你自己查找了
作者: lids    時間: 2019-4-11 09:26
可愛的小丹寶 發表于 2019-4-10 18:30
樓主 這個用紐扣電池供電可以嗎?

你選用3.3V供電的單片機應該可以的,你可以試一下
作者: wanglx    時間: 2019-4-14 14:35
感謝樓主
作者: 可愛的小丹寶    時間: 2019-4-15 19:11
lids 發表于 2019-4-11 09:26
你選用3.3V供電的單片機應該可以的,你可以試一下

好的 有時間的話 試一試

作者: red_R    時間: 2019-4-18 09:20
很好,謝謝樓主無私奉獻
作者: 奇異的想法    時間: 2019-5-24 19:43
LZ,這下載的資料打開亂碼啊。有沒有別的了??
作者: highwest    時間: 2019-6-5 20:13
贊一個!!謝謝分享!
作者: aq12aq12    時間: 2019-6-7 21:04
贊一個!!謝謝分享!
作者: 93mxt    時間: 2019-7-1 22:00
謝謝分享
作者: szzxl10    時間: 2019-7-9 17:12
做得不錯,值得學習
作者: youchuang    時間: 2019-8-21 11:39
#在這里快速回復#很不錯的作品,如能附加上原理圖就更完美!
作者: cz2703    時間: 2019-8-26 23:48

謝謝分享
作者: superIOT    時間: 2019-9-2 20:27
這個小設計不錯,頂一個。
作者: youchuang    時間: 2019-9-2 23:19
感謝樓主的分享!我DIY了一個,感覺挺漂亮的,只是個人覺得0.96寸的屏小了一點。
作者: LXJ50    時間: 2019-9-3 01:36
多謝分享,下載學習。
作者: 3078    時間: 2019-9-16 14:23
謝謝分享拿來學習一下

作者: 電路城Sarah    時間: 2019-9-17 15:27
感謝樓主,能加我為站內好友嗎?想跟你交流這個方案。
作者: wenzedong    時間: 2019-9-17 21:20
之前我一直不大清楚如何實現陽歷到陰歷的轉換的,看了你的代碼,我豁然開朗,謝謝
作者: ljj200526    時間: 2019-9-17 21:52
非常不錯,學習一下,謝謝分享!
作者: 6467778399    時間: 2019-9-26 14:38


學習學習備用
作者: lids    時間: 2019-9-27 14:53
youchuang 發表于 2019-9-2 23:19
感謝樓主的分享!我DIY了一個,感覺挺漂亮的,只是個人覺得0.96寸的屏小了一點。

我自己也覺得有點小
作者: dvxchen    時間: 2019-10-16 16:22
OLED 和 DS3231共用SDA和SCL嗎?
作者: lids    時間: 2019-10-17 16:51
dvxchen 發表于 2019-10-16 16:22
OLED 和 DS3231共用SDA和SCL嗎?

是的,第1頁有原理圖
作者: flyheart    時間: 2019-11-3 08:08
非常好的資料
作者: vectorxu    時間: 2019-11-11 18:49
正好需要,謝謝分享!
作者: 10494771    時間: 2019-11-23 19:54

oled這樣一直顯示不會燒屏嗎
作者: huangye-008    時間: 2019-11-30 23:06
收藏學習!謝謝分享!!
作者: ycs89554171    時間: 2019-12-6 11:41
太牛了,設計很好。
作者: for(i=0)    時間: 2019-12-12 10:39
fang880413 發表于 2019-1-4 13:41
oled這樣一直顯示不會燒屏嗎

只要不超過耐壓一般不會那么容易燒
作者: for(i=0)    時間: 2019-12-12 10:41
謝樓主的分享
作者: for(i=0)    時間: 2019-12-21 13:49
為啥時間不走啊
作者: 吃飯第二名    時間: 2019-12-23 19:49
有誰告訴我void Set(unsigned char sel, unsigned char selby)是干嘛的嗎
作者: 沉默看日落    時間: 2019-12-25 10:39
你好樓主,請問芯片可以用stc89c52嗎,還有就是這個開發板是哪家的
作者: fancunwu    時間: 2020-2-19 22:45
youchuang 發表于 2019-9-2 23:19
感謝樓主的分享!我DIY了一個,感覺挺漂亮的,只是個人覺得0.96寸的屏小了一點。

換成OLED 屏幕大屏的,就是有點貴啊
作者: colin_liu    時間: 2020-2-20 17:27
給力  不錯呀 謝謝分享
作者: 羅程峰8200    時間: 2020-2-25 15:15
下來玩玩,好久沒搞了
作者: 0720    時間: 2020-2-27 14:26
做得不錯!我還是喜歡大屏的
作者: linnyshow    時間: 2020-3-6 16:14
非常好用。
作者: 51heihuo    時間: 2020-3-7 22:04
正需要OLED源碼部分,買了個128×32的屏,給的教程都是小字體的,大字體搞不定。下載來參考一下,感謝!
作者: 熱帶雨林    時間: 2020-3-8 11:52
資料不錯,贊一個
作者: chinarenxx    時間: 2020-3-13 17:54
發現你做了好幾個版本的電子時鐘,我來學習學習。
作者: shadowlovers    時間: 2020-3-14 00:43
OLED+DS3231
作者: aide51    時間: 2020-3-14 10:09
樓主厲害了很強大
作者: 1679079206    時間: 2020-3-14 12:00
綠屏12864也有i2c接口,嫌屏幕小可以用大號12864(當然清晰度不高)
作者: KUKUMI    時間: 2020-3-15 22:31
感謝樓主 移植很方便
作者: cqhejian    時間: 2020-3-28 08:35
正好遇到溫度讀取溫差5度差別的問題,下載您的程序來學習一下,謝謝
作者: fancunwu    時間: 2020-4-2 14:51
有鬧鈴就更好了
作者: lyh一點點    時間: 2020-4-13 15:04
有原理圖嗎?
作者: 1490055139    時間: 2020-4-14 02:36
感謝樓主的無私貢獻,非常感謝
作者: 周以    時間: 2020-6-18 16:55
牛逼,大佬!!!!!!!!!!
作者: d917419982    時間: 2020-6-23 19:56
感謝樓主分享,正在學習DS3231
作者: ycs89554171    時間: 2020-7-8 17:41
贊一個!正是我準備做的!
作者: 欣語寶貝    時間: 2020-7-8 22:11
找里很多12864的資料都不能顯示   這個試試
作者: 欣語寶貝    時間: 2020-7-8 22:34
這ds3231接線怎么接?
作者: rayin    時間: 2020-11-15 17:33
不錯,值得學習。51hei有你更精彩!!
作者: 新鄉家電維修    時間: 2020-12-24 17:34
我也做了這個,用的0.91寸的OLED,想加入測海拔氣壓,用MPL3115A2模塊,時鐘程序完成了,海拔程序還沒完成
作者: 6620680    時間: 2020-12-28 10:40
為什么我下到的是舊版LED顯示的報時萬年歷程序?!
作者: 快樂a123    時間: 2021-1-11 18:53
溫度需要單獨的模塊嗎?還是時鐘模塊帶溫度測試功能?
作者: 劉工程    時間: 2021-1-11 19:56
OLED屏引腳少確實方便。
作者: lids    時間: 2021-1-12 08:18
快樂a123 發表于 2021-1-11 18:53
溫度需要單獨的模塊嗎?還是時鐘模塊帶溫度測試功能?

溫度是時鐘模塊自帶的
作者: 6313    時間: 2021-1-14 04:42
壓縮包里面的文件,解壓后,keil加載C文件編譯不通過。HEX文件下載到89C52里面,按鍵會變的異常遲鈍,不知道是程序方面的原因還是單片機內存不夠的原因,秒有時候會顯示跳秒,比如從11秒直接跳到13秒,12沒有顯示
作者: lids    時間: 2021-1-15 14:43
6313 發表于 2021-1-14 04:42
壓縮包里面的文件,解壓后,keil加載C文件編譯不通過。HEX文件下載到89C52里面,按鍵會變的異常遲鈍,不知 ...

89C52S是12T單片機,延時要調整一下才行的,程序里面都有注釋的
作者: 網絡不安全    時間: 2021-1-18 18:40
想給它加個ds18b20,這樣溫度準些,不知要怎么改,哪位高人能指點下呢




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲欧美日韩在线 | 久久伊| 亚洲精品日韩综合观看成人91 | 精品91久久| 精品国产精品三级精品av网址 | 久久av网| 欧美精品一区二区三区四区 在线 | 欧美专区在线 | 日本一区二区在线视频 | 91精品国产91久久久久久 | 亚洲图片一区二区三区 | 亚洲精品1| 成人在线免费观看视频 | 久久久久国产一区二区三区 | 中文成人无字幕乱码精品 | 日韩在线视频一区二区三区 | 国产一区91精品张津瑜 | 国产一区视频在线 | 日本不卡免费新一二三区 | 成人精品视频 | 亚洲乱码国产乱码精品精的特点 | 久久精品国产一区二区电影 | 久久精品免费 | 亚洲看片网站 | 草草视频在线播放 | 午夜视频免费在线观看 | .国产精品成人自产拍在线观看6 | 97视频在线免费 | 日韩av在线一区 | 日韩欧美精品在线 | 国产精品久久7777777 | 亚洲精品久久久久久国产精华液 | 国产激情第一页 | 欧美高清dvd | 91天堂| 日韩精品一区二区三区高清免费 | 台湾a级理论片在线观看 | 国产精品一区二区三区四区五区 | 欧美一区二区精品 | 国产一区二区三区久久久久久久久 | 久草网址 |