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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2045|回復: 9
收起左側

我想問一下怎么添加 代碼讓我現在的這個程序可以電子時鐘和日歷自動切換間隔五秒

[復制鏈接]
ID:942830 發表于 2021-6-22 22:57 | 顯示全部樓層 |閱讀模式

電路仿真圖

電路仿真圖

  1. #include<reg52.h>                    //52單片機頭文件
  2. #include"intrins.h"                    //循環移位函數頭文件
  3. #define uint unsigned int  // 宏定義
  4. #define uchar unsigned char
  5. #define NOT_Break  25      //任意賦值避開條件
  6. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0XBF,0xff}; //共陽極數碼管編碼0-9和“—”
  7. uchar val[8]={2,3,10,5,9,10,5,5};  
  8. uchar flag=0;
  9. sbit key0 = P2^0;                   //清零
  10. sbit key1 = P2^1;                   //時間---年月日轉換
  11.                                                  //
  12. sbit BEEP = P3^5;                   //蜂鳴器


  13. void delay(uint z)         //1毫秒
  14. {
  15.         uint x,y;
  16.     for(x=z;x>0;x--)
  17.       for(y=110;y>0;y--);   
  18. }

  19. void time0init()           //  定時器0初始化函數
  20. {
  21.         TMOD=0x01;                                        //設置定時器0為工作方式1(M1M0為01)
  22.         TH0=(65536-2000)/256;                //裝初值12M晶振定時2ms數為2000
  23.         TL0=(65536-2000)%256;
  24.         EA=1;                                                //開總中斷
  25.         ET0=1;                                                //開定時器0中斷
  26.         TR0=1;                                                //啟動定時器0
  27. }

  28. uint num=0,keytime=0,time;
  29.         uchar wei=0X01,duan=0;        //時間更新  1s,20ms掃描一次按鍵, 控制修改項閃爍
  30. void time0() interrupt 1
  31. {

  32.         TH0=(65536-2000)/256;                //裝初值12M晶振定時2ms數為2000
  33.         TL0=(65536-2000)%256;
  34.         keytime++;                                        //20ms掃描一次按鍵
  35.         time++;                                                //控制修改項閃爍
  36.         num++;                                        //時間更新  1s
  37.      P1=wei;                        // 選擇要點亮的數碼管是哪一個
  38.         P0=table[val[duan]];   // 給改數碼管送顯示數據
  39.     wei=_crol_(wei,1);     // 移位,為點亮下一個數碼管做準備
  40.         duan++;                                 
  41.         if(duan>7)        duan=0;         

  42. }  


  43. uchar key()
  44. {                           
  45.   static  uchar kzt=0;         //推動循環,每次執行一次case
  46.   uchar sb=NOT_Break;         //任意賦值避開條件
  47.   switch(kzt)                         //按順序依次執行
  48.   {
  49. //------------case 0:------------//
  50.          case 0:                         //第一步
  51.          P3=0xff;                         //P3做讀入狀態時,應該要先寫1的,才能正確讀入數據         
  52.                          //按照課本原文 作輸入時:必須先將1寫入口鎖存器,使場效應管截止,該口線同時被內部上拉電阻拉成高電平,同時也能被外部輸入源拉成低電平,即外部輸入1時,該口線為高電平,輸入0時,該口線為低電平
  53.          if(P3!=0xff)                 //如果有按鍵按下
  54.          {
  55.                  kzt=1;                         //向下執行第二步
  56.                  return NOT_Break;                 //返回一個無關的值,用來跳出此次循環        
  57.                 }
  58.          break;                                 //如果沒有按鍵按下,直接跳出
  59. //------------case 1:------------//
  60.         case 1:                                 //第二步
  61.         P3=0xff;                         //P3做讀入狀態時,應該要先寫1的,才能正確讀入數據         
  62.                          //按照課本原文 作輸入時:必須先將1寫入口鎖存器,使場效應管截止,該口線同時被內部上拉電阻拉成高電平,同時也能被外部輸入源拉成低電平,即外部輸入1時,該口線為高電平,輸入0時,該口線為低電平
  63.         if(P3!=0xff)                 //有按鍵按下
  64.         {
  65.                 switch(P3)
  66.                 {
  67.                  case 0xfe:                 //第一個按鍵按下
  68.                  sb=0;
  69.                  break;                         //直接跳出
  70.                  case 0xfd:                 //第二個按鍵按下
  71.                  sb=1;
  72.                  break;                         //直接跳出
  73.                  case 0xfb:                 //第三個按鍵按下
  74.                  sb=2;
  75.                  break;                          //直接跳出         
  76.                  case 0xf7:             //第四個按鍵按下
  77.                  sb=3;
  78.                  break;                         //直接跳出                                                                                                                                                   
  79.                 }
  80.         kzt=2;                                 //如果無按鍵按下  向下執行第三步
  81.         return sb;                         //返回sb的值
  82.          }
  83.          else                                 //如果無按鍵按下  回到第一步
  84.          {
  85.           kzt=0;
  86.           return NOT_Break;         //返回一個無關的值,用來跳出此次循環        
  87.           }
  88.         break;
  89. //------------case 2:------------//
  90.         case 2:                                 //第三步
  91.         P3=0xff;                         //P3做讀入狀態時,應該要先寫1的,才能正確讀入數據         
  92.                          //按照課本原文 作輸入時:必須先將1寫入口鎖存器,使場效應管截止,該口線同時被內部上拉電阻拉成高電平,同時也能被外部輸入源拉成低電平,即外部輸入1時,該口線為高電平,輸入0時,該口線為低電平
  93.         if(P3==0xff)                 //如果沒有按鍵按下
  94.         {
  95.          kzt=0;                                 //如果無按鍵按下  回到第一步
  96.          return NOT_Break;
  97.          }                        
  98.          break;                                 //如果有按鍵按下  直接跳出
  99.                 }                        
  100.         return NOT_Break;        
  101. }

  102. void main()
  103. {  
  104.    char shi=23,fen=59,miao=55,qh=0;          //初始化時分秒   狀態標志位(0:正常,1:改變秒鐘,2:改變分鐘,3:改變時鐘)
  105.    char year=21,month=06,day=22;
  106.    char flag=0;                                                  //標志位---年月日&&時分秒
  107.    char keycode=NOT_Break;                          //鍵值
  108.    P0=0xff;
  109.    P1=0xff;
  110.    P2=0xff;
  111.    P3=0xff;
  112.    delay(10);                                                  //保證上面三條指令順利完成
  113.    time0init();                                                  //定時器0初始化函數
  114.    while(1)        
  115.         {         
  116.             if(key0==0)                                      //清零按鍵按下
  117.                 {
  118.                   shi=0;fen=0;miao=0;                  //時分秒清零
  119.                   qh=0;                                                  //開始顯示
  120.                   }
  121.             if(key1==0)                                      //年月日&&時分秒按鍵按下
  122.                 {
  123.                   while(!key1);                                  //等待放開按鍵
  124.                   if(flag==0) {flag=1;}                  //年月日&&時分秒
  125.                   else  flag=0;  
  126.                   qh=0;                                                  //開始顯示
  127.                   }        
  128.         
  129.             if(keytime>9)                                  //2ms*10=20ms
  130.                 {
  131.                   keytime=0;                                  //計數清零
  132.                   keycode=key();                           //檢測是否有按鍵按下                 
  133.                 }
  134. //////////////////////////////---時間更新---//////////////////////////////               
  135.                  if((num>=500)&&(qh==0))         //時間更新         2ms*500=1s
  136.                  {
  137.                  
  138.                         num=0;                                         //計數清零
  139.                         miao++;                                         //秒數加1
  140.                         if(miao>59)                                 //如果miao等于60
  141.                         {
  142.                                 miao=0;                                 //miao賦值為0
  143.                                 fen++;                                 //分鐘加1
  144.                                 if(fen>59)                         //如果fen等于60
  145.                                 {
  146.                                         fen=0;                         //fen賦值為0
  147.                                         shi++;                         //小時加1
  148.                                         if(shi>23) shi=0;//如果shi等于24  shi賦值為0
  149.                                 }
  150.                         }
  151.                  }
  152.                  
  153.                  
  154. ///////////////////////////////////////////////////////////////////////////               

  155. //////////////////////////////---按鍵檢測---///////////////////////////////

  156. ///////////////////////////---第一個按鍵按下---///////////////////////////////
  157. if(flag==0)
  158. {
  159.           if(keycode==0)                 //第一個按鍵按下        選擇
  160.           {
  161.                 qh++;                                 //狀態標志位(0:正常,1:改變秒鐘,2:改變分鐘,3:改變時鐘)
  162.                 if(qh>3) qh=1;             //如果qh等于4,qh賦值為1                 
  163.                 keycode=NOT_Break;         //任意賦值避開條件
  164.                 }
  165. ///////////////////////////---第二個按鍵按下---///////////////////////////////
  166.           if(keycode==1)                  //第二個按鍵按下          加
  167.        {
  168.                 if(qh==1)
  169.         {
  170.                    miao++;                                         
  171.            if(miao>59) {miao=0;fen++;}//如果miao等于60 miao賦值為0
  172.                                  
  173.                     }
  174.         if(qh==2)
  175.         {
  176.                fen++;                                
  177.           if(fen>59) {fen=0;shi++;}   //如果fen等于60 fen賦值為0
  178.                           
  179.             }
  180.        if(qh==3)
  181.         {
  182.              shi++;                                       
  183.          if(shi>23){shi=0;day++;}          //如果shi等于24 shi賦值為0                          
  184.               }
  185.            keycode=NOT_Break;          //任意賦值避開條件
  186.           }
  187. ///////////////////////////---第三個按鍵按下---///////////////////////////////
  188.         if(keycode==2)                           //第三個按鍵按下          減
  189.        {
  190.                 if(qh==1)
  191.         {
  192.                    miao--;                                         
  193.            if(miao<0)  {miao=59;fen--;}//如果miao等于-1 miao賦值為59                          
  194.                     }
  195.         if(qh==2)
  196.         {
  197.               fen--;                                
  198.           if(fen<0) {fen=59;shi--;}          //如果fen等于-1 fen賦值為59                 
  199.             }
  200.        if(qh==3)
  201.         {
  202.               shi--;                                       
  203.          if(shi<0) {shi=23;day--;}          //如果shi等于-1 shi賦值為23                          
  204.               }
  205.            keycode=NOT_Break;          //任意賦值避開條件
  206.           }        
  207. ///////////////////////////---第四個按鍵按下---///////////////////////////////         
  208.            if(keycode==3)                  //第四個按鍵按下           確定
  209.            {
  210.                  qh=0;                 
  211.                  keycode=NOT_Break;          //任意賦值避開條件
  212.                 }
  213.                 }
  214.         else if(flag==1)
  215.         {
  216.             if(keycode==0)                 //第一個按鍵按下        選擇
  217.           {
  218.                 qh++;                                 //狀態標志位(0:正常,1:改變秒鐘,2:改變分鐘,3:改變時鐘)
  219.                 if(qh>3) qh=1;             //如果qh等于4,qh賦值為1                 
  220.                 keycode=NOT_Break;         //任意賦值避開條件
  221.                 }
  222. ///---第二個按鍵按下:調加---///
  223.           if(keycode==1)                  
  224.        {
  225.                 if(qh==1)
  226.         {
  227.                    day++;
  228.                    if(day==29&&month==2&&(year%4!=0)){ day=1;month++;} //不是閏年
  229.                     if(day==30&&month==2&&year%100==0&&year%400!=0){day=1;month++;}         
  230.                     if(day==30&&month==2&&((year%100==0&&year%400==0)||(year%100!=0&&year%4==0))){day=1;month++;}
  231.                           if(day==31&&(month==4||month==6||month==9||month==11))   { day=1;month++;}               
  232.                     if(day==33&(month==1||month==3||month==5||month==7||month==8||month==10||month==12)){ day=1;  month++;}
  233.         
  234.                    }                  
  235.                     
  236.         if(qh==2)
  237.         {
  238.                month++;                                
  239.           if(month>12) {month=1;year++;}  //如果月等于13 分賦值為1                 
  240.             }
  241.        if(qh==3)
  242.         {
  243.              year++;                                       
  244.          if(year>99) year=1;          //如果年等于100 時賦值為1                          
  245.               }
  246.            keycode=NOT_Break;          //任意賦值避開條件
  247.           }
  248. ///---第三個按鍵按下:調減---///
  249.         if(keycode==2)                                    
  250.        {
  251.                 if(qh==1)
  252.         {
  253.                    day--;
  254.                                                            
  255.            if(day==0&&month==3&&(year%4!=0))
  256.                    {day=28;        month--;}
  257.                    if(day==0&&month==3&&year%100==0&&year%400!=0)
  258.                   {day=28;        month--;}
  259.                    if(day==0&&month==3&&((year%100==0&&year%400==0)||(year%100!=0&&year%4==0)))
  260.                     {day=29;        month--;}
  261.                          if(day==0&&(month==4||month==6||month==9||month==11))
  262.                    {day=30;        month--;}
  263.                    if(day==0&&(month==1||month==2||month==5||month==7||month==8||month==10||month==12))
  264.                   {day=31;        month--;}
  265.                                             
  266.                     }
  267.         if(qh==2)
  268.         {
  269.               month--;                                
  270.           if(month<1) {month=12;year--;}          //如果月等于0 分賦值為12                 
  271.             }
  272.        if(qh==3)
  273.         {
  274.               year--;                                       
  275.          if(year<1) year=99;          //如果年等于0 時賦值為12                          
  276.               }
  277.            keycode=NOT_Break;          //任意賦值避開條件
  278.           }        
  279. ///---第四個按鍵按下---///         
  280.            if(keycode==3)                  //第四個按鍵按下           確定
  281.            {
  282.                  qh=0;                 
  283.                  keycode=NOT_Break;          //任意賦值避開條件
  284.                 }
  285.          }
  286.                   
  287. ///////////////////////////////////////////////////////////////////////////
  288.                
  289. ///////////////////////////---顯示函數---///////////////////////////////   
  290.          switch(qh)                            //按鍵按下后立即顯示
  291.          {        
  292.          //正常顯示                 
  293.                         case 0:        
  294.                 if(flag==1)                 
  295.                 {                  
  296.                 val[0]=2;                 //年份21開頭定死
  297.                 val[1]=0;
  298.                 val[2]=year/10;         //年份十位顯示
  299.                 val[3]=year%10;  //年份個位顯示
  300.                 val[4]=month/10; //月份十位顯示
  301.                 val[5]=month%10; //月份個位顯示
  302.                 val[6]=day/10;   //天數十位顯示
  303.                 val[7]=day%10;   //天數個位顯示
  304.                  }
  305.         /**********顯示時分秒***********/
  306.                  else if(flag==0)
  307.                  {
  308.                 val[0]=shi/10;         //顯示時間 時分秒
  309.                 val[1]=shi%10;
  310.                 val[2]=10;
  311.                 val[3]=fen/10;
  312.                 val[4]=fen%10;
  313.         /**********整點報時,蜂鳴器響 **********/
  314.                 if(fen==0)
  315.                  {
  316.                  BEEP=0;
  317.                  delay(200);
  318.                  BEEP=1;
  319.                  }
  320.                  val[5]=10;
  321.                  val[6]=miao/10;
  322.                  val[7]=miao%10;
  323.                 }
  324.          //秒鐘修改后顯示  其中秒鐘部分在閃爍
  325.                 case 1:
  326.                 if(flag==0)
  327.                 {
  328.                 if(time<250)             //2ms*250=0.5s
  329.                 {                        
  330.             val[0]=shi/10;
  331.                 val[1]=shi%10;
  332.                 val[3]=fen/10;
  333.                 val[4]=fen%10;               
  334.                 val[6]=miao/10;
  335.                 val[7]=miao%10;                                   
  336.                  }
  337.                 else if(time<500)         //2ms*500=1s               
  338.                 {
  339.                      val[0]=shi/10;
  340.                         val[1]=shi%10;
  341.                         val[3]=fen/10;
  342.                         val[4]=fen%10;               
  343.                         val[6]=11;
  344.                         val[7]=11;                        
  345.                  }
  346.                 else if(time>500)         //2ms*500=1s
  347.                 {
  348.                         time=0;
  349.                  }                                                                        
  350.                    }
  351.                    else if(flag==1)
  352.                    {
  353.                              if(time<250)             //2ms*250=0.5s
  354.                 {                        
  355.             val[2]=year/10;
  356.                 val[3]=year%10;
  357.                 val[4]=month/10;
  358.                 val[5]=month%10;               
  359.                 val[6]=day/10;
  360.                 val[7]=day%10;                                   
  361.                  }
  362.                 else if(time<500)         //2ms*500=1s               
  363.                 {
  364.                      val[2]=year/10;
  365.                         val[3]=year%10;
  366.                         val[4]=month/10;
  367.                         val[5]=month%10;               
  368.                         val[6]=11;
  369.                         val[7]=11;                        
  370.                  }
  371.                 else if(time>500)         //2ms*500=1s
  372.                 {
  373.                         time=0;
  374.                  }                        
  375.                    }
  376.                
  377.                 case 2:
  378.                 if(flag==0)
  379.                 {
  380.                 if(time<250)
  381.                  {
  382.             val[0]=shi/10;
  383.                 val[1]=shi%10;
  384.                 val[3]=fen/10;
  385.                 val[4]=fen%10;               
  386.                 val[6]=miao/10;
  387.                 val[7]=miao%10;                        
  388.                  }
  389.                 else if(time<500)
  390.                  {
  391.             val[0]=shi/10;
  392.                 val[1]=shi%10;
  393.                 val[3]=11;
  394.                 val[4]=11;               
  395.                 val[6]=miao/10;
  396.                 val[7]=miao%10;                                            
  397.                  }
  398.                 else if(time>500)
  399.                  {
  400.                         time=0;
  401.                  }
  402.         }
  403.         else if(flag==1)
  404.         {               
  405.                 if(time<250)             //2ms*250=0.5s
  406.                 {                        
  407.             val[2]=year/10;                 //年的十位部分
  408.                 val[3]=year%10;             //年的個位部分
  409.                 val[4]=month/10;             //月的十位部分
  410.                 val[5]=month%10;                 //月的個位部分
  411.                 val[6]=day/10;             //天的十位部分
  412.                 val[7]=day%10;                 //天的個位部分
  413.                  }
  414.                 else if(time<500)         //2ms*500=1s        /數在閃爍        
  415.                 {
  416.                      val[2]=year/10;
  417.                         val[3]=year%10;        
  418.                         val[4]=11;
  419.                         val[5]=11;
  420.                         val[6]=day/10;
  421.                         val[7]=day%10;               
  422.                  }
  423.                  else if(time>500)         //2ms*500=1s
  424.                 {
  425.                         time=0;
  426.                  }
  427.                  }//if(flag==1)的else的括號

  428.          //時鐘修改后顯示  其中時鐘部分在閃爍
  429.                  case 3:
  430.                  if(flag==0)
  431.                  {
  432.                  if(time<250)
  433.                         {
  434.                 val[0]=shi/10;
  435.                 val[1]=shi%10;
  436.                 val[3]=fen/10;
  437.                 val[4]=fen%10;               
  438.                 val[6]=miao/10;
  439.                 val[7]=miao%10;                                
  440.                         }
  441.                 else if(time<500)
  442.                  {
  443.                 val[0]=11;
  444.                 val[1]=11;
  445.                 val[3]=fen/10;
  446.                 val[4]=fen%10;               
  447.                 val[6]=miao/10;
  448.                 val[7]=miao%10;                                          
  449.                  }
  450.                 else if(time>500)
  451.                  {
  452.                  time=0;
  453.                  }
  454.                  }
  455.         else if(flag==1)
  456.         {               
  457.                 if(time<250)             //2ms*250=0.5s
  458.                 {                        
  459.             val[2]=year/10;                 //年的十位部分
  460.                 val[3]=year%10;             //年的個位部分
  461.                 val[4]=month/10;             //月的十位部分
  462.                 val[5]=month%10;                 //月的個位部分
  463.                 val[6]=day/10;             //天的十位部分
  464.                 val[7]=day%10;                 //天的個位部分
  465.                  }
  466.                 else if(time<500)         //2ms*500=1s        /天數在閃爍        
  467.                 {
  468.                      val[2]=11;
  469.                         val[3]=11;        
  470.                         val[4]=month/10;
  471.                         val[5]=month%10;
  472.                         val[6]=day/10;
  473.                         val[7]=day%10;               
  474.                  }
  475.                  else if(time>500)         //2ms*500=1s
  476.                 {
  477.                         time=0;
  478.                  }
  479.                  break;
  480.                  }
  481.                 }
  482.                  }
  483.          }
