找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2781|回复: 4
收起左侧

基于DS1302的电子时钟+SHT10温度传感器 单片机代码

[复制链接]
ID:482970 发表于 2019-3-1 21:21 | 显示全部楼层 |阅读模式
基于DS1302的电子时钟+SHT10温湿度传感器,4个按键,第一是时间设置,第二三是增加减,第四十闹钟,闹钟功能设的是25时,设到25上就不会开启闹钟。

电路原理图如下:
]R2_VZHK{@I032$Q}JJMB)4.png

单片机源程序如下:
  1. #include "lcd1602.h"
  2. #include "reg51.h"
  3. #include "intrins.h"
  4. #include "ds1302.h"
  5. #include "key.h"
  6. #include "wenshi.h"

  7. sbit FMQ = P3^5; //蜂鸣器


  8. void DisplayRTC()
  9. {  WriteChar(0,0,'2');
  10.    WriteChar(0,1,'0');
  11.    WriteChar(0,2,n1+'0');
  12.    WriteChar(0,3,n0+'0');
  13.    WriteChar(0,4,'-');
  14.    WriteChar(0,5,y1+'0');        
  15.          WriteChar(0,6,y0+'0');
  16.          WriteChar(0,7,'-');
  17.          WriteChar(0,8,r1+'0');
  18.          WriteChar(0,9,r0+'0');
  19.          PutString(0,12,"WEEK:");
  20.          WriteChar(0,16,':');
  21.          //WriteChar(0,16,z1+'0');
  22.          WriteChar(0,17,z0+'0');
  23.         if(h1 > 0)  WriteChar(1,0,h1 + '0');
  24.     else        WriteChar(1,0,' ');
  25.     WriteChar(1,1,h0 +'0');
  26.           WriteChar(1,2,':');
  27.     WriteChar(1,3,m1+'0');
  28.     WriteChar(1,4,m0+'0');
  29.     WriteChar(1,5,':');
  30.     WriteChar(1,6,s1 +'0');
  31.     WriteChar(1,7,s0 +'0');
  32.     PutString(1,9,"T:");
  33.                 PutString(1,14,"RH");
  34.                 WriteChar(1,16,':');
  35. }
  36. void DisplayR1()
  37. {  WriteChar(0,0,'2');
  38.    WriteChar(0,1,'0');
  39.    WriteChar(0,2,n3+'0');
  40.    WriteChar(0,3,n2+'0');
  41.    WriteChar(0,4,'-');
  42.    WriteChar(0,5,y3+'0');        
  43.          WriteChar(0,6,y2+'0');
  44.          WriteChar(0,7,'-');
  45.          WriteChar(0,8,r3+'0');
  46.          WriteChar(0,9,r2+'0');
  47.          PutString(0,12,"WEEK:");
  48.          WriteChar(0,16,':');
  49.          
  50.          WriteChar(0,17,z1+'0');
  51.          WriteChar(1,0,h3 + '0');
  52.          
  53.     WriteChar(1,1,h2 +'0');
  54.           WriteChar(1,2,':');
  55.     WriteChar(1,3,m3+'0');
  56.     WriteChar(1,4,m2+'0');
  57.     WriteChar(1,5,':');
  58.     {if(s0%2==0)
  59.                 {WriteChar(1,6,s3+'0');
  60.      WriteChar(1,7,s2+'0');
  61.                 }
  62.                 else {WriteChar(1,6,' ');
  63.           WriteChar(1,7,' ');
  64.                      }        }
  65.                 PutString(1,9,"T:");
  66.                 PutString(1,14,"RH");
  67.                 WriteChar(1,16,':');
  68. }
  69. void DisplayR2()
  70. {  WriteChar(0,0,'2');
  71.    WriteChar(0,1,'0');
  72.    WriteChar(0,2,n3+'0');
  73.    WriteChar(0,3,n2+'0');
  74.    WriteChar(0,4,'-');
  75.    WriteChar(0,5,y3+'0');        
  76.          WriteChar(0,6,y2+'0');
  77.          WriteChar(0,7,'-');
  78.          WriteChar(0,8,r3+'0');
  79.          WriteChar(0,9,r2+'0');
  80.          PutString(0,12,"WEEK:");
  81.          WriteChar(0,16,':');
  82.          
  83.          WriteChar(0,17,z1+'0');
  84.          WriteChar(1,0,h3 + '0');
  85.         
  86.     WriteChar(1,1,h2 +'0');
  87.           WriteChar(1,2,':');
  88.     {if(s0%2==0)
  89.                      {WriteChar(1,3,m3+'0');
  90.           WriteChar(1,4,m2+'0');
  91.                      }
  92.                 else {WriteChar(1,3,' ');
  93.           WriteChar(1,4,' ');
  94.                      }
  95.                 }                        
  96.      WriteChar(1,5,':');
  97.      WriteChar(1,6,s3+'0');
  98.      WriteChar(1,7,s2+'0');
  99.                  PutString(1,9,"T:");
  100.                  PutString(1,14,"RH");
  101.                  WriteChar(1,16,':');
  102. }
  103. void DisplayR3()
  104. {  WriteChar(0,0,'2');
  105.    WriteChar(0,1,'0');
  106.    WriteChar(0,2,n3+'0');
  107.    WriteChar(0,3,n2+'0');
  108.    WriteChar(0,4,'-');
  109.    WriteChar(0,5,y3+'0');        
  110.          WriteChar(0,6,y2+'0');
  111.          WriteChar(0,7,'-');
  112.          WriteChar(0,8,r3+'0');
  113.          WriteChar(0,9,r2+'0');
  114.          PutString(0,12,"WEEK:");
  115.          WriteChar(0,16,':');
  116.          
  117.          WriteChar(0,17,z1+'0');
  118.          {if(s0%2==0)
  119.         {  WriteChar(1,0,h3 + '0');
  120.          
  121.     WriteChar(1,1,h2 +'0');}
  122.           else {WriteChar(1,0,' ');
  123.           WriteChar(1,1,' ');
  124.                      }
  125.                 }                        
  126.                 WriteChar(1,2,':');
  127.     WriteChar(1,3,m3+'0');
  128.     WriteChar(1,4,m2+'0');
  129.                 WriteChar(1,5,':');
  130.     WriteChar(1,6,s3+'0');
  131.     WriteChar(1,7,s2+'0');
  132.                 PutString(1,9,"T:");
  133.                 PutString(1,14,"RH");
  134.           WriteChar(1,16,':');
  135. }
  136. void DisplayR4()
  137. {  WriteChar(0,0,'2');
  138.    WriteChar(0,1,'0');
  139.    WriteChar(0,2,n3+'0');
  140.    WriteChar(0,3,n2+'0');
  141.    WriteChar(0,4,'-');
  142.    WriteChar(0,5,y3+'0');        
  143.          WriteChar(0,6,y2+'0');
  144.          WriteChar(0,7,'-');
  145.          WriteChar(0,8,r3+'0');
  146.          WriteChar(0,9,r2+'0');
  147.          PutString(0,12,"WEEK:");
  148.          WriteChar(0,16,':');
  149.          {if(s0%2==0)
  150.                      {WriteChar(0,17,z1+'0');}
  151.                 else {WriteChar(0,17,' '); }
  152.         }
  153.          WriteChar(1,0,h3 + '0');
  154.    WriteChar(1,1,h2 +'0');
  155.           WriteChar(1,2,':');
  156.     WriteChar(1,3,m3+'0');
  157.     WriteChar(1,4,m2+'0');
  158.                 WriteChar(1,5,':');
  159.     WriteChar(1,6,s3+'0');
  160.     WriteChar(1,7,s2+'0');
  161.                 PutString(1,9,"T:");
  162.                 PutString(1,14,"RH");
  163.                 WriteChar(1,16,':');
  164. }
  165. void DisplayR5()
  166. {  WriteChar(0,0,'2');
  167.    WriteChar(0,1,'0');
  168.    WriteChar(0,2,n3+'0');
  169.    WriteChar(0,3,n2+'0');
  170.    WriteChar(0,4,'-');
  171.    WriteChar(0,5,y3+'0');        
  172.          WriteChar(0,6,y2+'0');
  173.          WriteChar(0,7,'-');
  174.         {if(s0%2==0)
  175.              {WriteChar(0,8,r3+'0');
  176.               WriteChar(0,9,r2+'0');}
  177.         else {WriteChar(0,8,' ');
  178.         WriteChar(0,9,' ');
  179.                    }
  180.                 }                        
  181.          PutString(0,12,"WEEK:");
  182.          WriteChar(0,16,':');
  183.          WriteChar(0,17,z1+'0');
  184.          WriteChar(1,0,h3 + '0');
  185.    WriteChar(1,1,h2 +'0');
  186.           WriteChar(1,2,':');
  187.     WriteChar(1,3,m3+'0');
  188.     WriteChar(1,4,m2+'0');
  189.                 WriteChar(1,5,':');
  190.     WriteChar(1,6,s3+'0');
  191.     WriteChar(1,7,s2+'0');
  192.                 PutString(1,9,"T:");
  193.                 PutString(1,14,"RH");
  194.                 WriteChar(1,16,':');
  195. }
  196. void DisplayR6()
  197. {  WriteChar(0,0,'2');
  198.    WriteChar(0,1,'0');
  199.    WriteChar(0,2,n3+'0');
  200.    WriteChar(0,3,n2+'0');
  201.    WriteChar(0,4,'-');
  202.    {if(s0%2==0)
  203.              {WriteChar(0,5,y3+'0');
  204.               WriteChar(0,6,y2+'0');}
  205.         else {WriteChar(0,5,' ');
  206.         WriteChar(0,6,' ');
  207.                    }
  208.                 }               
  209.          WriteChar(0,7,'-');
  210.          WriteChar(0,8,r3+'0');
  211.          WriteChar(0,9,r2+'0');
  212.          PutString(0,12,"WEEK:");
  213.          WriteChar(0,16,':');
  214.          
  215.          WriteChar(0,17,z1+'0');
  216.          WriteChar(1,0,h3 + '0');
  217.    
  218.     WriteChar(1,1,h2 +'0');
  219.           WriteChar(1,2,':');
  220.     WriteChar(1,3,m3+'0');
  221.     WriteChar(1,4,m2+'0');
  222.                 WriteChar(1,5,':');
  223.     WriteChar(1,6,s3+'0');
  224.     WriteChar(1,7,s2+'0');
  225.                 PutString(1,9,"T:");
  226.                 PutString(1,14,"RH");
  227.                 WriteChar(1,16,':');
  228. }
  229. void DisplayR7()
  230. {  WriteChar(0,0,'2');
  231.    WriteChar(0,1,'0');
  232.   {if(s0%2==0)
  233.              {WriteChar(0,2,n3+'0');
  234.               WriteChar(0,3,n2+'0');}
  235.         else {WriteChar(0,2,' ');
  236.         WriteChar(0,3,' ');
  237.                    }
  238.                 }               
  239.    WriteChar(0,4,'-');
  240.    WriteChar(0,5,y3+'0');        
  241.          WriteChar(0,6,y2+'0');
  242.          WriteChar(0,7,'-');
  243.          WriteChar(0,8,r3+'0');
  244.          WriteChar(0,9,r2+'0');
  245.          PutString(0,12,"WEEK:");
  246.          WriteChar(0,16,':');
  247.          WriteChar(0,17,z1+'0');
  248.          WriteChar(1,0,h3 + '0');
  249.    WriteChar(1,1,h2 +'0');
  250.          WriteChar(1,2,':');
  251.    WriteChar(1,3,m3+'0');
  252.    WriteChar(1,4,m2+'0');
  253.          WriteChar(1,5,':');
  254.    WriteChar(1,6,s3+'0');
  255.    WriteChar(1,7,s2+'0');
  256.          PutString(1,9,"T:");
  257.          PutString(1,14,"RH");
  258.          WriteChar(1,16,':');
  259. }
  260. void Displaynz1()
  261. {  unsigned char ns2,ns3,nm2,nm3,nh2,nh3;
  262.          ns2=time1[0]&0x0f;
  263.          ns3=time1[0]>>4;
  264.          nm2=time1[1]&0x0f;
  265.          nm3=time1[1]>>4;
  266.          nh2=time1[2]&0x0f;
  267.          nh3=time1[2]>>4;
  268.           WriteChar(1,0,nh3 +'0');
  269.     WriteChar(1,1,nh2 +'0');
  270.           WriteChar(1,2,':');
  271.     WriteChar(1,3,nm3+'0');
  272.     WriteChar(1,4,nm2+'0');
  273.     WriteChar(1,5,':');
  274.     {if(s0%2==0)
  275.                 {WriteChar(1,6,ns3+'0');
  276.      WriteChar(1,7,ns2+'0');
  277.                 }
  278.                 else {WriteChar(1,6,' ');
  279.           WriteChar(1,7,' ');
  280.                      }        }
  281.                 PutString(1,9,"T:");
  282.                 PutString(1,14,"RH");
  283.                 WriteChar(1,16,':');
  284. }
  285. void Displaynz2()
  286. {   unsigned char ns2,ns3,nm2,nm3,nh2,nh3;
  287.          ns2=time1[0]&0x0f;
  288.          ns3=time1[0]>>4;
  289.          nm2=time1[1]&0x0f;
  290.          nm3=time1[1]>>4;
  291.          nh2=time1[2]&0x0f;
  292.          nh3=time1[2]>>4;
  293.           WriteChar(1,0,nh3 +'0');
  294.     WriteChar(1,1,nh2 +'0');
  295.           WriteChar(1,2,':');
  296.     {if(s0%2==0)
  297.                      {WriteChar(1,3,nm3+'0');
  298.           WriteChar(1,4,nm2+'0');
  299.                      }
  300.                 else {WriteChar(1,3,' ');
  301.           WriteChar(1,4,' ');
  302.                      }
  303.                 }                        
  304.      WriteChar(1,5,':');
  305.      WriteChar(1,6,ns3+'0');
  306.      WriteChar(1,7,ns2+'0');
  307.                  PutString(1,9,"T:");
  308.                  PutString(1,14,"RH");
  309.                  WriteChar(1,16,':');
  310. }
  311. void Displaynz3()
  312. {  unsigned char ns2,ns3,nm2,nm3,nh2,nh3;
  313.          ns2=time1[0]&0x0f;
  314.          ns3=time1[0]>>4;
  315.          nm2=time1[1]&0x0f;
  316.          nm3=time1[1]>>4;
  317.          nh2=time1[2]&0x0f;
  318.          nh3=time1[2]>>4;
  319.         {if(s0%2==0)
  320.                {WriteChar(1,0,nh3 + '0');
  321.           WriteChar(1,1,nh2 +'0');}
  322.           else {WriteChar(1,0,' ');
  323.           WriteChar(1,1,' ');
  324.                      }
  325.                 }                        
  326.                 WriteChar(1,2,':');
  327.     WriteChar(1,3,nm3+'0');
  328.     WriteChar(1,4,nm2+'0');
  329.                 WriteChar(1,5,':');
  330.     WriteChar(1,6,ns3+'0');
  331.     WriteChar(1,7,ns2+'0');
  332.                 PutString(1,9,"T:");
  333.                 PutString(1,14,"RH");
  334.           WriteChar(1,16,':');
  335. }
  336. void main(void)
  337. {  value humi_val,temp_val;
  338.    unsigned char error,checksum;
  339.    unsigned int wendu,shidu;
  340.    s_connectionreset();
  341.         P0M1 = 0;   P0M0 = 0;   //设置为准双向口

  342.     Initialize_LCD();
  343.     ClearLine(0);
  344.     ClearLine(1);

  345.           ds1302_init();
  346.          
  347.     while(1)
  348.                 {  error=0;
  349.        error+=s_measure((unsigned char*) &humi_val.i,&checksum,HUMI);
  350.        error+=s_measure((unsigned char*) &temp_val.i,&checksum,TEMP);
  351.                         if(error!=0) s_connectionreset();
  352.       else
  353.          { humi_val.f=(float)humi_val.i;
  354.            temp_val.f=(float)temp_val.i;
  355.            calc_SHT10(&humi_val.f,&temp_val.f);
  356.            wendu=10*temp_val.f;
  357.                              WriteChar(1,11,(wendu%1000)/100+'0');
  358.                                          WriteChar(1,12,(wendu%100)/10+'0');
  359.                                          
  360.                                          shidu=10*humi_val.f;
  361.                                          WriteChar(1,17,(shidu%1000)/100+'0');
  362.                                    WriteChar(1,18,(shidu%100)/10+'0');
  363.                                          WriteChar(1,19,'%');
  364.                                  }
  365.                                  
  366.                                  
  367. ……………………

  368. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
仿真 代码.rar (137.48 KB, 下载次数: 111)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1 发表于 2019-3-2 03:08 | 显示全部楼层
本帖需要重新编辑补全仿真即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

ID:482970 发表于 2019-3-10 17:34 | 显示全部楼层
admin 发表于 2019-3-2 03:08
本帖需要重新编辑补全仿真即可获得100+黑币(帖子下方有编辑按钮)

已添加
回复

使用道具 举报

ID:729850 发表于 2020-5-15 19:03 | 显示全部楼层
首先感谢楼主,其次 不知道为啥 程序一仿真就无响应
回复

使用道具 举报

ID:729850 发表于 2020-5-15 23:29 | 显示全部楼层
弄好了 软件问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表