找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1535|回复: 0
收起左侧

单片机万年历带继电器控制功能设计,挺简单的小东西分享一下

[复制链接]
ID:436990 发表于 2019-7-17 08:42 | 显示全部楼层 |阅读模式
代码被我合在一起了,网上抄抄改改的。可能有bug,x忘记报名,所以没改bug了。proteus仿真失败的把AD转换关闭,功能感兴趣的就自己研究吧。\
IMG_20190416_101526.jpg IMG_20190416_101500.jpg IMG_20190416_101455 (2).jpg IMG_20190416_101441.jpg IMG_20190416_101429.jpg IMG_20190416_101414.jpg IMG_20190416_101332.jpg IMG_20190416_101600.jpg 1111.jpg

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png

单片机源程序如下:
  1. #include <STC12C5A60S2.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit DQ=P2^7;     
  5. sbit RS=P2^2;
  6. sbit RW=P2^1;   
  7. sbit EN=P2^0;  
  8. sbit led =P2^3;
  9. sbit led1=P2^4;
  10. sbit led2=P2^5;
  11. sbit led3=P2^6;
  12. sbit led4=P3^7;
  13. sbit key1=P3^2;
  14. sbit S1=P3^3;
  15. sbit S2=P3^4;
  16. sbit S3=P3^5;
  17. sbit S4=P3^6;
  18. sbit keys1=P1^6;
  19. sbit keys2=P1^7;
  20. uchar code str1[]={"  Intelligence   "};
  21. uchar code str2[]={"    Aquarium    "};
  22. uchar code str3[]={"2014-08-13 WED  "};
  23. uchar code str4[]={"00:00:00         "};
  24. uchar code str5[]={"TH:      TL:    "};
  25. uchar code str6[]={"  TEM:           "};
  26. uchar code str7[]={" Concentrations  "};
  27. uchar code str8[]={"  Oxygen:    %   "};
  28. uchar code str9[]={" Zi Dong Wei Shi "};
  29. uchar code str10[]={"ShiJian:06 12 18 "};
  30. uchar code str11[]={"  Measurement    "};
  31. uchar code str12[]={"ZhuoDu:      NTU  " };
  32. uchar code xingqi[][3]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
  33. uchar data disdata[5];
  34. uchar data up[2];
  35. uchar data down[2];
  36. uchar data yy[4];
  37. uint tvalue;      
  38. uchar tflag;   
  39. uchar aaa=30;
  40. uchar bbb=18;
  41. uint ccc;
  42. uchar fff=0;
  43. uchar ddd=0;
  44. uchar result;
  45. uint hzs;
  46. uchar status;         
  47. uchar a,b,count,S1num,xqnum,S1numm;
  48. char yue,ri,shi,fen,miao;
  49. int nian;
  50. char shi1=6,shi2=2,shi3=8,shi4=0,shi5=1,shi6=1;
  51. char d1=6,d2=12,d3=18;
  52. void delay1ms(uint ms)
  53. {
  54. unsigned int i,j;
  55.       for(i=0;i<ms;i++)
  56.        for(j=0;j<110;j++);
  57. }
  58. void delay(uint z)
  59. {
  60.         uint x,y;
  61.         for(x=z;x>0;x--)
  62.                 for(y=110;y>0;y--);
  63. }

  64. void wr_com(uchar com)
  65. {
  66.     delay1ms(1);   
  67.     RS=0;         
  68.     RW=0;         
  69.     EN=0;         
  70.     P0=com;        
  71.     delay1ms(1);
  72.     EN=1;           
  73.     delay1ms(1);
  74.     EN=0;         
  75. }
  76. void wr_dat(uchar dat)
  77. {
  78.     delay1ms(1);
  79.     RS=1;         
  80.     RW=0;         
  81.     EN=0;         
  82.     P0=dat;        
  83.     delay1ms(1);
  84.     EN=1;           
  85.     delay1ms(1);
  86.     EN=0;         
  87. }

  88. void lcd_init()   
  89. {
  90.     delay1ms(15);
  91.     wr_com(0x38);
  92.                   
  93.     delay1ms(5);
  94.                 wr_com(0x08);
  95.                   
  96.     delay1ms(5);
  97.     wr_com(0x01);
  98.                
  99.     delay1ms(5);
  100.     wr_com(0x06);
  101.                
  102.     delay1ms(5);
  103.     wr_com(0x0c);
  104.                  
  105.     delay1ms(5);
  106.        
  107. }
  108. void display(uchar *p)
  109. {
  110.     while(*p!='\0')  
  111.     {
  112.                 wr_dat(*p);
  113.         p++;         
  114.         delay1ms(1);
  115.     }
  116. }

  117. /********************************************
  118. 年月日写入1602函数
  119. ********************************************/
  120. void write_sfm(uchar add,uchar dat)                           //写时分秒函数
  121. {
  122.         uchar shi,ge;
  123.         shi=dat/10;
  124.         ge=dat%10;
  125.         wr_com(0x80+0x40+add);
  126.         wr_dat(0x30+shi);
  127.         wr_dat(0x30+ge);
  128. }
  129. void write_yr(uchar add,uchar dat)                           //写月日函数
  130. {
  131.         uchar shi,ge;
  132.         shi=dat/10;
  133.         ge=dat%10;
  134.         wr_com(0x80+add);
  135.         wr_dat(0x30+shi);
  136.         wr_dat(0x30+ge);
  137. }
  138. void write_nian(uchar add,uint dat)                           //写年函数
  139. {
  140.         uint qian,bai,shi,ge;
  141.         qian=dat/1000;
  142.         bai=dat%1000/100;
  143.         shi=dat%100/10;
  144.         ge=dat%10;
  145.         wr_com(0x80+add);
  146.         wr_dat(0x30+qian);
  147.         wr_dat(0x30+bai);
  148.         wr_dat(0x30+shi);
  149.         wr_dat(0x30+ge);
  150. }
  151. /*

  152. fff判断在这里



  153. */

  154. void init_play()//gszbfdxfbxdzfbzbfzbz
  155. {
  156.    
  157.         if(fff==1)
  158.         {
  159.                 wr_com(0x80);               
  160.     display(str3);
  161.     wr_com(0x80+0x40);
  162.     display(str4);
  163.                 write_nian(0,nian);
  164.     write_sfm(6,miao);                                                         //???shi?fen?miao??????
  165.     write_sfm(3,fen);
  166.     write_sfm(0,shi);
  167.                 write_yr(5,yue);
  168.                 write_yr(8,ri);wr_com(0x80+0x0b);
  169. for(b=0;b<3;b++)
  170. {
  171.   wr_dat(xingqi[xqnum][b]);
  172.   delay(5);
  173. }
  174.                 ddd=1;
  175.                 fff=2;
  176.         }else if(fff==3)
  177.         {
  178.                 wr_com(0x80);               
  179.     display(str5);
  180.     wr_com(0x80+0x40);
  181.     display(str6);
  182.                 ddd=2;
  183.                 fff=4;
  184.         }else if(fff==5)
  185.         {
  186.                 wr_com(0x80);               
  187.     display(str7);
  188.     wr_com(0x80+0x40);
  189.     display(str8);
  190.                         ADC_CONTR=0xE0;                   

  191.                 ddd=3;
  192.                 fff=6;
  193.         }else if(fff==7)
  194.         {
  195.                 wr_com(0x80);               
  196.     display(str9);
  197.     wr_com(0x80+0x40);
  198.     display(str10);
  199.                  wr_com(0xc9);            
  200.                 wr_dat(shi1+0x30);
  201.                 wr_com(0xc8);            
  202.                 wr_dat(shi4+0x30);  
  203.                 wr_com(0xc9+3);            
  204.                 wr_dat(shi2+0x30);
  205.                 wr_com(0xc8+3);            
  206.                 wr_dat(shi5+0x30);
  207.                 wr_com(0xc9+6);            
  208.                 wr_dat(shi3+0x30);
  209.                 wr_com(0xc8+6);            
  210.                 wr_dat(shi6+0x30);
  211.                 d1=shi1+shi4*10;
  212.                 d2=shi2+shi5*10;
  213.                 d3=shi3+shi6*10;
  214.                 ddd=5;
  215.                 fff=8;
  216.         }else if(fff==9)
  217.         {
  218.                 wr_com(0x80);               
  219.     display(str11);
  220.     wr_com(0x80+0x40);
  221.     display(str12);
  222.                 ADC_CONTR=0xE1;
  223.                 ddd=6;
  224.                 fff=0;
  225.         }

  226. }

  227. void delay_18b20(uint i)
  228. {
  229.     while(i--);
  230. }
  231. void ds18b20rst()  
  232.                                  
  233. {
  234.     uchar x=0;
  235.     DQ = 1;      
  236.     delay_18b20(48);
  237.     DQ = 0;     
  238.     delay_18b20(1200);
  239.     DQ = 1;     
  240.     delay_18b20(480);
  241. }
  242. void ds18b20wr(uchar wdata)
  243. {
  244.       uchar i=0;
  245.      for (i=8; i>0; i--)
  246.      {
  247.       DQ = 0;      
  248.       DQ = wdata&0x01;
  249.                      
  250.       delay_18b20(120);
  251.       DQ = 1;        
  252.       wdata>>=1;   
  253.      }
  254. }
  255. uchar ds18b20rd()   
  256. {
  257.     uchar i=0;
  258.     uchar dat = 0;
  259.     for (i=8;i>0;i--)
  260.      {
  261.                 DQ = 0;   
  262.         dat>>=1;
  263.         DQ = 1;   
  264.         if(DQ)
  265.         dat|=0x80;
  266.         delay_18b20(120);
  267.      }
  268.     return(dat);   
  269. }
  270. read_temp()         
  271. {
  272.     uchar a,b;
  273.     ds18b20rst();  
  274.     ds18b20wr(0xcc);
  275.     ds18b20wr(0x44);

  276.     ds18b20rst();  
  277.     ds18b20wr(0xcc);
  278.     ds18b20wr(0xbe);
  279.                     
  280.     a=ds18b20rd();
  281.     b=ds18b20rd();
  282.     tvalue=b;     
  283.     tvalue<<=8;   
  284.     tvalue=tvalue|a;
  285.     if(tvalue<0x0fff)
  286.       tflag=0;      
  287.                   
  288.     else            
  289.     {            
  290.        tvalue=~tvalue+1;
  291.           tflag=1;   
  292. }
  293.     tvalue=tvalue*(0.625);
  294.     return(tvalue);
  295. }

  296. void ds18b20disp()
  297. {
  298.     uchar flagdat;
  299.     disdata[0]=tvalue/1000+0x30;   
  300.     disdata[1]=tvalue%1000/100+0x30;
  301.     disdata[2]=tvalue%100/10+0x30;  
  302.     disdata[3]=tvalue%10+0x30;  
  303.                 ccc=(tvalue/1000)*100+(tvalue%1000/100)*10+(tvalue%100/10);
  304.     if(tflag==0)
  305.       flagdat=0x2b;               
  306.     else
  307.                 flagdat=0x2d;               
  308.     if(disdata[0]==0x30)
  309.     {
  310.        disdata[0]=0x20;         
  311.         if(disdata[1]==0x30)
  312.          {
  313.             disdata[1]=0x20;     
  314.          }
  315.     }
  316.                 if(ddd==2)
  317.                 {
  318.     wr_com(0x80+0x46);           
  319.     wr_dat(flagdat);            
  320.     wr_com(0x80+0x47);            
  321.     wr_dat(disdata[0]);        
  322.     wr_com(0x80+0x48);            
  323.     wr_dat(disdata[1]);      
  324.     wr_com(0x80+0x49);            
  325.     wr_dat(disdata[2]);        
  326.                 wr_com(0x80+0x4a);                 
  327.     wr_dat(0x2e);              
  328.     wr_com(0x80+0x4b);            
  329.     wr_dat(disdata[3]);
  330.                 up[0]=aaa/10+0x30;
  331.                 up[1]=aaa%10+0x30;
  332.                 down[0]=bbb/10+0x30;
  333.                 down[1]=bbb%10+0x30;
  334.     wr_com(0x80+0x04);            
  335.     wr_dat(up[0]);         
  336.     wr_com(0x80+0x05);           
  337.     wr_dat(up[1]);         
  338.     wr_com(0x80+0x0d);            
  339.     wr_dat(down[0]);         
  340.                 wr_com(0x80+0x0e);               
  341.     wr_dat(down[1]);  

  342.         if(!S1)
  343.         {
  344.                 delay1ms(5);
  345.                 if(!S1)
  346.                 {
  347.                         aaa++;
  348.                         while(!S1);
  349.                 }
  350.         }
  351.                 if(!S2)
  352.         {
  353.                 delay1ms(5);
  354.                 if(!S2)
  355.                 {
  356.                          if(aaa <= bbb)
  357.                         {aaa=bbb;}else
  358.                         {aaa--;}
  359.                         while(!S2);
  360.                 }
  361.         }
  362.                 if(!S3)
  363.         {
  364.                 delay1ms(5);
  365.                 if(!S3)
  366.                 {
  367.                         if(bbb >= aaa)
  368.                         {bbb=aaa;}else
  369.                         {bbb++;}
  370.                         while(!S3);
  371.                 }
  372.         }
  373.                 if(!S4)
  374.         {
  375.                 delay1ms(5);
  376.                 if(!S4)
  377.                 {
  378.                         bbb--;
  379.                         while(!S4);
  380.                 }
  381.         }
  382. }
  383. }       

  384. void key()
  385. {
  386.         if(!key1)
  387.         {
  388.                 delay1ms(5);
  389.                 if(!key1)
  390.                 {
  391.                         fff++;
  392.                         while(!key1);
  393.                 }
  394.         }
  395.        
  396. }
  397. void panduan()
  398. {
  399.         if(ccc>=aaa)
  400.         {
  401.                 led=0;
  402.         }else if
  403.         (ccc<=bbb-1)
  404.         {
  405.                 led=1;
  406.         }
  407. }

  408. void panduan1()
  409. {
  410.         if(result<50)
  411.         {
  412.                 led1=1;
  413.         }else
  414.         {
  415.                 led1=0;
  416.         }
  417. }
  418. void panduan2()
  419. {
  420.                 if(shi==d1||shi==d2||shi==d3)
  421.         {
  422.                 if(fen==0)
  423.                 {
  424.                         led4=0;
  425.                 }else {led4=1;}
  426.         }else {led4=1;}
  427. }
  428. void panduan3()
  429. {
  430.         {
  431.         if(hzs>2000)
  432.         {
  433.                 led3=1;
  434.                 led2=0;
  435.         }else
  436.         {
  437.                 if(keys1==1&&keys2==1)
  438.                 {
  439.                         led2=1;
  440.                         led3=0;
  441.                 }else if(keys1==0&&keys2==0)
  442.                 {
  443.                         led2=0;
  444.                         led3=1;
  445.                 }
  446.                 else{led2=led3=0;}
  447.         }
  448.         }
  449. }
  450. //void panduan4()
  451. //{
  452. //        if(ttt==0)
  453. //        {
  454. //        if(keys1==0&&keys2==0)
  455. //        {
  456. //                led2=1;
  457. //        }else if(keys1==1&&keys2==1)
  458. //        {
  459. //                led3=1;
  460. //        }
  461. //        else
  462. //        {
  463. //                led2=0;
  464. //                led3=0;
  465. //        }
  466. //        }else
  467. //        {
  468. //                led2=0;
  469. //        }
  470. //}
  471. void keyscan()
  472. {
  473.         if(ddd==1){
  474.         if(S1==0)
  475.         {
  476.                 delay(5);                                       
  477.                 if(S1==0)
  478.                 {
  479.                         S1num++;                                
  480.                         while(!S1);                              
  481.                         if(S1num==1)                       
  482.                         {
  483.                                 TR0=0;                                
  484.                                 wr_com(0xc0+7);     
  485.                                 wr_com(0x0f);      
  486.                         }
  487.                         if(S1num==2)                        
  488.                         {
  489.                                 wr_com(0xc0+4);        
  490.                         }
  491.                         if(S1num==3)                          
  492.                         {
  493.                                 wr_com(0xc0+1);         
  494.                         }
  495.                         if(S1num==4)                          
  496.                         {
  497.                                 wr_com(0x80+13);         
  498.                         }
  499.                         if(S1num==5)                        
  500.                         {
  501.                                 wr_com(0x80+9);         
  502.                         }
  503.                         if(S1num==6)                        
  504.                         {
  505.                                 wr_com(0x80+6);         
  506.                         }
  507.                         if(S1num==7)                        
  508.                         {
  509.                                 wr_com(0x80+3);         
  510.                         }
  511.                         if(S1num==8)                        
  512.                         {
  513.                                 S1num=0;                        
  514.                                 TR0=1;                           
  515.                                 wr_com(0x0c);   
  516.                         }
  517.                 }
  518.         }
  519.         if(S1num!=0)                                         
  520.         {
  521.                 if(S2==0)
  522.                 {
  523.                         delay(5);                                       
  524.                         if(S2==0)                                 
  525.                         {
  526.                                 while(!S2);                              
  527.                                 if(S1num==1)                       
  528.                                 {
  529.                                         miao++;                           
  530.                                         if(miao==60)              
  531.                                                 miao=0;
  532.                                         write_sfm(6,miao);                  
  533.                                         wr_com(0x80+0x40+6);           
  534.                                 }
  535.                                 if(S1num==2)                        
  536.                                 {
  537.                                         fen++;                                      
  538.                                         if(fen==60)
  539.                                                 fen=0;
  540.                                         write_sfm(3,fen);
  541.                                         wr_com(0x80+0x40+3);
  542.                                 }
  543.                                 if(S1num==3)                                
  544.                                 {
  545.                                         shi++;                                         
  546.                                         if(shi==24)
  547.                                                 shi=0;
  548.                                         wr_com(0x80+0x40);
  549.                                         write_sfm(0,shi);
  550.                                 }
  551.                                 if(S1num==4)                                                  
  552.                                 {
  553.                                         xqnum++;
  554.                                         if(xqnum==7)
  555.                                                 xqnum=0;
  556.                                         wr_com(0x80+0x0b);
  557.                                         for(a=0;a<3;a++)
  558.                                         {
  559.                                                 wr_dat(xingqi[xqnum][a]);
  560.                                                 delay(5);
  561.                                         }
  562.                                 }
  563.                                 if(S1num==5)                                                            
  564.                                 {
  565.                                         ri++;
  566.                                         if(yue==2)
  567.                                         {
  568.                                                 if(nian%400==0)
  569.                                                 {
  570.                                                         if(ri==30)
  571.                                                         {
  572.                                                                 ri=1;
  573.                                                         }
  574.                                                 }
  575.                                                 if(nian%400!=0)
  576.                                                 {
  577.                                                         if(ri==29)
  578.                                                         {
  579.                                                                 ri=1;
  580.                                                         }
  581.                                                 }
  582.                                         }
  583.                                         else if(yue<=7)
  584.                                         {
  585.                                                 if(yue%2==0&yue!=2)
  586.                                                 {
  587.                                                         if(ri==31)
  588.                                                         {
  589.                                                                 ri=1;
  590.                                                         }
  591.                                                 }
  592.                                                 else if(yue%2!=0&yue!=2)
  593.                                                 {
  594.                                                         if(ri==32)
  595.                                                         {
  596.                                                                 ri=1;
  597.                                                         }
  598.                                                 }
  599.                                         }
  600.                                         else if(yue>=8)
  601.                                         {
  602.                                                 if(yue%2==0)
  603.                                                 {
  604.                                                         if(ri==32)
  605.                                                         {
  606.                                                                 ri=1;
  607.                                                         }
  608.                                                 }
  609.                                                 else if(yue%2!=0)
  610.                                                 {
  611.                                                         if(ri==31)
  612.                                                         {
  613.                                                                 ri=1;
  614.                                                         }
  615.                                                 }
  616.                                         }
  617.                                         write_yr(8,ri);
  618.                                 }
  619.                                 if(S1num==6)                                                        //月加调整
  620.                                 {
  621.                                         yue++;
  622.                                         if(yue==13)
  623.                                                 yue=1;
  624.                                         write_yr(5,yue);
  625.                                 }                                                                                 
  626.                                 if(S1num==7)                                                 //年加调整
  627.                                 {
  628.                                         nian++;
  629.                                         if(nian==2100)
  630.                                                 nian=2000;
  631.                                         write_nian(0,nian);
  632.                                 }
  633.                         }
  634.                 }
  635.                 if(S3==0)
  636.                 {
  637.                         delay(5);
  638.                         if(S3==0)                                                 //确认按键被按下
  639.                         {
  640.                                 while(!S3);
  641.                                 if(S1num==1)                                 
  642.                                 {
  643.                                         miao--;                                          //调整秒减1
  644.                                         if(miao==-1)                          //减到00后再减重新设置为59
  645.                                                 miao=59;
  646.                                         write_sfm(6,miao);
  647.                                         wr_com(0x80+0x40+6);
  648.                                 }
  649.                                 if(S1num==2)
  650.                                 {
  651.                                         fen--;                                           //调整分减1
  652.                                         if(fen==-1)
  653.                                                 fen=59;
  654.                                         write_sfm(3,fen);
  655.                                         wr_com(0x80+0x40+3);
  656.                                 }
  657.                                 if(S1num==3)
  658.                                 {
  659.                                         shi--;                                                //调整时减1
  660.                                         if(shi==-1)
  661.                                                 shi=23;
  662.                                         write_sfm(0,shi);
  663.                                         wr_com(0x80+0x40);
  664.                                 }
  665.                                 if(S1num==4)
  666.                                 {
  667.                                         xqnum--;                                        //调整星期减一
  668.                                         if(xqnum==-1)
  669.                                                 xqnum=6;
  670.                                         wr_com(0x80+0x0b);
  671.                                         for(a=0;a<3;a++)
  672.                                         {
  673.                                                 wr_dat(xingqi[xqnum][a]);
  674.                                                 delay(5);
  675.                                         }
  676.                                 }
  677.                                 if(S1num==5)                                   //调整日
  678.                                 {
  679.                                         ri--;                                                
  680.                                         if(yue==2)
  681.                                         {
  682.                                                 if(nian%400==0)
  683.                                                 {
  684.                                                         if(ri==0)
  685.                                                         {
  686.                                                                 ri=29;
  687.                                                         }
  688.                                                 }
  689.                                                 if(nian%400!=0)
  690.                                                 {
  691.                                                         if(ri==0)
  692.                                                         {
  693.                                                                 ri=28;
  694.                                                         }
  695.                                                 }
  696.                                         }
  697.                                         else if(yue<=7)                                 
  698.                                         {
  699.                                                 if(yue%2==0&yue!=2)
  700.                                                 {
  701.                                                         if(ri==0)
  702.                                                         {
  703.                                                                 ri=30;
  704.                                                         }
  705.                                                 }
  706.                                                 else if(yue%2!=0&yue!=2)
  707.                                                 {
  708.                                                         if(ri==0)
  709.                                                         {
  710.                                                                 ri=31;
  711.                                                         }
  712.                                                 }
  713.                                         }
  714.                                         else if(yue>=8)
  715.                                         {
  716.                                                 if(yue%2==0)
  717.                                                 {
  718.                                                         if(ri==0)
  719.                                                         {
  720.                                                                 ri=31;
  721.                                                         }
  722.                                                 }
  723.                                                 else if(yue%2!=0)
  724.                                                 {
  725.                                                         if(ri==0)
  726.                                                         {
  727.                                                                 ri=30;
  728.                                                         }
  729.                                                 }
  730.                                         }
  731.                                         write_yr(8,ri);                                                
  732.                                 }
  733.                                 if(S1num==6)                                           //调整月
  734.                                 {
  735.                                         yue--;
  736.                                         if(yue==0)
  737.                                                 yue=12;
  738.                                         write_yr(5,yue);
  739.                                 }
  740.                                 if(S1num==7)                                          //调整年
  741.                                 {
  742.                                         nian--;
  743.                                         if(nian==2000)
  744.                                                 nian=2100;
  745.                                         write_nian(0,nian);
  746.                                 }
  747.                         }
  748.                 }
  749.                 if(S4==0|key1==0)                                                                   //退出设置、开启中断
  750.                 {
  751.                         delay(5);
  752.                         if(S4==0|key1==0)
  753.                         {
  754.                                 S1num=0;
  755.                                 TR0=1;
  756.                                 wr_com(0x0c);
  757.                         }
  758.                 }
  759.         }
  760. }}

  761. void timer0() interrupt 1                                         //定时器0中断服务程序
  762. {
  763.         TH0=(65535-50000)/256;                                         //重装定时器初始值
  764.         TL0=(65535-50000)%256;
  765.         count++;                                                                  //中断次数累加
  766.         if(count==20)                                                         //20次50毫秒即一秒
  767.         {
  768.                 count=0;
  769.                 miao++;
  770.                 if(miao==60)                                                  //秒加到60时分进位
  771.                 {
  772.                         miao=0;
  773.                         fen++;
  774.                         if(fen==60)                                                  //分加到60时时进位
  775.                         {
  776.                                 fen=0;
  777.                                 shi++;
  778.                                 if(shi==24)                                                //时加到24时清0
  779.                                 {
  780.                                         shi=0;
  781.                                         //xqnum++;
  782.                                         ri++;

  783.                                         if(yue==2)                                        //如果是二月
  784.                                         {
  785.                                                 if(nian%400==0)                         //闰年判断
  786.                                                 {
  787.                                                         if(ri==30)
  788.                                                         {
  789.                                                                 ri=1;
  790.                                                                 yue++;
  791.                                                                 write_yr(5,yue);
  792.                                                         }
  793.                                                 }
  794.                                                 if(nian%400!=0)                           //平年判断
  795.                                                 {
  796.                                                         if(ri==29)
  797.                                                         {
  798.                                                                 ri=1;
  799.                                                                 yue++;
  800.                                                                 write_yr(5,yue);
  801.                                                         }
  802.                                                 }
  803.                                         }
  804.                                         else if(yue<=7&yue!=2)           //一月到七月
  805.                                         {
  806.                                                 if(yue%2==0)                //偶数月(除二月)
  807.                                                 {
  808.                                                         if(ri==31)                                          
  809.                                                         {
  810.                                                                 ri=1;
  811.                                                                 yue++;
  812.                                                         }
  813.                                                 }
  814.                                                 else if(yue%2!=0)                         //奇数月
  815.                                                 {
  816.                                                         if(ri==32)
  817.                                                         {
  818.                                                                 ri=1;
  819.                                                                 yue++;
  820.                                                         }
  821.                                                 }
  822.                                                 write_yr(5,yue);
  823.                                         }
  824.                                         else if(yue>=8)                                         //八月到12月
  825.                                         {
  826.                                                 if(yue%2==0)                //偶数月(除二月)
  827.                                                 {
  828.                                                         if(ri==32)                                          
  829.                                                         {
  830.                                                                 ri=1;
  831.                                                                 yue++;
  832.                                                                 if(yue==13)                                   //如果判断月份为12月,则加一后重新定义月份为1
  833.                                                                 {
  834.                                                                         yue=1;
  835.                                                                         nian++;
  836.                                                                         write_nian(0,nian);
  837.                                                                 }
  838.                                                                 write_yr(5,yue);
  839.                                                         }
  840.                                                 }
  841.                                                 else if(yue%2!=0)                         //奇数月
  842.                                                 {
  843.                                                         if(ri==31)
  844.                                                         {
  845.                                                                 ri=1;
  846.                                                                 yue++;
  847.                                                                 write_yr(5,yue);
  848.                                                         }
  849.                                                 }
  850.                                         }
  851.                                      if(ddd==1)   {write_yr(8,ri);}
  852.                                 }
  853.                               if(ddd==1)   { write_sfm(0,shi); }                                //重新写入数据
  854.                         }
  855.                        if(ddd==1)   {write_sfm(3,fen); }                                        //重新写入数据
  856.                 }
  857.               if(ddd==1)   { write_sfm(6,miao);   }                                              //重新写入数据
  858.         }
  859. }
  860. void adcc()
  861. {
  862.        
  863.         ADC_CONTR|=0x08;        //?? A/D ??
  864.                 status=0;
  865.                 while(status==0)              //??A/D????
  866.                 {
  867.                     status=ADC_CONTR&0x10;
  868.                 }
  869.                 ADC_CONTR&=0xE7;             //?ADC_FLAG?0
  870.                 result=ADC_RES;            //??A/D????
  871.                 yy[0]=(result*100/255)/100+0x30;
  872.                 yy[1]=(result*100/255)/10%10+0x30;
  873.                 yy[2]=(result*100/255)%10+0x30;
  874. if(ddd==3)
  875.         {
  876.                  wr_com(0x80+0x4a);
  877.                 wr_dat(yy[0]);
  878.                  wr_com(0x80+0x4b);
  879.                 wr_dat(yy[1]);
  880.                 wr_com(0x80+0x4c);            
  881.     wr_dat(yy[2]);   
  882.         }
  883. }
  884. void adbb()
  885. {
  886.        
  887.         ADC_CONTR|=0x08;        //?? A/D ??
  888.                 status=0;
  889.                 while(status==0)              //??A/D????
  890.                 {
  891.                     status=ADC_CONTR&0x10;
  892.                 }
  893.                 ADC_CONTR&=0xE7;             //?ADC_FLAG?0
  894.                 hzs=ADC_RES*18;            //??A/D????
  895.                
  896.                 yy[0]=hzs/1000+0x30;
  897.     yy[1]=hzs%1000/100+0x30;
  898.     yy[2]=hzs%100/10+0x30;
  899.     yy[3]=hzs%10+0x30;
  900. if(ddd==6)
  901.         {
  902.                  wr_com(0x80+0x48);
  903.                 wr_dat(yy[0]);
  904.                  wr_com(0x80+0x49);
  905.                 wr_dat(yy[1]);
  906.                 wr_com(0x80+0x4a);            
  907.     wr_dat(yy[2]);   
  908.                 wr_com(0x80+0x4b);            
  909.     wr_dat(yy[3]);  
  910.         }
  911. }

  912. void init1()
  913. {
  914.                 lcd_init();
  915.                 wr_com(0x80);               
  916.                 display(str1);
  917.                 wr_com(0x80+0x40);
  918.                 display(str2);
  919.                 nian=2014;
  920.         yue=8;
  921.         ri=13;
  922.         shi=0;                                                                   //初始shi、fen、miao
  923.         fen=0;
  924.         miao=0;
  925.                                 count=0;
  926.         xqnum=0;
  927.         S1num=0;                                                                         //初始化全局变量count
  928.         TMOD=0x01;                                                                          //设置定时器0工作模式1
  929.         TH0=(65535-50000)/256;                                                  //定时器装初始值
  930.         TL0=(65535-50000)%256;
  931.         EA=1;                                                                                        //开总中断
  932.         ET0=1;                                                                                        //开定时器0中断
  933.         TR0=1;
  934. }
  935. void init2()
  936. {
  937.         uint i;
  938.         ADC_CONTR|=0x80;     
  939.         for (i=0;i<10000;i++);  
  940.         P1ASF=0x03;                       
  941.           for (i=0;i<10000;i++);  
  942. }
  943. void zdws()
  944. {if(ddd==5){
  945. if(S1==0)
  946.         {
  947.                 delay(5);                                        //确认定义键被按下
  948.                 if(S1==0)
  949.                 {
  950.                         S1numm++;                                //定义键S1按下次数记录
  951.                         while(!S1);                                //释放按键确认
  952.                         if(S1numm==1)                        //S1按下一次时
  953.                         {
  954.                                 wr_com(0xc9);        //光标定位到秒位置
  955.                                 wr_com(0x0f);        //光标闪?
  956.                                                                                                
  957.                         }
  958.                         if(S1numm==2)                         //S1按下两次时
  959.                         {
  960.                                 wr_com(0xc9+3);         //光标定位到分位置
  961.                         }
  962.                         if(S1numm==3)                          //S1按下三次时
  963.                         {
  964.                                 wr_com(0xc9+6);          //光标定位到时位置
  965.                         }
  966.                         if(S1numm==4)                          //S1按下四次时
  967.                         {
  968.                                 S1numm=0;                          //S1记录按键次数清零
  969.                                 wr_com(0x0c);          //取消光标闪烁
  970.                         }
  971.                 }
  972.                                                                
  973.                                                                
  974.                                                                
  975.         }
  976.                                 if(S4==0|key1==0)                                                                   //退出设置、开启中断
  977.                 {
  978.                         delay(5);
  979.                         if(S4==0|key1==0)
  980.                         {
  981.                                 S1numm=0;
  982.                                 wr_com(0x0c);
  983.                         }
  984.                 }
  985.                                
  986.                                  if(S1!=0)                                           //????????S2?S3?S4???
  987.         {
  988.           if(!S2)
  989.                                                 {
  990.                                                         delay1ms(5);
  991.                                                         if(!S2)
  992.                                                         {
  993.                                                                 if(S1numm==1)
  994.                                                                 {
  995.                                                                         shi1++;
  996.                                                                         if(shi1==10)
  997.                                                                         {
  998.                                                                                 shi1=0;
  999.                                                                                 shi4++;
  1000.                                                                         }if(shi4==2&&shi1==4){shi4=shi1=0;}
  1001.                                                                                 wr_com(0xc9);            
  1002.                                                                                 wr_dat(shi1+0x30);
  1003.                                                                                 wr_com(0xc8);            
  1004.                                                                                 wr_dat(shi4+0x30);
  1005.                                                                 }
  1006.                                                                 if(S1numm==2)
  1007.                                                                 {
  1008.                                                                         shi2++;
  1009.                                                                         if(shi2==10)
  1010.                                                                         {
  1011.                                                                                 shi2=0;
  1012.                                                                                 shi5++;
  1013.                                                                         }if(shi5==2&&shi2==4){shi5=shi2=0;}
  1014.                                                                                 wr_com(0xc9+3);            
  1015.                                                                                 wr_dat(shi2+0x30);
  1016.                                                                                 wr_com(0xc8+3);            
  1017.                                                                                 wr_dat(shi5+0x30);
  1018.                                                                 }
  1019.                                                                 if(S1numm==3)
  1020.                                                                 {
  1021.                                                                         shi3++;
  1022.                                                                         if(shi3==10)
  1023.                                                                         {
  1024.                                                                                 shi3=0;
  1025.                                                                                 shi6++;
  1026.                                                                         }if(shi6==2&&shi3==4){shi6=shi3=0;}
  1027.                                                                                 wr_com(0xc9+6);            
  1028.                                                                                 wr_dat(shi3+0x30);
  1029.                                                                                 wr_com(0xc8+6);            
  1030.                                                                                 wr_dat(shi6+0x30);
  1031.                                                                 }
  1032.                                                                 while(!S2);
  1033.                                                         }
  1034.                                                 }
  1035.                                                
  1036.                                                
  1037.                                                 if(!S3)
  1038.                                                 {
  1039.                                                         delay1ms(5);
  1040.                                                         if(!S3)
  1041.                                                         {
  1042.                                                                 if(S1numm==1)
  1043.                                                                 {
  1044.                                                                         shi1--;
  1045.                                                                         if(shi1==-1)
  1046.                                                                         {
  1047.                                                                                 shi1=9;
  1048.                                                                                 shi4--;
  1049.                                                                                 if(shi4==-1)
  1050.                                                                                 {
  1051.                                                                                         shi4=2;
  1052.                                                                                         shi1=3;
  1053.                                                                                 }
  1054.                                                                         }
  1055.                                                                                 wr_com(0xc9);            
  1056.                                                                                 wr_dat(shi1+0x30);
  1057.                                                                                 wr_com(0xc8);            
  1058.                                                                                 wr_dat(shi4+0x30);
  1059.                                                                 }
  1060.                                                                 if(S1numm==2)
  1061.                                                                 {
  1062.                                                                         shi2--;
  1063.                                                                         if(shi2==-1)
  1064.                                                                         {
  1065.                                                                                 shi2=9;
  1066.                                                                                 shi5--;
  1067.                                                                                 if(shi5==-1)
  1068.                                                                                 {
  1069.                                                                                         shi5=2;
  1070.                                                                                         shi2=3;
  1071.                                                                                 }
  1072.                                                                         }
  1073.                                                                                 wr_com(0xc9+3);            
  1074.                                                                                 wr_dat(shi2+0x30);
  1075.                                                                                 wr_com(0xc8+3);            
  1076.                                                                                 wr_dat(shi5+0x30);
  1077.                                                                 }
  1078.                                                                 if(S1numm==3)
  1079.                                                                 {
  1080.                                                                         shi3--;
  1081.                                                                         if(shi3==-1)
  1082.                                                                         {
  1083.                                                                                 shi3=9;
  1084.                                                                                 shi6--;
  1085.                                                                                 if(shi6==-1)
  1086.                                                                                 {
  1087.                                                                                         shi6=2;
  1088.                                                                                         shi3=3;
  1089.                                                                                 }
  1090.                                                                         }
  1091.                                                                                 wr_com(0xc9+6);            
  1092.                                                                                 wr_dat(shi3+0x30);
  1093.                                                                                 wr_com(0xc8+6);            
  1094.                                                                                 wr_dat(shi6+0x30);
  1095.                                                                 }
  1096.                                                                
  1097.                                                                 while(!S3);
  1098.                                                         }
  1099.                                                 }
  1100.                                                
  1101.                                 }            
  1102.                                
  1103.                                
  1104. }}
  1105. void main()
  1106. {
  1107.                 init1();
  1108.         init2();

  1109.         led1=0;
  1110.         led2=0;
  1111.         led3=0;
  1112.         led4=1;
  1113.         led=0;
  1114.         keys1=1;
  1115.         keys2=1;
  1116.     while(1)
  1117.     { zdws();
  1118.                         init_play();
  1119.                         key();
  1120.       read_temp();         
  1121.       ds18b20disp();        
  1122.                         keyscan()        ;
  1123.                         adcc();
  1124.                         adbb();     
  1125.                         panduan();
  1126.                         panduan1();
  1127.                         panduan2();
  1128.                         panduan3();
  1129.     }
  1130. }
复制代码
无标题.png
所有资料51hei提供下载:
1602.rar (22.64 KB, 下载次数: 15)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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