找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5769|回复: 6
收起左侧

基于单片机的太阳能热水器仿真与源码设计

  [复制链接]
ID:331776 发表于 2018-5-17 00:00 | 显示全部楼层 |阅读模式
本设计为基于单片机的热水器仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
QQ图片20180516235455.png
0.jpg

太阳能热水器单片机源程序如下:
  1. #include"reg52.h"
  2. #include"LCD1602.h"
  3. #include"delay.h"
  4. #include"DS1302.h"
  5. #include"DS18B20.h"
  6. uchar DS_Data[]={0x46,0x20,0x21,0x20,0x10,0x01,0x15}; //05年10月20 21:20:30
  7. uchar Data_RTO[7];
  8. uchar Week[]="MON TUE WEN THU FRI SAT SUN";
  9. uchar *Date,N,SW_Flag,Change_Flag;
  10. char Knum,T_SET=25,H_SET=2,Height=1;

  11. void init()          //液晶初始化子函数
  12. {
  13.         write_com(0x38);
  14.         write_com(0x0c);
  15.         write_com(0x06);
  16.         write_com(0x01);       
  17. }
  18. void RTO_Display()
  19. {
  20.         v_Get1302(0x81,Data_RTO,7);
  21.        
  22.         write_com(0x80);
  23.         write_data('2');
  24.         write_data('0');
  25.         write_data((Data_RTO[6]>>4&0x0f)+0x30);             //备注:+ 的优先级高于&;>>优先级高于&
  26.     write_data((Data_RTO[6]&0x0f)+0x30);
  27.         write_data('-');
  28.         write_data((Data_RTO[4]>>4&0x0f)+0x30);             //备注:+ 的优先级高于&;>>优先级高于&
  29.     write_data((Data_RTO[4]&0x0f)+0x30);
  30.         write_data('-');
  31.         write_data((Data_RTO[3]>>4&0x0f)+0x30);             //备注:+ 的优先级高于&;>>优先级高于&
  32.     write_data((Data_RTO[3]&0x0f)+0x30);

  33.         write_com(0xc0);
  34.         write_data((Data_RTO[2]>>4&0x0f)+0x30);             //备注:+ 的优先级高于&;>>优先级高于&
  35.     write_data((Data_RTO[2]&0x0f)+0x30);
  36.         write_data(':');
  37.         write_data((Data_RTO[1]>>4&0x0f)+0x30);             //备注:+ 的优先级高于&;>>优先级高于&
  38.     write_data((Data_RTO[1]&0x0f)+0x30);
  39.         write_data(':');
  40.         write_data((Data_RTO[0]>>4&0x07)+0x30);             //备注:+ 的优先级高于&;>>优先级高于&
  41.     write_data((Data_RTO[0]&0x0f)+0x30);   

  42.         Date=&Week[((Data_RTO[5]&0x0f)-1)*4];                //显示星期
  43.         LCD_write_string1(10,1,Date);       
  44. }

  45. void KEY_SCAN()
  46. {
  47.     char High,Low;
  48.         if(K1==0)
  49.         {
  50.                 delay(10);
  51.                 while(!K1);
  52.                 N++;
  53.                 SW_Flag=0;
  54.                 write_com(0x0e);
  55.                 switch(N)
  56.                 {
  57.                         case 1:        write_com(0x82); break;
  58.                         case 2:        write_com(0x85); break;
  59.                         case 3:        write_com(0x88); break;
  60.                         case 4:        write_com(0xc0); break;
  61.                         case 5:        write_com(0xc3); break;
  62.                         case 6:        write_com(0xc6); break;
  63.                         case 7:        write_com(0xca); break;
  64.                         case 8:       
  65.                                    {
  66.                                             write_com(0x0c);
  67.                                             N=0;
  68.                                             if(Change_Flag==1)
  69.                                                 {
  70.                                                         Change_Flag=0;
  71.                                                         v_Set1302(0x80 ,DS_Data,7);
  72.                                                 }                                    
  73.                                    } break;
  74.                 }
  75.         }
  76.         if(N!=0)
  77.         {
  78.                 if(SW==0)
  79.                 {
  80.                         delay(10);
  81.                         while(!SW);
  82.                         SW_Flag++;
  83.                 //        SW_Temp=SW_Flag;
  84.                         if(SW_Flag==1)
  85.                         {
  86.                                 switch(N)
  87.                                 {
  88.                                         case 1:        write_com(0x83); break;
  89.                                         case 2:        write_com(0x86); break;
  90.                                         case 3:        write_com(0x89); break;
  91.                                         case 4:        write_com(0xc1); break;
  92.                                         case 5:        write_com(0xc4); break;
  93.                                         case 6:        write_com(0xc7); break;
  94.                                 }
  95.                         }
  96.                         if(SW_Flag==2)
  97.                         {
  98.                                 SW_Flag=0;
  99.                                 switch(N)
  100.                                 {
  101.                                         case 1:        write_com(0x82); break;
  102.                                         case 2:        write_com(0x85); break;
  103.                                         case 3:        write_com(0x88); break;
  104.                                         case 4:        write_com(0xc0); break;
  105.                                         case 5:        write_com(0xc3); break;
  106.                                         case 6:        write_com(0xc6); break;
  107.                                 }
  108.                         }
  109.                 }

  110.                 if(UP==0)
  111.                 {
  112.                         delay(10);
  113.                         while(!UP);
  114.                         Change_Flag=1;
  115.            //**********************************************         Year
  116.                         if((SW_Flag==0)&&(N==1))
  117.                         {
  118.                                 Low=Data_RTO[6]&0x0f;
  119.                                 High=(Data_RTO[6]>>4&0x0f);
  120.                                 High++;
  121.                                 if(High>9)
  122.                                 High=0;       
  123.                                 write_data(High+0x30);
  124.                                 write_com(0x82);
  125.                        
  126.                                 Data_RTO[6]=DS_Data[6]=(High<<4)|Low;
  127.                         }

  128.                         if((SW_Flag==1)&&(N==1))
  129.                         {
  130.                                 Low=Data_RTO[6]&0x0f;
  131.                                 High=(Data_RTO[6]>>4&0x0f);
  132.                                 Low++;
  133.                                 if(Low>9)
  134.                                 Low=0;       
  135.                                 write_data(Low+0x30);
  136.                                 write_com(0x83);
  137.                        
  138.                                 Data_RTO[6]=DS_Data[6]=(High<<4)|Low;
  139.                         }
  140.            //****************************************************** Year
  141.            //******************************************************        Month
  142.                         if((SW_Flag==0)&&(N==2))
  143.                         {
  144.                                 Low=Data_RTO[4]&0x0f;
  145.                                 High=(Data_RTO[4]>>4&0x0f);
  146.                                 High++;
  147.                                 if(High>1)
  148.                                 High=0;       
  149.                                 write_data(High+0x30);
  150.                                 write_com(0x85);
  151.                        
  152.                                 Data_RTO[4]=DS_Data[4]=(High<<4)|Low;
  153.                         }

  154.                         if((SW_Flag==1)&&(N==2))
  155.                         {
  156.                                 Low=Data_RTO[4]&0x0f;
  157.                                 High=(Data_RTO[4]>>4&0x0f);
  158.                                 Low++;
  159.                                 if(Low>9)
  160.                                 Low=0;       
  161.                                 write_data(Low+0x30);
  162.                                 write_com(0x86);
  163.                        
  164.                                 Data_RTO[4]=DS_Data[4]=(High<<4)|Low;
  165.                         }
  166.            //******************************************************Month
  167.            //******************************************************Date
  168.                         if((SW_Flag==0)&&(N==3))
  169.                         {
  170.                                 Low=Data_RTO[3]&0x0f;
  171.                                 High=(Data_RTO[3]>>4&0x0f);
  172.                                 High++;
  173.                                 if(High>3)
  174.                                 High=0;       
  175.                                 write_data(High+0x30);
  176.                                 write_com(0x88);
  177.                        
  178.                                 Data_RTO[3]=DS_Data[3]=(High<<4)|Low;
  179.                         }

  180.                         if((SW_Flag==1)&&(N==3))
  181.                         {
  182.                                 Low=Data_RTO[3]&0x0f;
  183.                                 High=(Data_RTO[3]>>4&0x0f);
  184.                                 Low++;
  185.                                 if(Low>9)
  186.                                 Low=0;       
  187.                                 write_data(Low+0x30);
  188.                                 write_com(0x89);
  189.                        
  190.                                 Data_RTO[3]=DS_Data[3]=(High<<4)|Low;
  191.                         }
  192.            //******************************************************Date
  193.            //******************************************************Hour
  194.                         if((SW_Flag==0)&&(N==4))
  195.                         {
  196.                                 Low=Data_RTO[2]&0x0f;
  197.                                 High=(Data_RTO[2]>>4&0x0f);
  198.                                 High++;
  199.                                 if(High>2)
  200.                                 High=0;       
  201.                                 write_data(High+0x30);
  202.                                 write_com(0xc0);
  203.                        
  204.                                 Data_RTO[2]=DS_Data[2]=(High<<4)|Low;
  205.                         }

  206.                         if((SW_Flag==1)&&(N==4))
  207.                         {
  208.                                 Low=Data_RTO[2]&0x0f;
  209.                                 High=(Data_RTO[2]>>4&0x0f);
  210.                                 Low++;
  211.                                 if(Low>9)
  212.                                 Low=0;       
  213.                                 write_data(Low+0x30);
  214.                                 write_com(0xc1);
  215.                        
  216.                                 Data_RTO[2]=DS_Data[2]=(High<<4)|Low;
  217.                         }
  218.            //******************************************************Hour
  219.            //******************************************************Munite
  220.                         if((SW_Flag==0)&&(N==5))
  221.                         {
  222.                                 Low=Data_RTO[1]&0x0f;
  223.                                 High=(Data_RTO[1]>>4&0x0f);
  224.                                 High++;
  225.                                 if(High>5)
  226.                                 High=0;       
  227.                                 write_data(High+0x30);
  228.                                 write_com(0xc3);
  229.                        
  230.                                 Data_RTO[1]=DS_Data[1]=(High<<4)|Low;
  231.                         }

  232.                         if((SW_Flag==1)&&(N==5))
  233.                         {
  234.                                 Low=Data_RTO[1]&0x0f;
  235.                                 High=(Data_RTO[1]>>4&0x0f);
  236.                                 Low++;
  237.                                 if(Low>9)
  238.                                 Low=0;       
  239.                                 write_data(Low+0x30);
  240.                                 write_com(0xc4);
  241.                        
  242.                                 Data_RTO[1]=DS_Data[1]=(High<<4)|Low;
  243.                         }
  244.            //******************************************************Munite
  245.            //******************************************************Second
  246.                         if((SW_Flag==0)&&(N==6))
  247.                         {
  248.                                 Low=Data_RTO[0]&0x0f;
  249.                                 High=(Data_RTO[0]>>4&0x0f);
  250.                                 High++;
  251.                                 if(High>5)
  252.                                 High=0;       
  253.                                 write_data(High+0x30);
  254.                                 write_com(0xc6);
  255.                        
  256.                                 Data_RTO[0]=DS_Data[0]=(High<<4)|Low;
  257.                         }

  258.                         if((SW_Flag==1)&&(N==6))
  259.                         {
  260.                                 Low=Data_RTO[0]&0x0f;
  261.                                 High=(Data_RTO[0]>>4&0x0f);
  262.                                 Low++;
  263.                                 if(Low>9)
  264.                                 Low=0;       
  265.                                 write_data(Low+0x30);
  266.                                 write_com(0xc7);
  267.                        
  268.                                 Data_RTO[0]=DS_Data[0]=(High<<4)|Low;
  269.                         }
  270.            //******************************************************Second
  271.            //******************************************************Day
  272.                         if(N==7)
  273.                         {
  274.                                 Low=Data_RTO[5];
  275.                                 Low++;
  276.                                 if(Low>7)
  277.                                 Low=1;       
  278.                                 Date=&Week[(Low-1)*4];                //显示星期
  279.                     LCD_write_string(10,1,Date);
  280.                                 write_com(0xca);       
  281.                                 Data_RTO[5]=DS_Data[5]=Low;
  282.                         }
  283.            //******************************************************Day
  284.                 }

  285.                 if(DOWN==0)
  286.                 {
  287.                         delay(10);
  288.                         while(!DOWN);
  289.                         Change_Flag=1;
  290.           //******************************************************Year
  291.                         if((SW_Flag==0)&&(N==1))
  292.                         {
  293.                                 Low=Data_RTO[6]&0x0f;
  294.                                 High=(Data_RTO[6]>>4&0x0f);
  295.                                 High--;
  296.                                 if(High<0)
  297.                                 High=9;       
  298.                                 write_data(High+0x30);
  299.                                 write_com(0x82);
  300.                        
  301.                                 Data_RTO[6]=DS_Data[6]=(High<<4)|Low;
  302.                         }

  303.                         if((SW_Flag==1)&&(N==1))
  304.                         {
  305.                                 Low=Data_RTO[6]&0x0f;
  306.                                 High=(Data_RTO[6]>>4&0x0f);
  307.                                 Low--;
  308.                                 if(Low<0)
  309.                                 Low=9;       
  310.                                 write_data(Low+0x30);
  311.                                 write_com(0x83);
  312.                        
  313.                                 Data_RTO[6]=DS_Data[6]=(High<<4)|Low;
  314.                         }
  315.           //******************************************************Year
  316.           //******************************************************Month
  317.                         if((SW_Flag==0)&&(N==2))
  318.                         {
  319.                                 Low=Data_RTO[4]&0x0f;
  320.                                 High=(Data_RTO[4]>>4&0x0f);
  321.                                 High--;
  322.                                 if(High<0)
  323.                                 High=1;       
  324.                                 write_data(High+0x30);
  325.                                 write_com(0x85);
  326.                        
  327.                                 Data_RTO[4]=DS_Data[4]=(High<<4)|Low;
  328.                         }

  329.                         if((SW_Flag==1)&&(N==2))
  330.                         {
  331.                                 Low=Data_RTO[4]&0x0f;
  332.                                 High=(Data_RTO[4]>>4&0x0f);
  333.                                 Low--;
  334.                                 if(Low<0)
  335.                                 Low=9;       
  336.                                 write_data(Low+0x30);
  337.                                 write_com(0x86);
  338.                        
  339.                                 Data_RTO[4]=DS_Data[4]=(High<<4)|Low;
  340.                         }
  341.            //******************************************************Month
  342.            //******************************************************Date
  343.                         if((SW_Flag==0)&&(N==3))
  344.                         {
  345.                                 Low=Data_RTO[3]&0x0f;
  346.                                 High=(Data_RTO[3]>>4&0x0f);
  347.                                 High--;
  348.                                 if(High<0)
  349.                                 High=3;       
  350.                                 write_data(High+0x30);
  351.                                 write_com(0x88);
  352.                        
  353.                                 Data_RTO[3]=DS_Data[3]=(High<<4)|Low;
  354.                         }

  355.                         if((SW_Flag==1)&&(N==3))
  356.                         {
  357.                                 Low=Data_RTO[3]&0x0f;
  358.                                 High=(Data_RTO[3]>>4&0x0f);
  359.                                 Low--;
  360.                                 if(Low<0)
  361.                                 Low=9;       
  362.                                 write_data(Low+0x30);
  363.                                 write_com(0x89);
  364.                        
  365.                                 Data_RTO[3]=DS_Data[3]=(High<<4)|Low;
  366.                         }
  367.            //******************************************************Date
  368.            //******************************************************Hour
  369.                         if((SW_Flag==0)&&(N==4))
  370.                         {
  371.                                 Low=Data_RTO[2]&0x0f;
  372.                                 High=(Data_RTO[2]>>4&0x0f);
  373.                                 High--;
  374.                                 if(High<0)
  375.                                 High=2;       
  376.                                 write_data(High+0x30);
  377.                                 write_com(0xc0);
  378.                        
  379.                                 Data_RTO[2]=DS_Data[2]=(High<<4)|Low;
  380.                         }

  381.                         if((SW_Flag==1)&&(N==4))
  382.                         {
  383.                                 Low=Data_RTO[2]&0x0f;
  384.                                 High=(Data_RTO[2]>>4&0x0f);
  385.                                 Low--;
  386.                                 if(Low<0)
  387.                                 Low=9;       
  388.                                 write_data(Low+0x30);
  389.                                 write_com(0xc1);
  390.                        
  391.                                 Data_RTO[2]=DS_Data[2]=(High<<4)|Low;
  392.                         }
  393.            //******************************************************Hour
  394.            //******************************************************Munite
  395.                         if((SW_Flag==0)&&(N==5))
  396.                         {
  397.                                 Low=Data_RTO[1]&0x0f;
  398.                                 High=(Data_RTO[1]>>4&0x0f);
  399.                                 High--;
  400.                                 if(High<0)
  401.                                 High=5;       
  402.                                 write_data(High+0x30);
  403.                                 write_com(0xc3);
  404.                        
  405.                                 Data_RTO[1]=DS_Data[1]=(High<<4)|Low;
  406.                         }

  407.                         if((SW_Flag==1)&&(N==5))
  408.                         {
  409.                                 Low=Data_RTO[1]&0x0f;
  410.                                 High=(Data_RTO[1]>>4&0x0f);
  411.                                 Low--;
  412.                                 if(Low<0)
  413.                                 Low=9;       
  414.                                 write_data(Low+0x30);
  415.                                 write_com(0xc4);
  416.                        
  417.                                 Data_RTO[1]=DS_Data[1]=(High<<4)|Low;
  418.                         }
  419.            //******************************************************Munite
  420.            //******************************************************Second
  421.                         if((SW_Flag==0)&&(N==6))
  422.                         {
  423.                                 Low=Data_RTO[0]&0x0f;
  424.                                 High=(Data_RTO[0]>>4&0x0f);
  425.                                 High--;
  426.                                 if(High<0)
  427.                                 High=5;       
  428.                                 write_data(High+0x30);
  429.                                 write_com(0xc6);
  430.                        
  431.                                 Data_RTO[0]=DS_Data[0]=(High<<4)|Low;
  432.                         }

  433.                         if((SW_Flag==1)&&(N==6))
  434.                         {
  435.                                 Low=Data_RTO[0]&0x0f;
  436.                                 High=(Data_RTO[0]>>4&0x07);
  437.                                 Low--;
  438.                                 if(Low<0)
  439.                                 Low=9;       
  440.                                 write_data(Low+0x30);
  441.                                 write_com(0xc7);
  442.                        
  443.                                 Data_RTO[0]=DS_Data[0]=(High<<4)|Low;
  444.                         }
  445.            //******************************************************Second
  446.            //******************************************************Day
  447.                         if(N==7)
  448.                         {
  449.                                 Low=Data_RTO[5];
  450.                                 Low--;
  451.                                 if(Low<1)
  452.                                 Low=7;       
  453.                                 Date=&Week[(Low-1)*4];                //显示星期
  454.                     LCD_write_string1(10,1,Date);
  455.                                 write_com(0xca);       
  456.                                 Data_RTO[5]=DS_Data[5]=Low;
  457.                         }
  458.            //******************************************************Day
  459.                 }
  460.         }

  461. }

  462. void HeightorTemp_Set()
  463. {
  464. if(TorW_SET==0)
  465.                 {
  466.                         delay(5);
  467.                         while(!TorW_SET);
  468.                         Knum++;
  469.                         if(Knum==1)
  470.                         {
  471.                                 write_com(0x01);
  472.                                 LCD_write_string(0,0,"    Heignt Set");
  473.                                 LCD_write_string(0,1,"Please Input:1L");
  474.       }
  475.                         else if(Knum==2)
  476.                         {
  477.         write_com(0x01);
  478.                                 LCD_write_string(0,0,"Temprature Set");
  479.                                 LCD_write_string(0,1,"Please Input:00");
  480.       }
  481.                         else if(Knum==3)
  482.                         {
  483.                          Knum=0;
  484.        write_com(0x01);
  485.       }       
  486.                 }
  487.                 if(Knum==1)
  488.                 {
  489.        if(Jia==0)
  490.                          {
  491.          delay(5);
  492.                                  while(!Jia);
  493.          H_SET++;
  494.                                  if(H_SET>4)
  495.          H_SET=4;
  496.        }
  497.                          if(Jian==0)
  498.                          {
  499.          delay(5);
  500.                                  while(!Jian);
  501.          H_SET--;
  502.                                  if(H_SET<0)
  503.          H_SET=0;                         
  504.        }
  505.          write_com(0xC0+13);
  506.                write_data(H_SET+0x30);
  507.     }
  508.                
  509.                 if(Knum==2)
  510.                 {
  511.        if(Jia==0)
  512.                          {
  513.          delay(5);
  514.                                  while(!Jia);
  515.          T_SET++;
  516.                                  if(T_SET>99)
  517.          T_SET=99;
  518.        }
  519.                          if(Jian==0)
  520.                          {
  521.          delay(5);
  522.                                  while(!Jian);
  523.          T_SET--;
  524.                                  if(T_SET<0)
  525.          T_SET=0;
  526.        }
  527.                         write_com(0xC0+13);
  528.             write_data(T_SET/10+0x30);
  529.                         write_data(T_SET%10+0x30);  
  530.     }
  531. }

  532. void HeightCheck()
  533. {
  534.                  if(W1L==0)
  535.                  {
  536.                          delay(5);
  537.                          while(!W1L);
  538.                          Height=1;
  539.                  }
  540. ……………………

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

所有资料51hei提供下载:
仿真 程序.rar (124.23 KB, 下载次数: 227)

评分

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

查看全部评分

回复

使用道具 举报

ID:347352 发表于 2018-6-11 22:50 | 显示全部楼层
这个功能有什么啊?
回复

使用道具 举报

ID:120930 发表于 2018-10-8 20:52 | 显示全部楼层
大神 有电路图吗
回复

使用道具 举报

ID:453675 发表于 2018-12-25 18:12 | 显示全部楼层
根本没用好吧,啥东西嘛
回复

使用道具 举报

ID:459014 发表于 2019-1-1 20:09 | 显示全部楼层
没有用
回复

使用道具 举报

ID:63231 发表于 2019-3-20 08:05 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:1072168 发表于 2023-4-18 16:21 | 显示全部楼层
这个比我自己做的还好, 把它下载看看程序
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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