找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)萬年歷仿真及源程序和protel畫的原理圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

萬年歷的所有資料下載:
萬年歷.zip (118.48 KB, 下載次數(shù): 48)

源程序:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. uchar code table[]={"0000-00-00"};
  5. uchar code table1[]={"00:00:00"};
  6. uchar code table2[]={"MONTUSWEDTHUFRISATSUN"};
  7. sbit rs=P2^0;
  8. sbit rw=P2^1;
  9. sbit e=P2^2;
  10. sbit key1=P2^3;
  11. sbit key2=P2^4;
  12. sbit key3=P2^5;
  13. char num,shi1=0,fen=0,miao=0,ri=0,yue=0;uchar xingqi=1;
  14. int nianqian=0,nianhou=0;
  15. void delay(unsigned int z)
  16. {
  17.         uchar x,y;
  18.         for(x=z;x>0;x--)
  19.                 for(y=110;y>0;y--);
  20. }
  21. void write_com(uchar com)
  22. {
  23.         
  24.         rs=0;
  25.         rw=0;
  26.         P0=com;
  27.         delay(5);
  28.         e=1;
  29.         delay(5);
  30.         e=0;        
  31. }
  32. void write_data(uchar date)
  33. {
  34. rs=1;
  35. rw=0;
  36. P0=date;
  37. delay(5);
  38. e=1;
  39. delay(5);
  40. e=0;
  41. }
  42. void init()
  43. {         
  44.         rs=0;
  45.         write_com(0x38);
  46.         write_com(0x0c);
  47.         write_com(0x06);
  48.         write_com(0x01);
  49.         delay(5);
  50. }
  51. void write_wang(uchar add,uchar date)
  52. {
  53.         uchar shi,ge;
  54.         shi=date/10;
  55.         ge=date%10;
  56.         write_com(0x80+0X40+add);
  57.         write_data(0x30+shi);
  58.         write_data(0x30+ge);
  59.         
  60. }
  61. void write_wang1(uchar add,uchar date)
  62. {
  63.         uchar shi,ge;
  64.         shi=date/10;
  65.         ge=date%10;
  66.         write_com(0x80+add);
  67.         write_data(0x30+shi);
  68.         write_data(0x30+ge);        
  69. }
  70. void write_wang2(uchar add,int date)
  71. {
  72.         uchar shi,ge;
  73.         shi=date/10;
  74.         ge=date%10;
  75.         write_com(0x80+add);
  76.         write_data(0x30+shi);
  77.         write_data(0x30+ge);        
  78. }
  79. void keycan()
  80. {
  81.         uchar i;uchar num1;
  82.         if(key1==0)
  83.         {        
  84.                 delay(1);
  85.                 if(key1==0)
  86.                 {               
  87.                         num1++;
  88.                         while(!key1);
  89.                         if(num1==1)
  90.                         {
  91.                                 TR0=0;
  92.                                 write_com(0x80+0x40+7);
  93.                                 write_com(0x0f);
  94.                         }
  95.                 }         
  96.                         if(num1==2)
  97.                         {
  98.                         write_com(0x80+0x40+4);                        
  99.                         }
  100.                         if(num1==3)
  101.                         {
  102.                                 write_com(0x80+0x40+1);
  103.                         
  104.                         }
  105.                         if(num1==4)
  106.                         {        
  107.                                 write_com(0x80+9);        
  108.                         }
  109.                         if(num1==5)
  110.                         write_com(0x80+6);
  111.                         if(num1==6)
  112.                         write_com(0x80+3);
  113.                         if(num1==7)
  114.                         write_com(0x80+1);
  115.                         if(num1==8)
  116.                            write_com(0x80+13);
  117.                         if(num1>=9)
  118.                         {
  119.                         num1=0;
  120.                         TR0=1;
  121.                         write_com(0x0c);               
  122.                         }                                          
  123.         }         
  124.         if(num1!=0)
  125.                 {
  126.                  if(key2==0)
  127.                         {
  128.                                 delay(1);
  129.                                 if(key2==0)
  130.                                 {
  131.                                         while(key2!=1);
  132.                                         if(num1==1)
  133.                                         {
  134.                                         miao++;
  135.                                         if(miao==60)
  136.                                                 {
  137.                                                 miao=0;
  138.                                                 }
  139.                                         write_wang(6,miao);
  140.                                         write_com(0x80+0x40+6);
  141.                                         }        
  142.                                         if(num1==2)
  143.                                         {
  144.                                         fen++;
  145.                                                 if(fen==60)
  146.                                                 {
  147.                                                 fen=0;
  148.                                                 }
  149.                                         write_wang(3,fen);
  150.                                         write_com(0x80+0x40+3);
  151.                                         }
  152.                                         if(num1==3)
  153.                                         {
  154.                                         shi1++;
  155.                                                 if(shi1==24)
  156.                                                 {
  157.                                                 shi1=0;
  158.                                                 }
  159.                                                 write_wang(0,shi1);
  160.                                         write_com(0x80+0x40);
  161.                                         }
  162.                                         if(num1==4)
  163.                                         {
  164.                                         ri++;
  165.                                         if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
  166.                                         {
  167.                                                 if(ri==32)
  168.                                                 {
  169.                                                 ri=1;
  170.                                                 }
  171.                                         }
  172.                                         else if(yue==2)
  173.                                                 {         
  174.                                                  if((nianqian*100+nianhou)%4==0 && (nianqian*100+nianhou)%100!=0 || (nianqian*100+nianhou)%400==0 )
  175.                                                         {
  176.                                                                 if(ri==30)
  177.                                                                 ri=1;
  178.                                                         }
  179.                                                         else
  180.                                                         {
  181.                                                                 if(ri==29)
  182.                                                                 ri=1;
  183.                                                         }
  184.                                                 }
  185.                                         else
  186.                                                 {
  187.                                                         if(ri==31)
  188.                                                         ri=1;
  189.                                                 }
  190.                                         write_wang1(8,ri);
  191.                                         write_com(0x80+8);
  192.                                         }
  193.                                         if(num1==5)
  194.                                         {
  195.                                         yue++;
  196.                                                 if(yue==13)
  197.                                                 {
  198.                                                 yue=1;
  199.                                                 }
  200.                                                 write_wang1(5,yue);
  201.                                         write_com(0x80+5);
  202.                                         }
  203.                                         if(num1==6)
  204.                                         {
  205.                                                          nianhou++;
  206.                                                 if(nianhou==100)
  207.                                                 {
  208.                                                 nianhou=0;                                
  209.                                                 }
  210.                                                 write_wang2(2,nianhou);
  211.                                         write_com(0x80+2);
  212.                                         }
  213.                                         if(num1==7)
  214.                                         {        nianqian++;                        
  215.                                                 if(nianqian==100)
  216.                                                 {
  217.                                                 nianqian=0;
  218.                                                 }
  219.                                                 write_wang2(0,nianqian);
  220.                                         write_com(0x80);  
  221.                                 
  222.                                         }
  223.                                         if(num1==8)
  224.                                         {
  225.                                                 xingqi++;
  226.                                                 if(xingqi==8)
  227.                                                 xingqi=1;
  228.                                                         switch(xingqi)
  229.                                                 {
  230.                                                         case 1:
  231.                                                                 write_com(0x80+13);
  232.                                                                 for(i=0;i<3;i++)
  233.                                                                 {
  234.                                                                 write_data(table2[i]);               
  235.                                                                 }
  236.                                                                 break;
  237.                                                         case 2:
  238.                                                                    write_com(0x80+13);
  239.                                                                  for(i=3;i<6;i++)
  240.                                                                 {
  241.                                                                 write_data(table2[i]);               
  242.                                                                 }
  243.                                                                 break;
  244.                                                         case 3:
  245.                                                                  write_com(0x80+13);
  246.                                                                  for(i=6;i<9;i++)
  247.                                                                 {
  248.                                                                 write_data(table2[i]);               
  249.                                                                 }
  250.                                                                 break;
  251.                                                           case 4:
  252.                                                                  write_com(0x80+13);
  253.                                                                  for(i=9;i<12;i++)
  254.                                                                 {
  255.                                                                 write_data(table2[i]);               
  256.                                                                 }
  257.                                                                 break;
  258.                                                     case 5:
  259.                                                                  write_com(0x80+13);
  260.                                                                  for(i=12;i<15;i++)
  261.                                                                 {
  262.                                                                 write_data(table2[i]);               
  263.                                                                 }
  264.                                                                 break;
  265.                                                          case 6:
  266.                                                                  write_com(0x80+13);
  267.                                                                  for(i=15;i<18;i++)
  268.                                                                 {
  269.                                                                 write_data(table2[i]);               
  270.                                                                 }
  271.                                                                 break;
  272.                                                            case 7:
  273.                                                                  write_com(0x80+13);
  274.                                                                  for(i=18;i<21;i++)
  275.                                                                 {
  276.                                                                 write_data(table2[i]);               
  277.                                                                 }
  278.                                                                 break;
  279.                                                 }

  280.                                         }
  281.                                 }
  282.                         }
  283.         if(num1!=0)
  284.                 {
  285.                  if(key3==0)
  286.                         {
  287.                                 delay(5);
  288.                                 if(key3==0)
  289.                                 {
  290.                                         while(key3!=1);
  291.                                         if(num1==1)
  292.                                         {
  293.                                         miao--;
  294.                                         if(miao==-1)
  295.                                                 {
  296.                                                 miao=59;
  297.                                                 }
  298.                                         write_wang(6,miao);
  299.                                         write_com(0x80+0x40+6);
  300.                                         }        
  301.                                         if(num1==2)
  302.                                         {
  303.                                         fen--;
  304.                                                 if(fen==-1)
  305.                                                 {
  306.                                                 fen=59;
  307.                                                 }
  308.                                         write_wang(3,fen);
  309.                                         write_com(0x80+0x40+3);
  310.                                         }
  311.                                         if(num1==3)
  312.                                         {
  313.                                         shi1--;
  314.                                                 if(shi1==-1)
  315.                                                 {
  316.                                                 shi1=23;
  317.                                                 }
  318.                                                 write_wang(0,shi1);
  319.                                         write_com(0x80+0x40);
  320.                                         }
  321.                                         if(num1==4)
  322.                                         {
  323.                                         ri--;
  324.                                         if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
  325.                                         {
  326.                                                 if(ri==-1)
  327.                                                 {
  328.                                                 ri=31;
  329.                                                 }
  330.                                         }
  331.                                         else if(yue==2)
  332.                                                 {
  333.                                                         if(((nianqian*100+nianhou)%4==0 && (nianqian*100+nianhou)%100!=0 || (nianqian*100+nianhou)%400==0 ))
  334.                                                         {
  335.                                                         if(ri==-1)
  336.                                                         ri=29;
  337.                                                         }
  338.                                                         else
  339.                                                         {
  340.                                                                 if(ri==-1)
  341.                                                                 ri=28;
  342.                                                         }
  343.                                                 }
  344.                                         else
  345.                                                 {
  346.                                                         if(ri==-1)
  347.                                                         ri=30;
  348.                                                 }
  349.                                         write_wang1(8,ri);
  350.                                         write_com(0x80+8);
  351.                                         }
  352.                                         if(num1==5)
  353.                                         {
  354.                                         yue--;
  355.                                                 if(yue==0)
  356.                                                 {
  357.                                                 yue=12;
  358.                                                 }
  359.                                                 write_wang1(5,yue);
  360.                                         write_com(0x80+5);
  361.                                         }
  362.                                         if(num1==6)
  363.                                         {
  364.                                                         nianhou--;
  365.                                                 if(nianhou==-1)
  366.                                                 {
  367.                                                 nianhou=99;
  368.                                                 }
  369.                                         write_wang2(2,nianhou);
  370.                                         write_com(0x80+2);
  371.                                         }
  372.                                         if(num1==7)
  373.                                         {
  374.                                                  nianqian--;
  375.                                                 if(nianqian==-1)
  376.                                                 {
  377.                                                 nianqian=99;
  378.                                                 }
  379.                                          write_wang2(0,nianqian);
  380.                                         write_com(0x80);
  381.                                         }
  382.                                         if(num1==8)
  383.                                         {
  384.                                                 xingqi--;
  385.                                                 if(xingqi==0)
  386.                                                 xingqi=7;
  387.                                                         switch(xingqi)
  388.                                                 {
  389.                                                         case 1:
  390.                                                                 write_com(0x80+13);
  391.                                                                 for(i=0;i<3;i++)
  392.                                                                 {
  393.                                                                 write_data(table2[i]);               
  394.                                                                 }
  395.                                                                 break;
  396.                                                         case 2:
  397.                                                                    write_com(0x80+13);
  398.                                                                  for(i=3;i<6;i++)
  399.                                                                 {
  400.                                                                 write_data(table2[i]);               
  401.                                                                 }
  402.                                                                 break;
  403.                                                         case 3:
  404.                                                                  write_com(0x80+13);
  405.                                                                  for(i=6;i<9;i++)
  406.                                                                 {
  407.                                                                 write_data(table2[i]);               
  408.                                                                 }
  409.                                                                 break;
  410.                                                           case 4:
  411.                                                                  write_com(0x80+13);
  412.                                                                  for(i=9;i<12;i++)
  413.                                                                 {
  414.                                                                 write_data(table2[i]);               
  415.                                                                 }
  416.                                                                 break;
  417.                                                     case 5:
  418.                                                                  write_com(0x80+13);
  419.                                                                  for(i=12;i<15;i++)
  420.                                                                 {
  421.                                                                 write_data(table2[i]);               
  422.                                                                 }
  423.                                                                 break;
  424.                                                          case 6:
  425.                                                                  write_com(0x80+13);
  426.                                                                  for(i=15;i<18;i++)
  427.                                                                 {
  428.                                                                 write_data(table2[i]);               
  429.                                                                 }
  430.                                                                 break;
  431.                                                            case 7:
  432.                                                                  write_com(0x80+13);
  433.                                                                  for(i=18;i<21;i++)
  434.                                                                 {
  435.                                                                 write_data(table2[i]);               
  436.                                                                 }
  437.                                                                 break;
  438.                                                 }

  439.                                         }
  440.                                 }
  441.                         }
  442.                 }
  443. }        
  444. }

  445. void duxianshi()
  446. {
  447.                 write_com(0x80);
  448.                 for(num=0;num<10;num++)
  449.                 {
  450.                 write_data(table[num]);
  451.                 delay(5);
  452.                 }
  453.                 write_com(0x80+13);
  454.                 for(num=0;num<3;num++)
  455.                 {
  456.                         write_data(table2[num]);
  457.                         delay(5);        
  458.                 }
  459.                 write_com(0x80+0x40);
  460.                 for(num=0;num<8;num++)
  461.                 {
  462.                         write_data(table1[num]);
  463.                         delay(5);
  464.                 }
  465. }
  466. void time()
  467. {
  468.         uchar i;
  469.                         if(num==18)
  470.                                 {
  471.                                         num=0;
  472.                                         miao++;
  473.                                         if(miao==60)
  474.                                     {
  475.                                                                 miao=0;
  476.                                                                 fen++;
  477.                                                                 if(fen==60)
  478.                                                                 {
  479.                                                                         fen=0;
  480.                                                                         shi1++;
  481.                                                                                 if(shi1==24)
  482.                                                                                         {
  483.                                                                                                 shi1=0;
  484.                                                                                                 ri++;
  485.                                                                                                 xingqi++;
  486.                                                                                                 if(xingqi==8)
  487.                                                                                                 xingqi=1;
  488.                                                                                                 switch(xingqi)
  489.                                                                                                 {
  490.                                                                                                         case 1:
  491.                                                                                                         write_com(0x80+13);
  492.                                                                                                         for(i=0;i<3;i++)
  493.                                                                                                         {
  494.                                                                                                         write_data(table2[i]);               
  495.                                                                                                         }
  496.                                                                                                         break;
  497.                                                                                                         case 2:
  498.                                                                                                            write_com(0x80+13);
  499.                                                                                                          for(i=3;i<6;i++)
  500.                                                                                                         {
  501.                                                                                                         write_data(table2[i]);               
  502.                                                                                                         }
  503.                                                                                                         break;
  504.                                                                                                         case 3:
  505.                                                                                                          write_com(0x80+13);
  506.                                                                                                          for(i=6;i<9;i++)
  507.                                                                                                         {
  508.                                                                                                         write_data(table2[i]);               
  509.                                                                                                         }
  510.                                                                                                         break;
  511.                                                                                                           case 4:
  512.                                                                                                          write_com(0x80+13);
  513.                                                                                                          for(i=9;i<12;i++)
  514.                                                                                                         {
  515.                                                                                                         write_data(table2[i]);               
  516.                                                                                                         }
  517.                                                                                                         break;
  518.                                                                                                     case 5:
  519.                                                                                                          write_com(0x80+13);
  520.                                                                                                          for(i=12;i<15;i++)
  521.                                                                                                         {
  522.                                                                                                         write_data(table2[i]);               
  523.                                                                                                         }
  524.                                                                                                         break;
  525.                                                                                                          case 6:
  526.                                                                                                          write_com(0x80+13);
  527.                                                                                                          for(i=15;i<18;i++)
  528.                                                                                                         {
  529.                                                                                                         write_data(table2[i]);               
  530.                                                                                                         }
  531.                                                                                                         break;
  532.                                                                                                            case 7:
  533.                                                                                                          write_com(0x80+13);
  534.                                                                                                          for(i=18;i<21;i++)
  535.                                                                                                         {
  536.                                                                                                         write_data(table2[i]);               
  537.                                                                                                         }
  538.                                                                                                         break;
  539.                                                                                                 }
  540.                                                                                                         if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
  541.                                                                                                         {
  542.                                                                                                                         if(ri==32)
  543.                                                                                                                         {
  544.                                                                                                                                 ri=1;
  545.                                                                                                                                 yue++;
  546.                                                                                                                                 if(yue==13)
  547.                                                                                                                                 {
  548.                                                                                                                                         yue=1;
  549.                                                                                                                                         nianhou++;
  550.                                                                                                                                         if(nianhou==100)
  551.                                                                                                                                         {
  552.                                                                                                                                                 nianhou=0;
  553.                                                                                                                                                 nianqian++;
  554.                                                                                                                                                 if(nianqian==100)
  555.                                                                                                                                                 {
  556.                                                                                                                                                      nianqian=0;
  557.                                                                                                                                                          nianhou=0;
  558.                                                                                                                                                          yue=0;
  559.                                                                                                                                                          ri=0;
  560.                                                                                                                                                          shi1=0;
  561.                                                                                                                                                          fen=0;
  562.                                                                                                                                                          miao=0;
  563.                                                                                                                                                         write_com(0x80+13);
  564.                                                                                                                                                         for(i=0;i<3;i++)
  565.                                                                                                                                                         {
  566.                                                                                                                                                         write_data(table2[i]);               
  567.                                                                                                                                                         }
  568.                                                                                                                                                 }
  569.                                                                                                                                                    write_wang2(0,nianqian);        
  570.                                                                                                                                         }
  571.                                                                                                                                 write_wang2(2,nianhou);               
  572.                                                                                                                         }
  573.                                                                                                                         write_wang1(5,yue);
  574.                                                                                                                 }
  575.                                                                                                                         write_wang1(8,ri);
  576.                                                                                                         }
  577.                                                                                                         else if(yue==2)
  578.                                                                                                         {
  579.                                                                                                                 if(ri==29)
  580.                                                                                                                         {
  581.                                                                                                                                 ri=1;
  582.                                                                                                                                 yue++;
  583.                                                                                                                                 if(yue==13)
  584.                                                                                                                                 {
  585.                                                                                                                                         yue=1;
  586.                                                                                                                                         nianhou++;
  587.                                                                                                                                         if(nianhou==100)
  588.                                                                                                                                         {
  589.                                                                                                                                                 nianhou=0;
  590.                                                                                                                                                 nianqian++;
  591.                                                                                                                                                 if(nianqian==100)
  592.                                                                                                                                                 {
  593.                                                                                                                                                      nianqian=0;
  594.                                                                                                                                                          nianhou=0;
  595.                                                                                                                                                          yue=0;
  596.                                                                                                                                                          ri=0;
  597.                                                                                                                                                          shi1=0;
  598.                                                                                                                                                          fen=0;
  599.                                                                                                                                                          miao=0;
  600.                                                                                                                                                         write_com(0x80+13);
  601.                                                                                                                                                         for(i=0;i<3;i++)
  602.                                                                                                                                                         {
  603.                                                                                                                                                         write_data(table2[i]);               
  604.                                                                                                                                                         }
  605.                                                                                                                                                 }
  606.                                                                                                                                                    write_wang2(0,nianqian);        
  607.                                                                                                                                         }
  608.                                                                                                                                 write_wang2(2,nianhou);               
  609.                                                                                                                         }
  610.                                                                                                                         write_wang1(5,yue);
  611.                                                                                                                 }
  612.                                                                                                                         write_wang1(8,ri);
  613.                                                                                                         }
  614.                                                                                                         else
  615.                                                                                                         {
  616.                                                                                                                  if(ri==31)
  617.                                                                                                                         {
  618.                                                                                                                                 ri=1;
  619.                                                                                                                                 yue++;
  620.                                                                                                                                 if(yue==13)
  621.                                                                                                                                 {
  622.                                                                                                                                         yue=1;
  623.                                                                                                                                         nianhou++;
  624.                                                                                                                                         if(nianhou==100)
  625.                                                                                                                                         {
  626.                                                                                                                                                 nianhou=0;
  627.                                                                                                                                                 nianqian++;
  628.                                                                                                                                                 if(nianqian==100)
  629.                                                                                                                                                 {
  630.                                                                                                                                                      nianqian=0;
  631.                                                                                                                                                          nianhou=0;
  632.                                                                                                                                                          yue=0;
  633.                                                                                                                                                          ri=0;
  634.                                                                                                                                                          shi1=0;
  635.                                                                                                                                                          fen=0;
  636.                                                                                                                                                          miao=0;
  637.                                                                                                                                                         write_com(0x80+13);
  638.                                                                                                                                                         for(i=0;i<3;i++)
  639.                                                                                                                                                         {
  640.                                                                                                                                                         write_data(table2[i]);               
  641.                                                                                                                                                         }
  642.                                                                                                                                                 }
  643.                                                                                                                                                    write_wang2(0,nianqian);        
  644.                                                                                                                                         }
  645.                                                                                                                                 write_wang2(2,nianhou);               
  646.                                                                                                                         }
  647.                                                                                                                         write_wang1(5,yue);
  648.                                                                                                                 }
  649.                                                                                                                         write_wang1(8,ri);
  650.                                                                                                         }
  651.                                                                                         }
  652.                                                                          write_wang(0,shi1);
  653.                                 }                                         
  654.                                 write_wang(3,fen);
  655.         }
  656.         write_wang(6,miao);
  657. }               
  658. }
  659. void main()
  660. {        
  661.     EA=1;
  662.         ET0=1;
  663.         TMOD=0X01;
  664.         TH0=(65536-50000)/256;
  665.         TL0=(65536-50000)%256;        
  666.         init();
  667.         duxianshi();
  668.         num=0;
  669.         TR0=1;        
  670.                 while(1)
  671.                 {        

  672.                            time();
  673.                         keycan();
  674. }
  675. }
  676. void T0_time()interrupt 1
  677. {
  678.         TH0=(65536-50000)/256;
  679.         TL0=(65536-50000)%256;
  680.         num++;
  681. }
復(fù)制代碼



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

使用道具 舉報(bào)

沙發(fā)
ID:211038 發(fā)表于 2017-6-14 09:50 | 只看該作者
大神在嘛
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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