復制代碼
回復

使用道具 舉報

ID:584814 發表于 2021-6-23 08:56 | 顯示全部樓層
只添加新代碼,不修改舊代碼,沒可能實現。
你可以先將流程圖修改一下,然后照著改動的部分修改代碼就可以。
如果這個本就某一個寶來的,可以直接找售后。
PS:主函數要精練才更容易讀,相關各部分可以寫成相應功能的函數進行調用。
回復

使用道具 舉報

ID:123289 發表于 2021-6-23 10:32 | 顯示全部樓層
以為“代碼”能搞定一切,本身說是個誤區!
如同,想畫一根竹子,胸中有竹才行。
你要構思一下:
1、如何顯示日歷;把它做成一個函數A。
2、如何顯示時間;把它做成一個函數B。
3、如何搞定一個5秒的定時,每次定時到來時將F求反一下。F=1就調A,F=0就調B。
這樣做你認為行不行。
至于如此添加到你的程序中,也很容易:
1、將上述功能程序添加到你原來程序的任意位置都可以。
2、記。簞h除你原來的程序。
回復

使用道具 舉報

ID:332444 發表于 2021-6-23 13:32 | 顯示全部樓層
錄像43_轉.gif
無標題.png
回復

使用道具 舉報

ID:824490 發表于 2021-6-23 14:02 | 顯示全部樓層
while(1)//大循環
{
。。
if (miao%10<5) LED_display_clock();//前5秒顯示時鐘
else LED_display_date();//后5秒顯示日期
。。
}

