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

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

QQ登錄

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

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

12864+DS1302+DS18B20大字符時(shí)鐘原理圖與源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:669769 發(fā)表于 2019-12-21 14:12 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
12864+DS1302 +DS18B20 大字符時(shí)鐘供大家學(xué)習(xí)。

               電子智能時(shí)鐘程序
                單 片 機(jī):STC89C52RC
                晶    振:12MHz
                時(shí)鐘芯片:DS1302
                液 晶 屏:LCM-12864-ST7920
                時(shí)    間:2019年11月26修改完成
                LCM12864使用并口連接方式,PSB、RST接高電平   

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


電路原理圖如下:


單片機(jī)源程序如下:
  1. /*---------------------------------------------------------------------------
  2.                 電子智能時(shí)鐘程序
  3.                 單 片 機(jī):STC89C52RC
  4.                 晶    振:12MHz
  5.                 時(shí)鐘芯片:DS1302
  6.                 液 晶 屏:LCM-12864-ST7920
  7.                 時(shí)    間:2019年11月26修改完成
  8.                 LCM12864使用并口連接方式,PSB、RST接高電平   
  9. ------------------------------------------------------------------------------*/

  10. /*-------------------------------頭文件---------------------------------------*/
  11. #include <reg52.h>
  12. #include <intrins.h>
  13. #include "LCD12864.h"
  14. #include "DS1302.h"
  15. #include "DS18B20.h"
  16. #include "nongli.h"
  17. #include "displaytime.h"
  18. //#include "jieqi.h"
  19. #define uint  unsigned int
  20. #define uchar unsigned char

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

  28. /*---------------------函數(shù)聲明------------------------------*/
  29. void DelayM(uint);              
  30. void ds_w(void);
  31. void Conver_week(bit c,uchar year,uchar month,uchar day);
  32. /*-----------------------------定義全局變量------------------------------*/
  33. bit q=0, w=0;    //調(diào)時(shí)標(biāo)志位
  34. unsigned char yy,mo,dd,xq,hh,mm,ss,month_moon,day_moon,week,tiangan,dizhi,moontemp1,moontemp2;//定義時(shí)間映射全局變量(專(zhuān)用寄存器)
  35. signed char address,item,max,mini;

  36. /*-----------------------------延時(shí)函數(shù) 1MS/次-------------------------------*/
  37. void DelayM(uint a)              
  38. {
  39.         uchar i;
  40.         while( --a != 0) { for(i = 0; i < 125; i++); }                                     
  41. }
  42. /*-----------------------------日期、時(shí)間設(shè)置函數(shù)-----------------------------*/

  43. void tiaozheng(void){
  44.         yy = read_clock(0x8d);//調(diào)用1302時(shí)鐘數(shù)據(jù)中的年數(shù)據(jù),從地址0x8d中   
  45.         mo = read_clock(0x89);//調(diào)用1302時(shí)鐘數(shù)據(jù)中的月數(shù)據(jù),從地址0x89中   
  46.         dd = read_clock(0x87);//從1302芯片中讀取日數(shù)據(jù),從地址0x87中   
  47.         week = read_clock(0x8b);//從1302芯片中讀取星期數(shù)據(jù),從地址0x8b中   
  48.         lcm_w_test(0,0x80);

  49.         lcm_w_word("20");//顯示內(nèi)容字符20
  50.         write_data(yy/16+0x30);//函數(shù)參數(shù)1,代表本行寫(xiě)數(shù)據(jù),YY/16+0X30得出年十位數(shù)字的顯示碼地址,送顯示       
  51.         write_data(yy%16+0x30);//函數(shù)?
  52.         lcm_w_word("年");

  53.         write_data(mo/16+0x30);
  54.         write_data(mo%16+0x30);//與16取余數(shù),得到月份的個(gè)位數(shù),加0x30得到該數(shù)字的液晶內(nèi)定顯示碼送顯示
  55.         lcm_w_word("月");     //調(diào)用字符顯示函數(shù),顯示文字 月   

  56.         write_data(dd/16+0x30);
  57.         write_data(dd%16+0x30);//第一個(gè)1參數(shù),表示本行寫(xiě)數(shù)據(jù),日數(shù)據(jù)與16取余得個(gè)位數(shù),加0x30得到顯示碼
  58.         lcm_w_word("日");//顯示字符 日

  59.         if(read_clock(0x85) != hh){  //如果程序中的小時(shí)與1302芯片中的不同,
  60.                 hh = read_clock(0x85);  //刷新程序中的小時(shí)數(shù)據(jù)   
  61.         }
  62.         lcm_w_test(0,0x91);//第一個(gè)參數(shù)0,表示本行寫(xiě)入LCM的是指令,指定顯示位置91H(第三行左端)
  63.         write_data(hh/16+0x30);  //顯示十位
  64.          
  65.         write_data(hh%16+0x30);  //顯示個(gè)位
  66.         lcm_w_word("時(shí)");

  67.         if(read_clock(0x83) != mm){//如果1302芯片中的分鐘數(shù)據(jù)與程序中的分鐘變量不相等               
  68.                 mm = read_clock(0x83);//刷新程序中的分鐘數(shù)據(jù)
  69.         }
  70.         write_data(mm/16+0x30);//向液晶寫(xiě)數(shù)據(jù),顯示分鐘的十位數(shù)
  71.         write_data(mm%16+0x30);//向液晶寫(xiě)數(shù)據(jù),顯示分鐘的個(gè)位數(shù)
  72.         lcm_w_word("分");

  73.         if(read_clock(0x81) != ss){//如果1302芯片中的分鐘數(shù)據(jù)與程序中的秒鐘變量不相等               
  74.                 ss = read_clock(0x81);//刷新程序中的秒鐘數(shù)據(jù)
  75.         }
  76.         write_data(ss/16+0x30);//向液晶寫(xiě)數(shù)據(jù),顯示分鐘的十位數(shù)
  77.         write_data(ss%16+0x30);//向液晶寫(xiě)數(shù)據(jù),顯示分鐘的個(gè)位數(shù)
  78.         lcm_w_word("秒");         

  79. }

  80. /**********************************************************************************************************/
  81. //調(diào)整時(shí)間子函數(shù),設(shè)置鍵、數(shù)據(jù)范圍、上調(diào)加一,下調(diào)減一功能。
  82. void Set_time(unsigned char sel){ //根據(jù)選擇調(diào)整的相應(yīng)項(xiàng)目加1并寫(xiě)入DS1302,函數(shù)參數(shù)是按動(dòng)設(shè)置鍵的次數(shù)
  83.   
  84.         write_com(0x30); write_com(0x06);

  85.         lcm_w_test(0,0x98);//第一參數(shù)0表示本行寫(xiě)入指令,指定下面行的 調(diào)整 顯示起始位置為98H
  86.         lcm_w_word("★調(diào)整");//調(diào)用字符顯示函數(shù),顯示 調(diào)整字樣
  87.   
  88. /*        if(sel==6)  {lcm_w_word("星期");address=0x8a; max=7;mini=1;          
  89.      tiaozheng();
  90.      ds_w();
  91.      tiaozheng();
  92.           }
  93. */
  94. //////////////////////////////////////////////////////////////
  95.         if(sel==5)  {lcm_w_word("秒鐘");address=0x80; max=59;mini=0;          
  96.                 tiaozheng();  //調(diào)用日期、時(shí)間調(diào)整函數(shù)
  97.            ds_w();                  //被調(diào)數(shù)據(jù)加一或減一函數(shù)
  98.            tiaozheng();
  99.                                             
  100.         }        //秒7,按動(dòng)7次顯示 調(diào)整秒鐘   
  101.                 //并指定秒鐘數(shù)據(jù)寫(xiě)入1302芯片的地址是0x82,秒鐘數(shù)據(jù)的最大值是59,最小值是0
  102.    /////////////////////////////////////////////////////////////////////////
  103.         if(sel==4)  {lcm_w_word("分鐘");address=0x82; max=59;mini=0;
  104.            tiaozheng();
  105.            ds_w();
  106.            tiaozheng();
  107.   
  108.         }        //分鐘6,按動(dòng)6次顯示 調(diào)整分鐘
  109.                 //并指定分鐘數(shù)據(jù)寫(xiě)入1302芯片的地址是0x82,分鐘數(shù)據(jù)的最大值是59,最小值是0


  110.         if(sel==3)  {lcm_w_word("小時(shí)");address=0x84; max=23;mini=0;
  111.         /***********************************************************/
  112.                  if(address > 12){
  113.                                            address = address-12;        }
  114.          /********************************************************/
  115.             tiaozheng();
  116.            ds_w();
  117.            tiaozheng();
  118.   
  119.         }        //小時(shí)5,按動(dòng)5次顯示 調(diào)整小時(shí)
  120.                 //規(guī)定小時(shí)數(shù)據(jù)寫(xiě)入1302芯片的位置是0x84,小時(shí)數(shù)據(jù)最大值23,最小值是0
  121.   

  122.         if(sel==2)  {lcm_w_word("日期");
  123.                 address=0x86;

  124.                 mo = read_clock(0x89);//讀月數(shù)據(jù)
  125.                 moontemp1=mo/16;
  126.                 moontemp2=mo%16;
  127.                 mo=moontemp1*10+moontemp2;//轉(zhuǎn)換成10進(jìn)制月份數(shù)據(jù)

  128.       yy = read_clock(0x8d);//讀年數(shù)據(jù)
  129.         moontemp1=yy/16;
  130.                 moontemp2=yy%16;
  131.                 yy=moontemp1*10+moontemp2;//轉(zhuǎn)換成10進(jìn)制年份數(shù)據(jù)

  132.         if(mo==2&&yy%4!=0){max=28;mini=1;}//平年2月28天
  133.                 if(mo==2&&yy%4==0){max=29;mini=1;}//閏年2月29天
  134.                 if(mo==1||mo==3||mo==5||mo==7||mo==8||mo==10||mo==12){max=31;mini=1;}//31天的月份
  135.                 if(mo==4||mo==6||mo==9||mo==11){max=30;mini=1;}//30天的月份
  136.                 tiaozheng();
  137.                 ds_w();
  138.                 tiaozheng(); //調(diào)用日期、時(shí)間調(diào)整函數(shù)

  139.   }        //日3,按動(dòng)3次顯示 調(diào)整日期
  140.                 //規(guī)定日期數(shù)據(jù)寫(xiě)入1302的位置地址是0x86,日期最大值31,最小值是1



  141.   if(sel==1)  {lcm_w_word("月份");address=0x88; max=12;mini=1;
  142.      tiaozheng();
  143.      ds_w();
  144.      tiaozheng();
  145.   
  146.    }        //月2,按動(dòng)2次顯示 調(diào)整月份          
  147.                 //規(guī)定月份寫(xiě)入1302的位置地址是0x88,月份最大值12,最小值1


  148.   if(sel==0)  {lcm_w_word("年份");address=0x8c; max=99; mini=0;
  149.      tiaozheng();
  150.      ds_w();                //被調(diào)數(shù)據(jù)加一或減一函數(shù)
  151.      tiaozheng();        //調(diào)用日期、時(shí)間調(diào)整函數(shù)

  152.    }        //年1,按動(dòng)1次顯示 調(diào)整年份,
  153.                 //規(guī)定年份寫(xiě)入1302的地址是0x8c,年份的最大值99,最小值0

  154. }

  155. /*****************************************************************************/
  156. //被調(diào)數(shù)據(jù)加一或減一,并檢查數(shù)據(jù)范圍,寫(xiě)入1302指定地址保存
  157. void ds_w(void){

  158.         item=((read_clock(address+1))/16)*10 + (read_clock(address+1))%16;
  159.         if(K3 == 0){ //如果按動(dòng)上調(diào)鍵
  160.                 item++;  //數(shù)加 1  
  161.         }                                                                                                                 
  162.         if(K4 == 0){  //如果按動(dòng)下調(diào)鍵
  163.                   item--;   //數(shù)減 1
  164.         }
  165.         if(item>max) item=mini;//查看數(shù)值是否在有效范圍之內(nèi)   
  166.         if(item<mini) item=max;//如果數(shù)值小于最小值,則自動(dòng)等于最大值           
  167.         write_clock(0x8e,0x00);//允許寫(xiě)1302芯片操作
  168.         write_clock(address,(item/10)*16+item%10);//轉(zhuǎn)換成16進(jìn)制寫(xiě)入1302
  169.         write_clock(0x8e,0x80);//寫(xiě)保護(hù),禁止寫(xiě)操作
  170. }

  171. /****可參考***********可參考**************可參考***************以上是調(diào)試********

  172. /*主函數(shù)---------------------------------------------------------------------*/
  173. void main()
  174. {                            
  175.         uchar e=0;
  176.         K1=1;K2=1;K3=1;K4=1;//BLK=0;//K5=1;

  177.         Init_1302();                //時(shí)鐘芯片初始化  
  178.         lcm_init();                        //液晶初始化
  179.         welcome();                    //調(diào)用歡迎信息
  180.         DelayM(4000);                 //歡迎信息 延時(shí)時(shí)間  
  181.         lcm_clr();            //清屏
  182.         Clean_12864_GDRAM();         //清屏
  183.         while(1)
  184.         {
  185.                 if (w == 0)                  //正常走時(shí)
  186.                 {
  187.                         displaydate();         //顯示日期
  188. //                        displaynl();         //顯示農(nóng)歷
  189.                         nongli();                 //顯示農(nóng)歷
  190. //                        displayjieqi(); //顯示節(jié)氣
  191.                         displaytime();         //顯示時(shí)間
  192.                         read_temp();         //讀取溫度
  193.                         ds1820disp();          //顯示溫度
  194.                         displayxq();         //顯示星期
  195.                 }       
  196.                 else {}            //否則啟動(dòng)調(diào)時(shí)  

  197. /*----------------------------設(shè)置時(shí)間--------------------------------------*/               
  198.                 if (K1 == 0)         
  199.                 {
  200.                         DelayM(20);                       //按鍵消抖
  201.                         if(K1 == 0 && w == 1)      //當(dāng)是調(diào)時(shí)狀態(tài) 本鍵用于調(diào)整下一項(xiàng)   
  202.                         {
  203.                                 e++;
  204.                                 if (e >= 7 ) {e = 0;}
  205.                            while(! K1 );            //等待鍵松開(kāi)
  206.                                 Set_time(e);           //調(diào)整                               
  207.                         }                       
  208.                         if(K1 == 0 && w == 0)      //當(dāng)是正常狀態(tài)時(shí)就進(jìn)入調(diào)時(shí)狀態(tài)   
  209.                         {
  210.                                 lcm_clr();            
  211.                                 Clean_12864_GDRAM();   //清屏
  212.                                 w=1;                       //進(jìn)入調(diào)時(shí)
  213.                                 Set_time(e);
  214.                         }
  215.                            while(K1 == 0);            //等待鍵松開(kāi)
  216.                 }
  217. /*--------------------------------------------------------------------------*/               
  218.                 if (K2 == 0)                   // 當(dāng)在調(diào)時(shí)狀態(tài)時(shí)就退出調(diào)時(shí)
  219.                 {
  220.                         DelayM(20);
  221.                         if(K2 == 0 && w == 1)
  222.                         {                               
  223.                                 w = 0;                       //退出調(diào)時(shí)
  224.                                 e = 0;                           //"下一項(xiàng)"計(jì)數(shù)器清0                                                               
  225.                         }
  226.                         if(K2 == 0 && w == 0)
  227.                         {                               
  228.                                 lcm_clr(); Clean_12864_GDRAM();
  229.                                 write_com(0x30); write_com(0x06);
  230.                                 welcome();                               
  231.                                 while(K2 == 0);  
  232.                         }
  233.                         lcm_clr(); Clean_12864_GDRAM();
  234.                         displaydate();
  235.                         displayxq();
  236.                         displaynl();
  237.                         displaytime();
  238.                         read_temp();
  239.                         ds1820disp();
  240.                         while(K2 == 0);  
  241.                 }
  242. /*加調(diào)整--------------------------------------------------------------------*/               
  243.                 if (K3 == 0 && w == 1)
  244.                 {
  245.                         DelayM(20);
  246.                         if(K3 == 0 && w == 1) { Set_time(e); }
  247.                         while(K3 == 0);
  248.                         while(! K3 );
  249.                 }
  250. /*減調(diào)整--------------------------------------------------------------------*/               
  251.                 if (K4 == 0 && w == 1)
  252.                 {              
  253.                         DelayM(20);
  254.                         if(K4 == 0 && w == 1) { Set_time(e); }
  255.                         while(K4 == 0);
  256.                         while(! K4 );
  257.                 }
  258. /*液晶背光控制,按一下亮,再按一下滅----------------------------------------*/
  259. /*                if(K5 == 0)        
  260.                 {
  261.                         DelayM(20); q = ~q;      //標(biāo)志位取反
  262.                          if(q){BLK = BLK | 1;}   
  263.                                  else {BLK = BLK & 0;}   
  264.                         while(K5 == 0);           
  265.                 }                          */
  266.         }
  267. }
  268. /*結(jié)束----------------------------------------------------------------------*/
