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

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

QQ登錄

只需一步,快速開始

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

DS12887+單片機(jī)萬年歷制作

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:266700 發(fā)表于 2017-12-25 19:19 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
萬年歷。AT89C51+DS12887+18B20+12864;
支持功能:
1:時(shí)鐘顯示,年,月,日,星期,溫度,以及調(diào)時(shí)。
2:支持定時(shí)鬧鐘,可以設(shè)置兩個(gè)定時(shí)鬧鐘,支持單開,雙開與關(guān)閉。
3:支持24小時(shí)制與12小時(shí)制切換。
4:支持兩個(gè)鈴聲切換。


單片機(jī)源程序如下:
  1. /*---------------------------------------------------------------------------
  2.                 電子智能時(shí)鐘程序
  3.                 單 片 機(jī):STC89C52RC
  4.                 晶    振:12MHz
  5.                 時(shí)鐘芯片:DS12887
  6.                 液 晶 屏:LCM-12864-ST7920
  7.                 時(shí)    間:2010年3月28日
  8.                 LCM12864使用并口連接方式,PSB、RST接高電平
  9. 頭文件----------------------------------------------------------------------*/
  10. #include
  11. #include
  12. #include "LCD12864.h"
  13. #include "DS12CR887.h"
  14. #include "DS18B20.h"
  15. #include "nongli.h"
  16. #include "displaytime.h"
  17. #define uint  unsigned int
  18. #define uchar unsigned char

  19. /*--------------------定義按鍵-----------------------------------------------*/
  20. sbit K1  = P3^2; //K1-設(shè)置
  21. sbit K2  = P3^1; //K2-確認(rèn)、返回
  22. sbit K3  = P3^0; //K3-加
  23. sbit K4  = P1^7; //K4-減
  24. sbit K5  = P1^6; //液晶背光控制按鍵,按一下亮,再按一下滅
  25. sbit BLK = P1^3; //液晶背光控制輸出,低電平有效,PNP三極管控制。

  26. void DelayM(uint);               

  27. /*定義變量-------------------------------------------------------------------*/
  28. bit q=0, w=0;    //調(diào)時(shí)標(biāo)志位

  29. /*延時(shí)函數(shù) 1MS/次------------------------------------------------------------*/
  30. void DelayM(uint a)               
  31. {
  32.         uchar i;
  33.         while( --a != 0) { for(i = 0; i < 125; i++); }                                      
  34. }
  35. /*日期、時(shí)間設(shè)置函數(shù)---------------------------------------------------------*/
  36. void Set_time(uchar sel)  
  37. {
  38.         signed char address,item;
  39.         signed char max,mini;
  40.         unsigned char yy,mo,moontemp1,moontemp2;
  41.         ds_write(0x0a,0x00);     //進(jìn)入調(diào)時(shí),關(guān)閉時(shí)鐘振蕩器
  42.         write_com(0x30); write_com(0x06);
  43.         write_com(0x98); lcm_w_word("設(shè)置");
  44.         if(sel==5)  {lcm_w_word("秒鐘");address=0; max=59;mini=0;}  //秒鐘0  
  45.         if(sel==4)  {lcm_w_word("分鐘");address=2; max=59;mini=0;}  //分鐘2
  46.         if(sel==3)  {lcm_w_word("小時(shí)");address=4; max=23;mini=0;}  //小時(shí)4  
  47. //        if(sel==3)  {lcm_w_word("星期");address=6; max=7; mini=1;}  //星期6  修改為自動(dòng)計(jì)算
  48. //        if(sel==2)  {lcm_w_word("日期");address=7; max=31;mini=1;}  //日期7  
  49.         if(sel==2)  {lcm_w_word("日期");                                                                                //日期修改為按月份實(shí)際天數(shù)調(diào)整
  50.                                         address=7;                                                                                                        //日期7
  51.                mo = ds_read(0x08);//讀月
  52.                                         moontemp1=mo/16;
  53.                                         moontemp2=mo%16;
  54.                                         mo=moontemp1*10+moontemp2;//轉(zhuǎn)換成10進(jìn)制月份數(shù)據(jù)

  55.                yy = ds_read(0x09);//讀年
  56.                moontemp1=yy/16;
  57.                                         moontemp2=yy%16;
  58.                                         yy=moontemp1*10+moontemp2;//轉(zhuǎn)換成10進(jìn)制年份數(shù)據(jù)

  59.                if(mo==2&&yy%4!=0){max=28;mini=1;}//平年2月28天
  60.                                         if(mo==2&&yy%4==0){max=29;mini=1;}//閏年2月29天
  61.                                         if(mo==1||mo==3||mo==5||mo==7||mo==8||mo==10||mo==12){max=31;mini=1;}//每月31天的月份
  62.                                         if(mo==4||mo==6||mo==9||mo==11){max=30;mini=1;} //每月30天的月份
  63.                                         }                                                                                                                             
  64.         if(sel==1)  {lcm_w_word("月份");address=8; max=12;mini=1;}  //月份8  
  65.         if(sel==0)  {lcm_w_word("年份");address=9; max=99;mini=0;}  //年份9                  
  66.         item=ds_read(address);         //讀取DS12CR887某地址上的數(shù)值賦給item
  67.         if(K3 == 0) {item++;}    //K3-加數(shù):1
  68.         if(K4 == 0) {item--;}    //K4-減數(shù):1
  69.         if(item>max) item=mini;  //限制數(shù)值最大有效范圍   
  70.         if(item<mini) item="max;" 限制數(shù)值最小有效范圍=""
  71.         ds_write(address,item);  //將調(diào)整好的item值寫入DS12CR887
  72.         displaydate();                          //顯示日期
  73.         displaytime();                                 //顯示時(shí)間
  74.         displaynl();                                  //顯示農(nóng)歷
  75.         displayxq();                                 //顯示星期
  76. }
  77. /*主函數(shù)---------------------------------------------------------------------*/
  78. void main()
  79. {                             
  80.         uchar e=0;
  81.         K1=1;K2=1;K3=1;K4=1;K5=1;BLK=0;

  82.         ds_int();                        //時(shí)鐘芯片初始化
  83.         lcm_init();                        //液晶初始化
  84.         welcome();                    //調(diào)用歡迎信息
  85.         DelayM(2000);                 //延時(shí)
  86.         lcm_clr();            //清屏
  87.         Clean_12864_GDRAM();         //清屏
  88.         while(1)
  89.         {
  90.                 if (w == 0)                  //正常走時(shí)
  91.                 {
  92.                         displaydate();         //顯示日期
  93.                         displaynl();         //顯示農(nóng)歷
  94.                         displaytime();         //顯示時(shí)間
  95.                         read_temp();         //讀取溫度
  96.                         ds1820disp();          //顯示溫度
  97. displayxq();
  98.                 }        
  99.                 else {}              //否則啟動(dòng)調(diào)時(shí)

  100. /*----------------------------設(shè)置時(shí)間--------------------------------------*/               
  101.                 if (K1 == 0)         
  102.                 {
  103.                         DelayM(20);                       //按鍵消抖
  104.                         if(K1 == 0 && w == 1)      //當(dāng)是調(diào)時(shí)狀態(tài) 本鍵用于調(diào)整下一項(xiàng)
  105.                         {
  106.                                 e++;
  107.                                 if (e >= 7 ) {e = 0;}
  108.                            while(! K1 );            //等待鍵松開
  109.                                 Set_time(e);           //調(diào)整                                
  110.                         }                        
  111.                         if(K1 == 0 && w == 0)      //當(dāng)是正常狀態(tài)時(shí)就進(jìn)入調(diào)時(shí)狀態(tài)
  112.                         {
  113.                                 lcm_clr();            
  114.                                 Clean_12864_GDRAM();   //清屏
  115.                                 w=1;                       //進(jìn)入調(diào)時(shí)
  116.                                 Set_time(e);
  117.                         }
  118.                            while(K1 == 0);            //等待鍵松開
  119.                 }
  120. /*--------------------------------------------------------------------------*/               
  121.                 if (K2 == 0)                   // 當(dāng)在調(diào)時(shí)狀態(tài)時(shí)就退出調(diào)時(shí)
  122.                 {
  123.                         DelayM(20);
  124.                         if(K2 == 0 && w == 1)
  125.                         {                                
  126.                                 w = 0;                       //退出調(diào)時(shí)
  127.                                 e = 0;                           //"下一項(xiàng)"計(jì)數(shù)器清0                                                               
  128.                         }
  129.                         if(K2 == 0 && w == 0)
  130.                         {                                
  131.                                 lcm_clr(); Clean_12864_GDRAM();
  132.                                 write_com(0x30); write_com(0x06);
  133.                                 welcome();                                
  134.                                 while(K2 == 0);  
  135.                         }
  136.                         lcm_clr(); Clean_12864_GDRAM();
  137.                         ds_write(0x0a,0x20);       //調(diào)時(shí)完畢,開啟時(shí)鐘振蕩器                                
  138.                         displaydate();
  139.                         displaynl();
  140.                         displaytime();
  141.                         read_temp();
  142.                         ds1820disp();
  143.                         while(K2 == 0);  
  144.                 }
  145. /*加調(diào)整--------------------------------------------------------------------*/               
  146.                 if (K3 == 0 && w == 1)
  147.                 {
  148.                         DelayM(20);
  149.                         if(K3 == 0 && w == 1) { Set_time(e); }
  150. //                        while(K3 == 0);
  151. ……………………

  152. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
1210272102c1b89f3319bf80e9.rar (218.53 KB, 下載次數(shù): 99)




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

使用道具 舉報(bào)

沙發(fā)
ID:350006 發(fā)表于 2018-10-25 16:11 | 只看該作者
沒有原理圖
回復(fù)

使用道具 舉報(bào)

板凳
ID:517951 發(fā)表于 2020-11-23 09:08 | 只看該作者
DS12887不是自己有算閏月,大月小月的功能嗎? 我的12887讓它自己走時(shí)看看對(duì)不對(duì),如果沒有就按上面代碼再改改。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99re在线视频免费观看 | 中文欧美日韩 | 欧美日韩中文字幕在线 | 国产精品不卡 | 成人欧美一区二区三区在线播放 | 亚洲欧洲中文 | 国产三级精品三级在线观看四季网 | 午夜欧美一区二区三区在线播放 | 欧美 日韩 在线播放 | 亚洲视频在线观看一区二区三区 | 成人在线播放网站 | 亚洲国产一区二区三区在线观看 | 在线欧美一区二区 | 色偷偷888欧美精品久久久 | 日本 欧美 国产 | 中文字幕日韩一区 | 国产精品乱码一区二区三区 | 精品久久成人 | 天堂久久久久久久 | 中国美女撒尿txxxxx视频 | 在线免费毛片 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 国产玖玖 | 成人精品毛片 | 久久久久久免费精品一区二区三区 | 亚洲第一av | 亚洲成人三区 | 成人欧美一区二区三区在线观看 | 欧美久久久久久 | www免费视频 | 久久午夜视频 | 天天天操| 午夜影院在线 | а_天堂中文最新版地址 | 国产毛片毛片 | 国产人免费人成免费视频 | 日本中文字幕一区 | 国产在线小视频 | 亚洲国产一区二区视频 | 欧美一区二区三区四区视频 | 在线中文字幕av |