欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 不明白這段單片機程序中的jishu2是做什么用的? [打印本頁]

作者: 503706606    時間: 2019-1-3 09:59
標題: 不明白這段單片機程序中的jishu2是做什么用的?
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar  unsigned char
  4. #define uint  unsigned int

  5. sbit  beer=P1^5;
  6. //按鍵加減時分秒
  7. sbit   jk1=P3^0;
  8. sbit   jk2=P3^1;
  9. sbit   jk3=P3^2;
  10. sbit   jk4=P3^3;

  11. //--定義使用的IO--,也就是譯碼器的3個輸入端//
  12. #define GPIO_DIG P0
  13. sbit LSA=P2^2;
  14. sbit LSB=P2^3;
  15. sbit LSC=P2^4;

  16. //顯示時間,初始狀態(tài)
  17. uint h=00;
  18. uint min=00;
  19. uint miao=00;

  20. uint hx=13;
  21. uint minx=0;
  22. uint miaox=0;



  23. //計數(shù)器計時
  24. uint jishu1=0;
  25. uint jishu2=0;
  26. uint jishu3=0;
  27. uint bzb=0;
  28. uint  moshi=0        ;//時間設(shè)置
  29. uint  moshin=0;//鬧鐘設(shè)置

  30. //共陰極/*0,1,2,3,4,5,6,7,8,9,*/
  31. uchar code SEG7[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x50,0x78,};
  32. uchar gang=0x40;
  33. //顯示緩沖
  34. uchar num[]={0,0,0,0,0,0,0,0};
  35.          
  36. //延時函數(shù)ms
  37. void _delay_ms(uint i)
  38. {
  39.   uchar j;
  40.   for(;i>0;i--)
  41.   {
  42.    for(j=0;j<120;j++);
  43.   }
  44. }
  45. //延時函數(shù)us
  46. void _delay_us(uchar i)
  47. {
  48.    for(;i>0;i--){;}
  49. }


  50. //使用數(shù)碼管顯示
  51. void display()
  52. {
  53.         unsigned char i;
  54.         unsigned int j;
  55.         for(i=0;i<8;i++)
  56.         {
  57.                 switch(i)         //位選,選擇點亮的數(shù)碼管,
  58.                 {
  59.                         case(7):
  60.                                 LSA=0;LSB=0;LSC=0; break;//顯示第0位
  61.                         case(6):
  62.                                 LSA=1;LSB=0;LSC=0; break;//顯示第1位
  63.                         case(5):
  64.                                 LSA=0;LSB=1;LSC=0; break;//顯示第2位
  65.                         case(4):
  66.                                 LSA=1;LSB=1;LSC=0; break;//顯示第3位
  67.                         case(3):
  68.                                 LSA=0;LSB=0;LSC=1; break;//顯示第4位
  69.                         case(2):
  70.                                 LSA=1;LSB=0;LSC=1; break;//顯示第5位
  71.                         case(1):
  72.                                 LSA=0;LSB=1;LSC=1; break;//顯示第6位
  73.                         case(0):
  74.                                 LSA=1;LSB=1;LSC=1; break;//顯示第7位        
  75.                 }
  76.                 GPIO_DIG=num[i];//發(fā)送段碼
  77.                 j=70;                                   //掃描間隔時間設(shè)定
  78.                 while(j--);
  79.                 GPIO_DIG=0x00;//消隱
  80.         }
  81. }

  82. void beerc()//鬧鐘響
  83. {
  84. beer=1; _delay_ms(30);_delay_us(30);beer=0;
  85. }
  86. //顯示數(shù)據(jù)處理
  87. void  shuju()
  88. {
  89. if((moshi==0)&&(moshin==0))
  90. {
  91.   //載入數(shù)碼管顯示當前時間
  92.   num[0]=SEG7[h%100/10];
  93.   num[1]=SEG7[h%10]&0x7f;
  94.   num[2]=0x40;//顯示橫桿  美觀作用
  95.   num[3]=SEG7[min%100/10];
  96.   num[4]=SEG7[min%10]&0x7f;
  97.   num[5]=0x40;
  98.   num[6]=SEG7[miao%100/10];
  99.   num[7]=SEG7[miao%10];
  100.   }
  101. if(moshi==1)
  102. {
  103.   //載入數(shù)碼管顯示設(shè)置時
  104.   if(jishu2<10)num[0]=SEG7[h%100/10];  else  num[0]=0;
  105.   if(jishu2<10)num[1]=SEG7[h%10]; else  num[1]=0;
  106.   num[2]=0x40;
  107.   num[3]=SEG7[min%100/10];
  108.   num[4]=SEG7[min%10]&0x7f;
  109.   num[5]=0x40;
  110.   num[6]=SEG7[miao%100/10];
  111.   num[7]=SEG7[miao%10];
  112.   }
  113. if(moshi==2)
  114. {
  115.   //載入數(shù)碼管顯示設(shè)置分
  116.   num[0]=SEG7[h%100/10];
  117.   num[1]=SEG7[h%10]&0x7f;
  118.   num[2]=0x40;
  119.   if(jishu2<10)num[3]=SEG7[min%100/10];        else  num[3]=0;
  120.   if(jishu2<10)num[4]=SEG7[min%10];        else  num[4]=0;
  121.   num[5]=0x40;
  122.   num[6]=SEG7[miao%100/10];
  123.   num[7]=SEG7[miao%10];
  124.   }
  125. if(moshi==3)
  126. {
  127.   //載入數(shù)碼管顯示設(shè)置秒
  128.   num[0]=SEG7[h%100/10];
  129.   num[1]=SEG7[h%10]&0x7f;
  130.   num[2]=0x40;
  131.   num[3]=SEG7[min%100/10];
  132.   num[4]=SEG7[min%10]&0x7f;
  133.   num[5]=0x40;
  134.   if(jishu2<10)num[6]=SEG7[miao%100/10];else  num[6]=0;
  135.   if(jishu2<10)num[7]=SEG7[miao%10];           else  num[7]=0;
  136.   }

  137. if(moshin==1)
  138. {
  139.   //載入數(shù)碼管顯示設(shè)置時
  140.   if(jishu2<10)num[0]=SEG7[hx%100/10];  else  num[0]=0;
  141.   if(jishu2<10)num[1]=SEG7[hx%10];     else  num[1]=0;
  142.   num[2]=0x40;
  143.   num[3]=SEG7[minx%100/10];
  144.   num[4]=SEG7[minx%10];
  145.   num[5]=0x00;
  146.   num[6]=0x00;        
  147.   num[7]=0x00;        
  148.   beer=0;
  149.   }

  150.    if(moshin==2)
  151. {
  152.   //載入數(shù)碼管顯示設(shè)置分
  153.   num[0]=SEG7[hx%100/10];
  154.   num[1]=SEG7[hx%10]&0x7f;
  155.   num[2]=0x40;
  156.   if(jishu2<10)num[3]=SEG7[minx%100/10];        else  num[3]=0;
  157.   if(jishu2<10)num[4]=SEG7[minx%10]&0x7f;        else  num[4]=0;
  158.   num[5]=0x00;
  159.   num[6]=0x00;        
  160.   num[7]=0x00;  
  161.   beer=0;
  162.         
  163.   }

  164. }

  165. //按鍵處理函數(shù)
  166. void  key()
  167. {
  168.           //切換
  169.          if((jk1==0)&&(moshin==0)){moshi=(moshi+1)%4;beerc();while(jk1==0);}
  170.          if(moshi==1)
  171.          {
  172.            //判斷加小時按鍵是否按下
  173.            if(jk2==0){if(h<23)h=h+1;else h=0; while(jk2==0);}
  174.            //判斷減小時按鍵是否按下
  175.            if(jk3==0){if(h> 0)h=h-1;else h=23;while(jk3==0);}
  176.          }
  177.           if(moshi==2)
  178.          {
  179.            //判斷加分鐘按鍵是否按下
  180.            if(jk2==0){if(min<59)min=min+1;else min=0; while(jk2==0);}
  181.            //判斷減分鐘按鍵是否按下
  182.            if(jk3==0){if(min> 0)min=min-1;else min=59;while(jk3==0);}
  183.          }
  184.           if(moshi==3)
  185.          {
  186.            //判斷加秒鐘按鍵是否按下
  187.            if(jk2==0){if(miao<59)miao=miao+1;else miao=0; while(jk2==0);}
  188.            //判斷減秒鐘按鍵是否按下
  189.            if(jk3==0){if(miao> 0)miao=miao-1;else miao=59;while(jk3==0);}
  190.          }
  191.           //切換
  192.          if((jk4==0)&&(moshi==0)){moshin=(moshin+1)%3;beerc();while(jk4==0);}
  193.          //------------------------------
  194.          if(moshin==1)
  195.          {
  196.            //判斷加小時按鍵是否按下
  197.            if(jk2==0){if(hx<23)hx=hx+1;else hx=0; while(jk2==0);}
  198.            //判斷減小時按鍵是否按下
  199.            if(jk3==0){if(hx> 0)hx=hx-1;else hx=23;while(jk3==0);}
  200.          }
  201.           if(moshin==2)
  202.          {
  203.            //判斷加分鐘按鍵是否按下
  204.            if(jk2==0){if(minx<59)minx=minx+1;else minx=0; while(jk2==0);}
  205.            //判斷減分鐘按鍵是否按下
  206.            if(jk3==0){if(minx> 0)minx=minx-1;else minx=59;while(jk3==0);}
  207.          }


  208. }
  209. //主函數(shù)-
  210. void main(void)   
  211.    {         
  212.    P1=0X0F;
  213.    //-------定時器0配置
  214.    TMOD=0x01;
  215.    //使能定時器0 ,打開中斷
  216.    ET0=1;
  217.    //定時器的初值
  218.    TH0=(65536-50000)/256;
  219.    TL0=(65536-50000)%256;
  220.    //啟動啟定時器0
  221.    TR0=1;
  222.   //開總中斷
  223.   EA=1;           
  224.   beer=0;
  225.     while(1)
  226.         {
  227.          shuju();        //顯示數(shù)據(jù)處理
  228.          display(); //顯示子函數(shù)  
  229.          key(); //-按鍵處理
  230.         }
  231.    }
  232. //定時器中斷計時                 
  233. void  Time0() interrupt 1
  234.   {
  235.   //重裝初值50ms;
  236.   TH0=(65536-50000)/256;  
  237.   TL0=(65536-50000)%256;

  238.   //時間緩沖+1;
  239.   if((moshi==0))jishu1=jishu1+1;
  240.   if(jishu1>=20) //判斷是否到達一秒
  241.   {
  242.     jishu1=0;
  243.         miao++;
  244.         //判斷到達60s
  245.     if(miao>59)
  246.     {//分鐘加1
  247.      min++;
  248.          miao=0;
  249.          //判斷到達60分
  250.      if(min>59)
  251.          {//小時加1
  252.           h=h+1;
  253.           min=0;
  254.          }
  255.          if(h==24)h=0;

  256.     }         
  257.         if((h==hx)&&(min==minx)&&(miao==miaox)) bzb=1;

  258.    }

  259.    if((moshi>0)||(moshin>0))jishu2=(jishu2+1)%20;
  260.    //鬧鐘
  261.    if((bzb==1))
  262.    {
  263.      jishu3=jishu3+1;
  264.       beer=!beer;
  265.      if(jishu3>200)
  266.       {
  267.              jishu3=0;bzb=0;beer=0;
  268.       }
  269.     }


  270. }
