久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3293|回復: 0
打印 上一主題 下一主題
收起左側(cè)

單片機定時開關且定時放樂電子鐘

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71259 發(fā)表于 2014-12-29 20:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式


  1. ///////////////////////////////////////////////////////////////////
  2. /*名稱:單片機定時開關且定時放樂電子鐘,                                  /
  3. /*作者:周光明                                                    /
  4. /*時間:2010年12月6日                                             /
  5. /*功能:                                                          /
  6. /*                                                                /
  7. /*                                                                /
  8. ///////////////////////////////////////////////////////////////////*/
  9. #include <reg52.h>
  10. #include "ds1302.c"          //ds1302芯
  11. #include "lanhuacao.c"       //蘭花草音樂
  12. #define uchar unsigned char
  13. #define uint unsigned int
  14. #define sjck P0
  15. #define wei P2
  16. #define hua 0xf7
  17. #define ds_o 0xa3          ///o
  18. #define ds_n 0xab         ///n
  19. #define ds_f 0x8e         ///f
  20. #define xds 0xc0          //寫DS1302初地址
  21. #define dds 0xc1          //讀初值地址

  22. uchar rem[8]={0,1,10,3,4,10,6,7};
  23. uchar remds[6][2]={
  24.                     {0x00,0x00},                  
  25.                     {0x00,0x00},     
  26.         {0x00,0x00},                 
  27.                     {0x00,0x00},
  28.      {0x00,0x00},                  
  29.                     {0x00,0x00},
  30.          };
  31. uchar code bcd[15]={0xc0,0xf9,0xa4,0xb0,
  32.                     0x99,0x92,0x82,0xf8,
  33.      0x80,0x90,0xbf,0xff,
  34.      0xa3,0xab,0x8e};

  35. uchar ii,moshi,moshi_h,tiao,time_1;
  36. uint tt,tt1,msgl;
  37. bit aj_1,shan_1,ds_1,ds_2,qr_1;

  38. sbit jidianqi=P3^0;

  39. sbit e=P3^3;

  40. sbit SB0=P1^0;
  41. sbit SB1=P1^1;
  42. sbit SB2=P1^2;
  43. sbit SB3=P1^3;
  44. sbit SB4=P1^4;

  45. sbit dsd0=P0^7;

  46. /******************延時*********************/
  47. yanshi(uint t)
  48. {
  49. while(t--);
  50. }
  51. //////////////////////////////////////////////
  52. /******************顯示*********************/
  53. xianshi(uint t)
  54. {
  55.   sjck=0xff;
  56.   e=0;
  57.   e=1;
  58.   if(shan_1)
  59.        {
  60.         if(moshi==0)
  61.               {
  62.          if(ii==2)ii++;//時間顯示時橫杠閃爍
  63.       if(ii==5)ii++;
  64.          }
  65.      if(tiao<9)
  66.              {
  67.        if(ii==tiao)ii=ii+2;//閃爍調(diào)整位
  68.         }
  69.      }

  70.      wei=~(0x01<<ii);               //段選

  71.   sjck=bcd[rem[ii]];
  72.   if(ii==0)if(ds_1)dsd0=0;//定時開燈亮否
  73.   e=0;
  74.   e=1;
  75.      ii++;
  76.      if(ii>7)ii=0;
  77.   yanshi(t);
  78. }
  79. ////////////////////////////////////////////////
  80. /////////////////////////////////////
  81. yinyue(uint x,uint y)
  82. {
  83. uint i;
  84. for(i=0;i<y;i++)
  85.     {
  86.   yue=~yue;
  87.   xianshi(x);
  88.   yue=1;
  89.   }
  90. }
  91. /******************顯示111*********************/
  92. /******************讀時間膀*********************/
  93. dushijian()
  94. {
  95. uchar time;
  96. time=duds1302(dumiao);
  97. rem[0]=time&0x0f;
  98. rem[1]=time>>4;
  99. time=duds1302(dufen);
  100. rem[3]=time&0x0f;
  101. rem[4]=time>>4;
  102. time=duds1302(dushi);
  103. rem[6]=time&0x0f;
  104. rem[7]=time>>4;
  105. rem[2]=10;
  106. }
  107. /******************讀年月日*********************/
  108. dunianyueri()
  109. {
  110. uchar time;
  111. time=duds1302(duri);
  112. rem[0]=time&0x0f;
  113. rem[1]=time>>4;
  114. time=duds1302(duyue);
  115. rem[3]=time&0x0f;
  116. rem[4]=time>>4;
  117. time=duds1302(dunian);
  118. rem[6]=time&0x0f;
  119. rem[7]=time>>4;
  120. }
  121. ///////////////////////////////////////////寫時間
  122. xieshijian()
  123. {
  124.                   xieds1302(baohu,0x00);
  125.       time_1=(rem[1]<<4)+rem[0];
  126.       xieds1302(xiemiao,time_1);
  127.                   time_1=(rem[4]<<4)+rem[3];
  128.       xieds1302(xiefen,time_1);
  129.                   time_1=(rem[7]<<4)+rem[6];
  130.       xieds1302(xieshi,time_1);
  131.       xieds1302(baohu,0x80);
  132. }
  133. ///////////////////////////////////////////寫年月日
  134. xienianyueri()
  135. {
  136.                   xieds1302(baohu,0x00);
  137.       time_1=(rem[1]<<4)+rem[0];
  138.       xieds1302(xieri,time_1);
  139.                   time_1=(rem[4]<<4)+rem[3];
  140.       xieds1302(xieyue,time_1);
  141.                   time_1=(rem[7]<<4)+rem[6];
  142.       xieds1302(xienian,time_1);
  143.       xieds1302(baohu,0x80);
  144. }
  145. /******************?********************/

  146. /////////////////////////////////////////////////////////
  147. anjian()
  148. {
  149. P1=0xff;
  150. if(P1==0xff)aj_1=1;
  151.   if(aj_1)
  152.        {
  153.           if(SB0==0)                         //模式
  154.      {
  155.       yinyue(10,10);
  156.       aj_1=0;
  157.       if(SB0==0)                                  //模式鍵按下
  158.          {
  159.        msgl=0;
  160.        tiao=9;
  161.        while(SB0==0)yinyue(2,50);
  162.        moshi++;
  163.        if(moshi>7)moshi=0;
  164.        }
  165.       }
  166.           if(SB1==0)                                  //調(diào)整位鍵9 6 3 0 位
  167.      {
  168.       yinyue(20,30);
  169.       aj_1=0;
  170.       if(SB1==0)
  171.          {
  172.       msgl=0;
  173.        while(SB1==0)yinyue(2,30);;
  174.        tiao=tiao+3;
  175.        if(tiao>9)tiao=0;
  176.        }
  177.       }
  178.    if(SB2==0)                              //加法
  179.      {
  180.       yinyue(10,20);
  181.       aj_1=0;
  182.       if(SB2==0)
  183.          {
  184.       msgl=0;
  185.        while(SB2==0)yinyue(2,60);
  186.        rem[tiao]++;
  187.        if(rem[tiao]>9)
  188.              {
  189.        rem[tiao]=0;
  190.        rem[tiao+1]++;
  191.        if(rem[tiao+1]>=6)rem[tiao+1]=0;
  192.           }
  193.        }
  194.       }
  195.    if(SB3==0)
  196.      {
  197.       yinyue(3,50);                      /////減法
  198.       aj_1=0;
  199.       if(SB3==0)
  200.          {
  201.        while(SB3==0)yinyue(2,34);
  202.        if(rem[tiao]==0)
  203.              {
  204.        msgl=0;
  205.        if(rem[tiao+1]==0){rem[tiao]=9;rem[tiao+1]=5;}
  206.        else
  207.            {
  208.          rem[tiao+1]--;
  209.             rem[tiao]=9;
  210.         }
  211.           }
  212.      else rem[tiao]--;
  213.        }
  214.       }
  215.    if(SB4==0)                                   //定時器開
  216.      {
  217.       yinyue(2,20);
  218.       aj_1=0;
  219.       if(SB4==0)
  220.          {
  221.       msgl=0;
  222.        while(SB4==0)yinyue(2,15);
  223.        ds_1=~ds_1;                        //定時標志取反;
  224.        }
  225.       }

  226.   }
  227. }
  228. ////////////////////////////////////////////////////////讀定時到顯存
  229. dudingshi(uchar m)
  230. {
  231. rem[0]=m;
  232. rem[2]=12;                     //ds_o;
  233. m--;
  234. if(m%2==0)rem[1]=13;           //ds_n;
  235. else rem[1]=14;                //ds_f;
  236. rem[3]=remds

  237. --[0]&0x0f;                //取分低位到顯存
  238. rem[4]=remds

  239. -[0]>>4;                  //取分高位
  240. rem[6]=remds

  241. -[1]&0x0f;                //取時低位
  242. rem[7]=remds

  243. -[1]>>4;                  //取時高位到顯存
  244. }
  245. ////////////////////////////////////////////////////////////////
  246. xiedingshi(uchar m)
  247. {
  248.   uchar n;
  249.   remds

  250. -[0]=rem[3]+(rem[4]<<4);
  251.   remds

  252. -[1]=rem[6]+(rem[7]<<4);                  //從DS1302  0xc0 開始,xds 帶表0xc0
  253.   n=xds+(m*4);
  254.   xieds1302(baohu,0x00);          //開保護
  255.   xieds1302(n,remds

  256. -[0]);        //寫第一個數(shù)據(jù)
  257.   n=n+2;
  258.   xieds1302(n,remds

  259. --[1]);         //寫第二個數(shù)據(jù)
  260.   xieds1302(baohu,0x80);
  261. }
  262. ////////////////////////讀取定時數(shù)據(jù)到存儲器
  263. duchudingshi()
  264. {
  265.   uchar i,m;
  266.   m=dds;
  267.   for(i=0;i<6;i++)
  268.       {
  269.     remds[i][0]=duds1302(m);
  270.     m=m+2;
  271.     remds[i][1]=duds1302(m);
  272.     m=m+2;
  273.     }
  274. }

  275. //////////////////////////////////////////////////////////////////
  276. dingshipanduan()
  277. {
  278. uchar i,temp,temp1;
  279.    temp=rem[3]+(rem[4]<<4);
  280.    temp1=rem[6]+(rem[7]<<4);
  281.    for(i=0;i<6;i++)
  282.        {
  283.       if(temp==remds[i][0])
  284.                    {
  285.      if(temp1==remds[i][1])
  286.                         {
  287.        if(remds[i][0]==0x00){if(remds[i][1]==0x00)goto loop;}
  288.                          else
  289.            {
  290.          if(i%2==0)jidianqi=0;
  291.          else jidianqi=1;
  292.          if(ds_2==0)if(rem[0]==0)if(rem[1]==0)ds_2=1;//音樂標志位置1
  293.          }
  294.           loop: xianshi(1);
  295.             }
  296.        }
  297.      }
  298.      
  299. }
  300. //////////////////////////////////////////////////////////////
  301. zhengdian()
  302. {
  303. if(rem[0]==0)
  304.     if(rem[1]==0)if(rem[2]==0)if(rem[3]==0)ds_2=1;
  305. }
  306. /******************主程序111*********************////////////////
  307. //////////////////////////////////////////////////////////////////
  308. void main(void)
  309. {                       
  310.    tiao=9;
  311.    duchudingshi();//從DS1302讀出到存儲器
  312.    yue=1;
  313.    jidianqi=1;
  314.    ds_1=0;
  315. while(1)
  316.      {
  317.    anjian();
  318.    if(tiao==9)
  319.      {
  320.     if(moshi>1)dudingshi(moshi-1);//讀定時到顯存
  321.     switch(moshi)
  322.        {
  323.      case 0: dushijian();break;   ///////讀時間
  324.         case 1: dunianyueri();break; /////度年月日
  325.      default:break;
  326.     }
  327.      }
  328.    else
  329.        {
  330.       if(moshi>1)xiedingshi(moshi-2);   //寫定時到定時存儲器,寫到DS1302  
  331.        switch(moshi)
  332.              {
  333.            case 0:xieshijian();break;  ///寫時間
  334.            case 1:xienianyueri();break;////寫年月日
  335.      default:break;
  336.        }
  337.           }   
  338.    xianshi(20);
  339.    if(ds_1)  { if(moshi==0)dingshipanduan();                      //zhengdian();
  340.     }
  341.       else jidianqi=1;                                //否則繼電器關
  342.    if(ds_2){fangyinyue();ds_2=0;}
  343.    tt++;
  344.    if(tt>500)
  345.     {
  346.      tt=0;
  347.   shan_1=~shan_1;                    //閃爍標志取反
  348.      msgl++;                      //按鍵按下時模式歸零計數(shù)器
  349.      if(msgl>20)
  350.          {
  351.        msgl=0;
  352.        if(moshi!=0)moshi=0; //模式不等于零時歸零
  353.        if(tiao!=9)tiao=9;   //調(diào)整不等于9時歸九
  354.        rem[2]=10;           //
  355.        }
  356.      }
  357.    }
  358. }