復(fù)制代碼

所有資料51hei提供下載:
12864大字符時(shí)鐘原理圖.rar (16.91 KB, 下載次數(shù): 80)
12864+DS1302 +DS18B20 大字符時(shí)鐘.rar (126.78 KB, 下載次數(shù): 100)
12864+DS1302 +DS18B20 大字符時(shí)鐘原理圖.pdf (377.31 KB, 下載次數(shù): 67)

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:669769 發(fā)表于 2019-12-24 10:27 | 只看該作者
管理員你好!如何修改已發(fā)的帖子?
回復(fù)

使用道具 舉報(bào)

板凳
ID:56002 發(fā)表于 2019-12-25 11:01 | 只看該作者
這是杜洋程序,貼出請(qǐng)注明出處! 電子制作其樂(lè)無(wú)窮!
回復(fù)

使用道具 舉報(bào)

地板
ID:669769 發(fā)表于 2019-12-30 15:33 | 只看該作者
oplink 發(fā)表于 2019-12-25 11:01
這是杜洋程序,貼出請(qǐng)注明出處! 電子制作其樂(lè)無(wú)窮!

沒(méi)有聽(tīng)懂你的意思啊?
回復(fù)

使用道具 舉報(bào)

5#
ID:59151 發(fā)表于 2020-1-22 23:59 | 只看該作者
正在學(xué)習(xí)中,謝謝分享!
回復(fù)

