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

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

QQ登錄

只需一步,快速開始

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

單片機(jī)LCD12864數(shù)字時(shí)鐘溫度制作 附源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
制作出來的實(shí)物圖如下:


單片機(jī)源程序如下:
  1. /**********************************************
  2.         電子數(shù)字時(shí)鐘程序
  3.         單 片 機(jī):STC15F2K60S2
  4.         晶    振:12MHz
  5.         液 晶 屏:LCM-12864-ST7920
  6.         時(shí)    間:2026年02月25日修改完成
  7.         LCM12864使用并口連接方式,PSB、RST接高電平
  8. **********************************************/
  9. //頭文件
  10. #include "stc15f.h"
  11. #include <intrins.h>
  12. #include "LCD12864.h"
  13. #include "DS1302.h"
  14. #include "DS18B20.h"
  15. #include "NongLi.h"
  16. #include "Display_Time.h"
  17. #include "ZiKu.h"
  18. #include <math.h>

  19. #define uint unsigned int
  20. #define uchar unsigned char

  21. //定義按鍵
  22. sbit K1 =P2^3;        //K1-設(shè)置
  23. sbit K2 =P2^4;         //K2-確認(rèn)、返回
  24. sbit K3 =P2^6;         //K3-加
  25. sbit K4 =P2^7;         //K4-減
  26. sbit BLK=P2^0;        
  27. sbit wei=P3^6;
  28. sbit duan=P3^7;
  29. //函數(shù)聲明
  30. void Add_Sub();
  31. void Delayms(uint);

  32. //定義全局變量
  33. bit W=0;       
  34. uchar Miao,Fen,Shi,Ri,Yue,Zhou,Nian,Moontemp1,Moontemp2;
  35. signed char Address,Item,Max,Min;

  36. //延時(shí)函數(shù)1ms/次
  37. void Delayms(uint ms)              
  38. {
  39.         uchar i;
  40.         while(--ms!=0)
  41.                 for(i=0;i<125;i++);                                     
  42. }
  43. //日期、時(shí)間設(shè)置函數(shù)
  44. void Set_Time()
  45. {
  46.         Nian=Read_DS1302(0x8D);       
  47.         Yue=Read_DS1302(0x89);       
  48.         Ri=Read_DS1302(0x87);       
  49.         Week=Read_DS1302(0x8B);       
  50.         Write_LCD(0,0x80);

  51.         Write_String("20");                       
  52.         Write_LCD(1,(Nian/16)+0x30);       
  53.         Write_LCD(1,Nian%16+0x30);       
  54.         Write_String("年");

  55.         Write_LCD(1,(Yue/16)+0x30);
  56.         Write_LCD(1,Yue%16+0x30);       
  57.         Write_String("月");                       
  58. /*
  59.         Write_LCD(0,0x88);
  60.         Write_String("星期");
  61.         Write_LCD(1,Yue%16+0x30);       
  62. */
  63.         Write_LCD(1,(Ri/16)+0x30);
  64.         Write_LCD(1,Ri%16+0x30);       
  65.         Write_String("日");                       

  66.         if(Read_DS1302(0x85)!=Shi)       
  67.                 Shi=Read_DS1302(0x85);       
  68.        
  69.         Write_LCD(0,0x91);
  70.         Write_LCD(1,(Shi/16)+0x30);       
  71.         Write_LCD(1,Shi%16+0x30);       
  72.         Write_String("時(shí)");

  73.         if(Read_DS1302(0x83)!=Fen)                       
  74.                 Fen=Read_DS1302(0x83);       
  75.         Write_LCD(1,(Fen/16)+0x30);       
  76.         Write_LCD(1,Fen%16+0x30);       
  77.         Write_String("分");

  78.         if(Read_DS1302(0x81)!=Miao)                       
  79.                 Miao=Read_DS1302(0x81);       
  80.         Write_LCD(1,(Miao/16)+0x30);
  81.         Write_LCD(1,Miao%16+0x30);       
  82.         Write_String("秒");
  83. }
  84. //調(diào)整時(shí)間子函數(shù)
  85. void Set_time(uchar Set)
  86. {  
  87.         Write_Com(0x30);
  88.         Write_Com(0x06);

  89.         Write_LCD(0,0x98);               
  90.         Write_String("★調(diào)整");       
  91.   
  92. /*        if(Set==6)
  93.         {
  94.                 Write_String("星期");
  95.                 Address=0x8A;
  96.                 Max=7;
  97.                 Min=1;          
  98.              Set_Time();
  99.              ds_w();
  100.              Set_Time();
  101.           }
  102. */
  103.         if(Set==5)
  104.         {
  105.                 Write_String("秒鐘");
  106.                 Address=0x80;
  107.                 Max=59;
  108.                 Min=0;          
  109.                 Set_Time();               
  110.                    Add_Sub();               
  111.                    Set_Time();
  112.           }  

  113.         if(Set==4)
  114.         {
  115.                 Write_String("分鐘");
  116.                 Address=0x82;
  117.                 Max=59;
  118.                 Min=0;
  119.                    Set_Time();
  120.                    Add_Sub();
  121.                    Set_Time();
  122.         }

  123.         if(Set==3)
  124.         {
  125.                 Write_String("小時(shí)");
  126.                 Address=0x84;
  127.                 Max=23;
  128.                 Min=0;
  129.             Set_Time();
  130.                    Add_Sub();
  131.                    Set_Time();
  132.           }  

  133.         if(Set==2)
  134.         {
  135.                 Write_String("日期");
  136.                 Address=0x86;
  137.                 Yue=Read_DS1302(0x89);               
  138.                 Moontemp1=Yue/16;
  139.                 Moontemp2=Yue%16;
  140.                 Yue=Moontemp1*10+Moontemp2;       

  141.               Nian= Read_DS1302(0x8d);       
  142.               Moontemp1=Nian/16;
  143.                 Moontemp2=Nian%16;
  144.                 Nian=Moontemp1*10+Moontemp2;

  145.               if(Yue==2&&Nian%4!=0)
  146.                 {
  147.                         Max=28;       
  148.                         Min=1;
  149.                 }
  150.                 if(Yue==2&&Nian%4==0)
  151.                 {
  152.                         Max=29;       
  153.                         Min=1;
  154.                 }
  155.                 if(Yue==1||Yue==3||Yue==5||Yue==7||Yue==8||Yue==10||Yue==12)
  156.                 {
  157.                         Max=31;       
  158.                         Min=1;
  159.                 }
  160.                 if(Yue==4||Yue==6||Yue==9||Yue==11)
  161.                 {
  162.                         Max=30;       
  163.                         Min=1;
  164.                 }
  165.                 Set_Time();
  166.                 Add_Sub();
  167.                 Set_Time();
  168.         }

  169.           if(Set==1)
  170.           {
  171.                 Write_String("月份");
  172.                 Address=0x88;
  173.                 Max=12;
  174.                 Min=1;
  175.              Set_Time();
  176.              Add_Sub();
  177.              Set_Time();
  178.            }

  179.         if(Set==0)
  180.           {
  181.                 Write_String("年份");
  182.                 Address=0x8C;
  183.                 Max=99;
  184.                 Min=0;
  185.              Set_Time();
  186.              Add_Sub();       
  187.              Set_Time();       
  188.            }
  189. }

  190. //加減子函數(shù)
  191. void Add_Sub()
  192. {
  193.         Item=((Read_DS1302(Address+1))/16)*10+(Read_DS1302(Address+1))%16;
  194.        
  195.         if(K3==0)        //如果按動(dòng)上調(diào)鍵
  196.                 Item++;        //數(shù)加 1  
  197.         if(K4==0)        //如果按動(dòng)下調(diào)鍵
  198.                   Item--;        //數(shù)減 1
  199.         if(Item>Max)
  200.                 Item=Min;          
  201.         if(Item<Min)
  202.                 Item=Max;                   
  203.         Write_DS1302(0x8E,0x00);       
  204.         Write_DS1302(Address,(Item/10)*16+Item%10);       
  205.         Write_DS1302(0x8E,0x80);       
  206. }

  207. //主函數(shù)
  208. void main()
  209. {                            
  210.         uchar E=0;
  211.         BLK=0;K1=1;K2=1;K3=1;K4=1;
  212.         wei=0;
  213.         duan=0;
  214.         Init_DS1302();               
  215.         Init_LCD();                       
  216.         Welcome();                   
  217.         Delayms(3000);                
  218.         Delayms(3000);
  219.         Delayms(3000);
  220.         Clear_LCD();               
  221.         Clear12864_GDRAM();       
  222.         while(1)
  223.         {
  224.                 if(W==0)                       
  225.                 {
  226.                         Display_Date();       
  227.                         Display_Nl();       
  228.                         Display_Time();       
  229.                         Read_Temp();       
  230.                         Display_Temp();       
  231.                         Display_Week();       
  232.                 }       
  233.                 else {}                               

  234.                 //設(shè)置時(shí)間       
  235.                 if(K1==0)         
  236.                 {
  237.                         Delayms(20);               
  238.                         if(K1==0&&W==1)               
  239.                         {
  240.                                 E++;
  241.                                 if(E>=7)
  242.                                         E=0;
  243.                                    while(!K1);               
  244.                                 Set_time(E);        //調(diào)整                               
  245.                         }                       
  246.                         if(K1==0&&W==0)               
  247.                         {
  248.                                 Clear_LCD();            
  249.                                 Clear12864_GDRAM();               
  250.                                 W=1;                                       
  251.                                 Set_time(E);
  252.                         }
  253.                                 while(!K1);                         
  254.                 }

  255.                 //退出設(shè)置               
  256.                 if(K2==0)                               
  257.                 {
  258.                         Delayms(20);
  259.                         if(K2==0&&W==1)
  260.                         {                               
  261.                                 W=0;                       
  262.                                 E=0;                                                                               
  263.                         }
  264.                         if(K2==0&&W==0)
  265.                         {                               
  266.                                 Clear_LCD();
  267.                                 Clear12864_GDRAM();
  268.                                 Write_Com(0x30);
  269.                                 Write_Com(0x06);
  270.                                 Welcome();                               
  271.                                 while(!K2);                          
  272.                         }
  273.                         Clear_LCD();
  274.                         Clear12864_GDRAM();                               
  275.                         Display_Date();
  276.                         Display_Week();
  277.                         Display_Nl();
  278.                         Display_Time();
  279.                         Read_Temp();
  280.                         Display_Temp();
  281.                         while(!K2);                                  
  282.                 }

  283.                 //加調(diào)整               
  284.                 if(K3==0&&W==1)
  285.                 {
  286.                         Delayms(20);
  287.                         if(K3==0&&W==1)
  288.                                 Set_time(E);
  289.                         while(!K3);                               
  290.                 }

  291.                 //減調(diào)整       
  292.                 if(K4==0&&W==1)
  293.                 {              
  294.                         Delayms(20);
  295.                         if(K4==0&&W==1)
  296.                                 Set_time(E);
  297.                         while(!K4);                       
  298.                 }
  299.         }
  300. }