復(fù)制代碼

作者: 503706606    時間: 2019-1-3 10:00
  if((moshi>0)||(moshin>0))jishu2=(jishu2+1)%20;   這段是什么意思  作用是啥呢
作者: diy1997    時間: 2019-1-3 12:50
503706606 發(fā)表于 2019-1-3 10:00
if((moshi>0)||(moshin>0))jishu2=(jishu2+1)%20;   這段是什么意思  作用是啥呢

if((moshi>0)||(moshin>0))   表達式中,moshi>0 ,moshin>0 ,

只要其中有一個成立,就執(zhí)行jishu2=(jishu2+1)%20;

與之相對的是&&: if((moshi>0)&&(moshin>0))要全部成立,才會執(zhí)行jishu2=(jishu2+1)%20;
作者: weidoit    時間: 2019-1-7 20:18


jishu2,計數(shù)20詞為20x50ms=1000ms 即1秒

以10為分界,半秒顯示“X”,半秒顯示“0”,閃爍效果
作者: weidoit    時間: 2019-1-7 20:25
503706606 發(fā)表于 2019-1-3 10:00
if((moshi>0)||(moshin>0))jishu2=(jishu2+1)%20;   這段是什么意思  作用是啥呢




當處在 時間設(shè)置模式,或者鬧鐘設(shè)置模式的情況下

jishu2  每50ms 計數(shù)值+1,然后對20取余數(shù)(計數(shù)范圍0-19)





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1