就這么簡單。自己去磊代碼去。。
回復

使用道具 舉報

ID:332444 發表于 2021-6-23 17:14 | 顯示全部樓層
4個按鍵:啟停,選擇(1年2月3天4時5分6秒7歸零調節)
回復

使用道具 舉報

ID:941485 發表于 2021-6-23 18:28 | 顯示全部樓層
在二者之間加個延遲代碼
回復

使用道具 舉報

ID:332444 發表于 2021-6-24 09:15 | 顯示全部樓層
4個按鍵:
1切換與確定
2調節功能選擇1年2月3天4時5分6秒7歸零8恢復
3數值+
4數值-
1.gif
回復

使用道具 舉報

ID:332444 發表于 2021-6-24 09:16 | 顯示全部樓層
整個程序也就144行左右,看起來多清爽.
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产农村妇女毛片精品久久麻豆 | 韩国久久| 亚洲高清免费视频 | 国产精品国产馆在线真实露脸 | 又黄又爽的网站 | 偷拍自拍第一页 | 日本精品一区 | 99在线国产 | 国产精品成人一区二区三区 | 成人精品久久久 | 久久精品久久精品 | 国产精品1区2区 | 久久91精品国产一区二区三区 | 亚洲巨乳自拍在线视频 | 欧美一区二区三区在线看 | 国产一区二区三区免费视频 | 成人亚洲 | 中文亚洲字幕 | 亚洲第一av | 五月天国产 | 国产1区 | 亚卅毛片 | 51ⅴ精品国产91久久久久久 | 日韩视频区 | 亚洲国产一区二区三区 | 亚洲第一女人av | av大片在线观看 | 日韩精品久久久久久 | 亚洲一区在线播放 | 欧美国产精品 | 麻豆av片 | 日韩一级黄色毛片 | 日本精品一区二区 | 欧美精品1区2区3区 精品国产欧美一区二区 | 福利av在线 | 久久久国产一区二区三区 | 国产欧美一区二区在线观看 | 天天拍夜夜爽 | 日韩精品一区二区三区四区 | 日韩欧美精品 | 亚洲国产成人精品久久久国产成人一区 |