復(fù)制代碼

原理圖和程序下載: 12864數(shù)顯時(shí)鐘溫度.7z (95.76 KB, 下載次數(shù): 0)

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:1167385 發(fā)表于 2026-3-3 22:35 | 只看該作者
看見了。
回復(fù)

使用道具 舉報(bào)

板凳
ID:437129 發(fā)表于 2026-3-5 21:43 | 只看該作者
樓主辛苦,多謝樓主無私奉獻(xiàn),向樓主學(xué)習(xí)!
回復(fù)

使用道具 舉報(bào)

地板
ID:437129 發(fā)表于 2026-3-7 19:37 | 只看該作者
樓主老師好,我是一個(gè)五十多歲的單片機(jī)編程初學(xué)者。能否指點(diǎn)一下時(shí)鐘芯片改成DS3231SN或RX8201的編程,DS1302精度實(shí)在太差了,真實(shí)使用誤差大。謝謝!
回復(fù)

使用道具 舉報(bào)

5#
ID:170693 發(fā)表于 2026-3-10 14:44 | 只看該作者
下載了,多謝樓主無私奉獻(xiàn),
回復(fù)

使用道具 舉報(bào)

6#
ID:437129 發(fā)表于 2026-3-21 21:54 | 只看該作者
多謝樓主分享。我用清翔51開發(fā)板+DS102模塊+STC89C52單片機(jī)測試成功。修改了液晶屏、按鍵、第DS1302模塊引腳。
1、以下是樓主電路圖



2、以下是清翔開發(fā)板測試





回復(fù)

使用道具 舉報(bào)

7#
ID:1064915 發(fā)表于 2026-3-22 08:23 | 只看該作者
這是帶字庫的
回復(fù)

使用道具 舉報(bào)

8#
ID:437129 發(fā)表于 2026-3-22 21:53 | 只看該作者

對(duì)滴,帶字庫,使用方便。可以并口輸入也可以串口輸入,簡化電路,節(jié)約IO口。
回復(fù)

使用道具 舉報(bào)

9#
ID:437129 發(fā)表于 2026-3-22 21:57 | 只看該作者
DS1302時(shí)鐘芯片走時(shí)精度差,哪位壇友大佬能幫忙改成DS3231SN或RX8025T的,在這里表示感謝!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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