使用道具 舉報(bào)

6#
ID:59151 發(fā)表于 2020-1-23 00:00 | 只看該作者
正在學(xué)習(xí)中,謝謝分享!
回復(fù)

使用道具 舉報(bào)

7#
ID:634466 發(fā)表于 2020-1-25 13:02 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

8#
ID:400262 發(fā)表于 2020-1-28 22:46 | 只看該作者
背光控制那里,注釋掉了,去掉注釋重新編譯是不是就可以用了?
回復(fù)

使用道具 舉報(bào)

9#
ID:208733 發(fā)表于 2020-2-1 17:07 | 只看該作者
這里面是不是有源程序
回復(fù)

使用道具 舉報(bào)

10#
ID:200118 發(fā)表于 2020-2-2 17:47 | 只看該作者
謝謝分享。。。
回復(fù)

使用道具 舉報(bào)

11#
ID:200118 發(fā)表于 2020-2-2 17:51 | 只看該作者
謝謝分享。。。
回復(fù)

使用道具 舉報(bào)

12#
ID:288930 發(fā)表于 2020-2-3 11:59 | 只看該作者
東西不錯(cuò),謝謝分享!
回復(fù)

使用道具 舉報(bào)

13#
ID:669769 發(fā)表于 2020-2-4 15:18 | 只看該作者
不吃草的牛 發(fā)表于 2020-2-1 17:07
這里面是不是有源程序