復制代碼


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

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品久久人人爱 | 精品美女在线观看视频在线观看 | 久久国产精品视频 | 国产农村妇女毛片精品久久麻豆 | 国产精品久久久久久久久久免费看 | 成人综合一区 | 国产成人精品一区二 | 亚洲精品成人在线 | 日韩中文字幕一区 | 日韩免费 | 福利视频一区 | 国产一区二区三区高清 | 久草热在线 | 成人在线国产 | 日日夜夜天天 | 欧美一级α片 | 国产丝袜人妖cd露出 | 青青草在线视频免费观看 | 免费永久av | 毛片在线视频 | 四虎影院新地址 | 欧美精品一区二区三区在线播放 | 亚洲精品视频一区二区三区 | 亚洲一区二区三区四区五区午夜 | 91在线第一页 | www.亚洲一区二区三区 | 在线观看国产三级 | 97超碰成人 | 久久久久久久久久久久久久av | 欧美日韩精品在线免费观看 | 成人免费视频在线观看 | 中文字幕国产一区 | 成人精品国产一区二区4080 | 亚洲品质自拍视频 | 福利av在线 | 久久国产视频播放 | 特a毛片| 国产精品久久久久久52avav | 久久久人成影片一区二区三区 | 一区二区三区视频在线 | 亚洲精品免费在线 |