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

標題: 單片機計數器 寫一個循環程序,求思路 [打印本頁]

作者: 20010410    時間: 2021-6-16 12:04
標題: 單片機計數器 寫一個循環程序,求思路
計數器模擬。

要求: (1)計數器有3個控制按鈕1號、2號、3號,1個計數按鈕A。

(2)按完1號按鈕,再按A鈕,計數暑進入加計數狀態,最大計到(5+組號) 2, 時間間隔為0.5s。

按完2號按鈕后,再按A按鈕,計數器進入減計數狀態,從(5+組號) 2開始減計數,時間、間隔為0.5s.

按完3號按鈕后,再按A按鈕,計數器保持顯示“Pp”字樣。



另外 :要求按下任意一個按鈕時,都會從頭計數

問一下各位大神怎么寫循環程序?
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit P10=P1^0;
  5. sbit P11=P1^1;
  6. sbit P12=P1^2;
  7. sbit P13=P1^3;
  8. uchar segcode[]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};   
  9. uchar bitcode[]={0x01,0x02};

  10. uchar keycode1,keycode2;
  11. unsigned char Num[2];   
  12. void delayms(uint m)      
  13. {
  14. unsigned int n;
  15.         while(m--)
  16.         {
  17.                 for(n=0;n<113;n++);
  18.         }
  19. }
  20. void numobuf(int i)
  21. {
  22.          Num[1]=i/10;
  23.          Num[0]=i%10;
  24. }
  25. void display(void)
  26. {
  27.         unsigned int i;
  28.         for(i=0;i<2;i++)
  29.                 {
  30.                         P2=bitcode[i];
  31.                         P0=segcode[Num[i]];
  32.                         delayms(1);
  33.                 }
  34.         
  35. }
  36. void display2(void)
  37. {
  38.         unsigned int i;
  39.         for(i=0;i<2;i++)
  40.                 {
  41.                         P2=bitcode[i];
  42.                         P0=0x73;
  43.                         delayms(1);
  44.                 }
  45.         
  46. }




  47. uchar keyscan1(void)
  48. {
  49.         keycode1=0;
  50.         if(P10==0)
  51.         {
  52.                 delayms(10);
  53.                 if(P10==0)
  54.                 {
  55.                         while(P10==0);
  56.                         keycode1=1;
  57.                 }
  58.         }
  59.         if(P11==0)
  60.         {
  61.                 delayms(10);
  62.                 if(P11==0)
  63.                 {
  64.                         while(P11==0);
  65.                         keycode1=2;
  66.                 }
  67.         }
  68.         if(P12==0)
  69.         {
  70.                 delayms(10);
  71.                 if(P12==0)
  72.                 {
  73.                         while(P12==0);
  74.                         keycode1=3;
  75.                 }
  76.         }
  77.         return keycode1;
  78. }
  79. uchar keyscan2(void)
  80. {
  81.         keycode2=0;
  82.         if(P13==0)
  83.         {
  84.                 delayms(10);
  85.                 if(P13==0)
  86.                 {
  87.                         while(P13==0);
  88.                         keycode2=1;
  89.                 }
  90.         }

  91.         return keycode2;
  92. }

  93. main()
  94. {
  95.         int a=0;
  96.         int i=0;
  97.         int j=0;
  98.         while(1)
  99.         {
  100.                 P0=segcode[0];
  101.                 keycode1=0;
  102.                 keycode2=0;
  103.                 a=keyscan1();
  104.                 if(a==1)
  105.                 {
  106.                         
  107.                         while(keyscan2()==0);
  108.                         for(i=0;i<36;i++)
  109.                         {
  110.                                 for(j=0;j<25;j++)
  111.                                 {        
  112.                                         numobuf(i);
  113.                                         display();
  114.                                         delayms(10);
  115.                                 }
  116.                         }
  117.                         
  118.                 }
  119.                 if(a==2)
  120.                 {
  121.                         while(keyscan2()==0);
  122.                         for(i=36;i>0;i--)
  123.                         {
  124.                                 for(j=0;j<25;j++)
  125.                                 {        
  126.                                 numobuf(i);
  127.                                 display();
  128.                                 delayms(10);
  129.                                 }
  130.                         }
  131.                         
  132.                 }
  133.                 if(a==3)
  134.                 {
  135.                         while(keyscan2()==0);
  136.                         while(1)
  137.                         {
  138.             
  139.                                 display2();
  140.                                 delayms(1);
  141.                         }        
  142.                 }
  143.         
  144.         }

  145. }
復制代碼

7072FAB6-A754-4038-A710-8ED1A3A946C2.jpeg (1.16 MB, 下載次數: 51)

7072FAB6-A754-4038-A710-8ED1A3A946C2.jpeg

作者: xunzhaod    時間: 2021-6-17 16:05
給你一個思路,定義三個標志位,分別對應計數1,2,3.比如按下按鍵1,再按下按鍵a,flag1 =1;
在主循環判斷
if(flag1==1)
{
     數據清零;
     開始計數
}
if(flag2==1)
{
     數據清零;
     開始計數
}




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