12864+DS1302 +DS18B20 大字符時(shí)鐘.rar 有的
回復(fù)

使用道具 舉報(bào)

14#
ID:669769 發(fā)表于 2024-5-27 14:29 | 只看該作者
有源程序的!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区视频 | 一区二区三区视频在线 | 午夜一级做a爰片久久毛片 精品综合 | 久久99国产精品 | 日韩二区| 亚洲一区二区三区国产 | 小视频你懂得 | 操视频网站 | 伊人网伊人 | 久久久久国产精品一区 | 一级欧美日韩 | 男女羞羞在线观看 | 欧美福利三区 | 91精品国产综合久久久久 | 色男人的天堂 | 国产真实精品久久二三区 | 日韩av在线一区 | 欧美一区二区在线 | 日韩国产一区二区三区 | 91久久久久久久久久久久久 | 久久精品国产一区二区 | 亚洲 精品 综合 精品 自拍 | 成人国产精品久久久 | 日日干日日操 | 美国av毛片 | 国产丝袜av | 国产美女一区二区三区 | 日韩精品在线观看免费 | 亚洲天堂久久 | 日本天天操 | 日本免费在线 | 国产视频欧美 | 久久免费视频2 | 一区二区三区视频免费看 | 成人免费观看视频 | 毛片大全 | 欧美性大战xxxxx久久久 | 色综合av | 一区二区三区四区在线 | 一级午夜aaa免费看三区 | 久久久久久成人 |