找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2494|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机数码管秒表Proteus仿真 可设定计时时间的程序

[复制链接]
跳转到指定楼层
楼主
51+数码管秒表可设定计时时间的程序
1》复位与启动键:在任何模式下按此键回到初始化状态等待计数或减数状态。
2》调参数:在任何模式下按复位与启动按钮,先回到初始化状态,再按键后。通过ADD键及SUB键调整计数参数
3》ADD与SUB键:按下复位键后或程序在初始状态下按此键进入计数或减数状态。
注意:仿真时请将程序里WELA的变量H=0  L=1,开发板试验请将变量H=1  L=0;
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. //***定时计数器***C程序***//

  2. #include<reg52.h>
  3. #include<intrins.h>

  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. #define FOSC 11059200L //晶振设置,默认使用11.0592M Hz
  7. //#define FOSC 12000000L //晶振设置,使用12M Hz
  8. //#define FOSC 24000000L //晶振设置,使用24M Hz

  9. #define TIME_MS 50 //设定定时时间 ms ,在11.0592M晶振下,不易超过60ms
  10. #define LED_PORT P0

  11. //数码管管脚定义:
  12. sbit wela_1 = P2^0;                                                                                         
  13. sbit wela_2 = P2^1;
  14. sbit wela_3 = P2^2;
  15. sbit wela_4 = P2^3;
  16. sbit wela_5 = P2^4;                                                                                         
  17. sbit wela_6 = P2^5;
  18. sbit wela_7 = P2^6;
  19. sbit wela_8 = P2^7;

  20. //IO接口定义
  21. sbit Key=P3^0;          //计数启动和复位键
  22. sbit Key1=P3^1;          //调参数按键                                                                                                                                             
  23. sbit Key2=P3^4;          //递增计数启动键
  24. sbit Key3=P3^5;          //递减计数启动键

  25. sbit buzzer=P3^7; //蜂鸣器
  26. sbit relay=P3^1;  //继电器

  27. //定义全局变量定义
  28. uchar count,num,num1,num2,num3,num4=0,num5=0,num6=0,num7,H=0,L=1,i; //变量H L表示0或1表示数码管位的开启需要不同的高低电平。实际和仿真电平相反。
  29. uchar M1,M2,M3,M4,M5,M6,K1,K2,K3,K4,K5,K6,K7,K8;
  30. uint ss,temp,temp2=5,temp10,temp20,temp30,temp40,temp50,temp60;
  31. short temp1=0;
  32. uint num10=100;
  33. //LED显示字模 0-F 共阳模式
  34. unsigned code table0[]={0Xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //不带小数点段码
  35. unsigned code table1[]={0X40,0x79,0x24,0x30,0x19,0x12,0x2,0x78,0x0,0x10,0x8,0x3,0x46,0x21,0x6,0x5,0x3f};  //带小数点段码

  36. //共阴极
  37. //unsigned code table0[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};

  38. //子程序声明。
  39. void LEDdisplay(unsigned int num);
  40. void LEDdisplay_1();
  41. void LEDdisplay_2();
  42. void LEDdisplay_3();
  43. void KEY();
  44. void KEY_1();
  45. void SUB();
  46. void ADD();
  47. void Keyscan();
  48. void Keyscan_ADD();
  49. void Keyscan_SUB();

  50. void buzze1();
  51. void buzze3();


  52. /*******************************************************************************
  53. * 函 数 名 :Delayms
  54. * 函数功能 :实现 ms级的延时函数
  55. * 输    入 :ms
  56. * 输    出 :无
  57. *******************************************************************************/
  58. void delayms(unsigned int ms)
  59. {
  60.         unsigned int i,j;
  61.         for(i=0;i<ms;i++)
  62.         #if FOSC == 11059200L
  63.                 for(j=0;j<114;j++);
  64.         #elif FOSC == 12000000L
  65.           for(j=0;j<123;j++);
  66.         #elif FOSC == 24000000L
  67.                 for(j=0;j<249;j++);
  68.         #else
  69.                 for(j=0;j<114;j++);
  70.         #endif
  71. }
  72. /*******************************************************************************
  73. * 函 数 名 :Timer0Init
  74. * 函数功能 :定时器0初始化
  75. * 输    入 :无
  76. * 输    出 :无
  77. *******************************************************************************/
  78. void Timer0Init()
  79. {
  80.         TMOD=0x01; //设置定时器0工作方式为1
  81.         TH0=(65536-FOSC/12/1000*TIME_MS)/256;
  82.         TL0=(65536-FOSC/12/1000*TIME_MS)%256;
  83.         ET0=1; //开启定时器0中断
  84.         TR0=1;        //开启定时器        
  85.         EA=1;  //打开总中断
  86. }

  87. void Timer0Int() interrupt 1
  88. {
  89.         TH0=(65536-FOSC/12/1000*TIME_MS)/256;
  90.         TL0=(65536-FOSC/12/1000*TIME_MS)%256;
  91.         count++;
  92.         num1++;
  93.         num2++;
  94.         num3++;
  95.         num7++;
  96.         if(count==10)         //100ms
  97.         {
  98.            count=0;
  99.          KEY();
  100.          KEY_1();
  101.          temp30=temp20;
  102.         }
  103.          if(num3==22)                    //if(num3==22)
  104.         {
  105.           num3=0;
  106.          if(K5==1)          //加计数开关按下
  107.          {
  108.           if(temp30==0)
  109.          {
  110.             temp1=temp1+1;
  111.           buzze1();
  112.       if(temp1==temp40)
  113.          {
  114.           K5=0;
  115.           //temp1=0;
  116.           temp40=num10;
  117.          //LEDdisplay_2();
  118.      }
  119.           }
  120.         else if(temp30!=0)
  121.         {
  122.          temp1=temp1+1;
  123.          buzze1();
  124.          if(temp1==temp30)
  125.          {
  126.           //temp1=0;
  127.           K5=0;  
  128.           buzze3();
  129.           //LEDdisplay_2();         
  130.      }
  131.          }
  132.    }
  133.          if(K6==1&&temp30==0)          //减计数开关打开与temp30==0;
  134.          {
  135.           temp1=temp40--;         //那么用99秒减
  136.           buzze1();
  137.           if(temp1<0)             //temp1==0;的时候退出程序。
  138.          {
  139.           K6=0;
  140.           temp1=0;
  141.           temp40=num10;                    //////////////////////////
  142.           buzze3();
  143.           LEDdisplay_2();  
  144.      }                        
  145.          }                                          ///////////////////////////////////////////////////////////////////////
  146.      if(K6==1&&temp30!=0&&num6==0)         //如果temp30大于0说明有参数调整
  147.          {
  148.           temp50=temp30;
  149.           num6=1;
  150.           }
  151.          if(K6==1&&num6==1)
  152.           {
  153.           temp1=temp50--;         //按设定后的参数秒减时间 //////////////////////////////
  154.           buzze1();                         /////////////////////////////////////////////////////////////////////////
  155.           if(temp1<0)             //temp1==0;的时候退出程序。
  156.          {
  157.           K6=0;
  158.           temp1=0;
  159.           num6=0;
  160.           buzze3();
  161.           LEDdisplay_2();  
  162.      }                                 
  163.     }                        
  164.    }
  165.         if(num2==40)           //数码管闪烁中断时间
  166.         {
  167.          K8=1;
  168.          num2=0;
  169.          }
  170.         if(num7==100)
  171.         {
  172.      K7=1;
  173.      num7=0;
  174.         }
  175. }


  176. void main()
  177. {
  178.    EX0=1;
  179.    IT0=1;
  180.    Timer0Init();
  181.    temp40=num10;
  182.     while(1)
  183.    {
  184.      
  185.      LEDdisplay_1();
  186.          if(Key!=1)
  187.          {
  188.           temp1=0;                    //中途退出加计数,计数归零。
  189.           buzze3();
  190.            break;
  191.          }
  192.     }        
  193.          while(1)                                     //11111
  194.          {
  195.          
  196.           LEDdisplay(temp1);                 //显示“0”等待选择加减计数模式。
  197.           if(!Key2||!Key3)
  198.           {
  199.             if(!Key2)
  200.            {
  201.                 K5=1;
  202.             }
  203.             if(!Key3)
  204.             {
  205.                   K6=1;
  206.             }
  207.           break;
  208.           }
  209.         }
  210.           ADD();
  211.           SUB();
  212. }
  213. /*******************************************************************************
  214. * 函 数 名 :LEDdisplay
  215. * 函数功能 :循环显示各个位上的数据
  216. * 输    入 :num 需要显示的数据
  217. * 输    出 :无
  218. *******************************************************************************/
  219. void LEDdisplay(unsigned int num)
  220. {
  221.         unsigned char qian,bai,shi,ge;
  222.         qian=num/1000;
  223.         bai=num%1000/100;
  224.         shi=num%100/10;
  225.         ge=num%10;

  226.         wela_1 = H;          //关闭所有数码管
  227.         wela_2 = H;          //用软件仿真时关闭数码管全部改为0,单片机下载改为1.
  228.         wela_3 = H;
  229.         wela_4 = H;        
  230.         wela_5 = H;         
  231.         wela_6 = H;
  232.         wela_7 = H;
  233.         wela_8 = H;        

  234.         if(qian<=0)
  235.         {
  236.         wela_4=L;  //不显示千位
  237.         LED_PORT=0XFF;
  238.         delayms(1);
  239.         LED_PORT = 0xff;
  240.         wela_4=H;  
  241.         }
  242.         if(qian>=1)
  243.         {
  244.     if(M1!=1)
  245.         {
  246.         wela_4=L;  //显示千位
  247.         LED_PORT=table0[qian];
  248.         delayms(2);
  249.         LED_PORT = 0xff;
  250.         wela_4=H;
  251.         num=0;
  252.         }

  253.         else if(num2==38)
  254.         {
  255.         wela_4=L;  //显示千位
  256.         LED_PORT=table0[qian];
  257.         delayms(2);
  258.         LED_PORT = 0xff;
  259.         wela_4=H;
  260.         num=0;
  261.         }
  262.    }
  263.     if(qian>=1||bai>=1)
  264.         {
  265.         if(M2!=1)
  266.         {
  267.         wela_3=L;  //显示百位
  268.         LED_PORT=table1[bai];
  269.         delayms(2);
  270.         LED_PORT = 0xff;
  271.         wela_3=H;
  272.         }
  273.         
  274.         else if(num2==38)
  275.         {
  276.         wela_3=L;  //显示百位
  277.         LED_PORT=table1[bai];
  278.         delayms(2);
  279.         LED_PORT = 0xff;
  280.         wela_3=H;
  281.         }
  282.    }
  283.     if(qian>=1||shi>=1||bai>=1)
  284.         {
  285.         if(M3!=1)
  286.         {
  287.         wela_2=L;  //显示十位
  288.         LED_PORT=table0[shi];
  289.         delayms(2);
  290.         LED_PORT = 0xff;
  291.         wela_2=H;
  292.         }
  293.         else if(num2==38)
  294.         {
  295.         wela_2=L;  //显示十位
  296.         LED_PORT=table0[shi];
  297.         delayms(2);
  298.         LED_PORT = 0xff;
  299.         wela_2=H;
  300.          }
  301.         }
  302.     if(M4!=1)
  303.         {
  304.         wela_1=L;  //显示个位
  305.         LED_PORT=table1[ge];
  306.         delayms(2);
  307.         LED_PORT = 0xff;
  308.     }
  309.         else if(num2==38)
  310.         {
  311.         wela_1=L;  //显示个位
  312.         LED_PORT=table1[ge];
  313.         delayms(2);
  314.         LED_PORT = 0xff;
  315.         }
  316.   }               


  317. void LEDdisplay_1()        //显示-ON-
  318. {  
  319.     uchar a;
  320.            wela_1 = H;          //关闭所有数码管
  321.         wela_2 = H;          //用软件仿真时关闭数码管全部改为0,单片机下载改为1.
  322.         wela_3 = H;
  323.         wela_4 = H;        
  324.         wela_5 = H;         
  325.         wela_6 = H;
  326.         wela_7 = H;
  327.         wela_8 = H;        


  328.    for(a=0;a<8;a++)
  329.    {
  330.     buzze3();
  331.     }                                 
  332.     while(1)
  333.     {                                                         
  334.         wela_4=L;  //控制从右向左第4位显示
  335.         LED_PORT=0xbf;
  336.         delayms(1);
  337.         LED_PORT = 0xff;
  338.         wela_4=H;                                 
  339.         
  340.         wela_3=L;  //控制从右向左第3位显示
  341.         LED_PORT=0xc0;
  342.         delayms(1);
  343.         LED_PORT = 0xff;
  344.         wela_3=H;                                 
  345.                                                      
  346.         wela_2=L;  //控制从右向左第2位显示
  347.         LED_PORT=0xc8;
  348.         delayms(1);
  349.         LED_PORT = 0xff;
  350.     wela_2=H;        
  351.                                        
  352.         wela_1=L;  //控制从右向左第1位显示
  353.         LED_PORT=0xbf;
  354.         delayms(1);
  355.         LED_PORT = 0xff;
  356.         wela_1=H;
  357.         
  358.         if(Key!=1||!Key1)         //不管哪个为一就跳出
  359.         delayms(100);
  360.           if(Key!=1||!Key1)
  361.          {
  362.           buzze1();
  363.            break;
  364.      }        
  365.          
  366.    }  
  367. }

  368. void LEDdisplay_2()
  369. {        
  370.          while(1)
  371.                  {
  372.             wela_1=H;
  373.                         wela_4=H;
  374.                         wela_5=H;
  375.                         wela_6=H;
  376.                         wela_7=H;
  377.                         wela_8=H;

  378.                           wela_4=L;  //控制从右向左第4位显示-  字符
  379.                         LED_PORT=0xBF;
  380.                         delayms(1);
  381.                         LED_PORT = 0xff;
  382.                         wela_4=H;                                 

  383.                         wela_3=L;  //控制从右向左第3位显示 E 字符
  384.                         LED_PORT=0x86;
  385.                         delayms(1);
  386.                         LED_PORT = 0xff;
  387.                         wela_3=H;                                 
  388.                                     
  389.                 wela_2=L;  //控制从右向左第2位显示N 字符
  390.                         LED_PORT=0xC8;
  391.                         delayms(1);
  392.                         LED_PORT = 0xff;
  393.                         wela_2=H;        
  394.                         
  395.                         wela_1=L;  //控制从右向左第1位显示D 字符
  396.                         LED_PORT=0xA1;
  397.                         delayms(1);
  398.                         LED_PORT = 0xff;
  399.                         wela_1=H;

  400.                         KEY();

  401.                     if(num5==0)         //第二次按下开关 /////////////////////////////
  402.                         {
  403.                  buzze1();
  404.                          num5=0;
  405.                          break;
  406.                         }

  407.            }                        
  408. }

  409. void LEDdisplay_3(unsigned int num)
  410. {
  411.         unsigned char qian,bai,shi,ge;
  412.         qian=num/1000;
  413.         bai=num%1000/100;
  414.         shi=num%100/10;
  415.         ge=num%10;

  416.         wela_1 = H;          //关闭所有数码管
  417.         wela_2 = H;          //用软件仿真时关闭数码管全部改为0,单片机下载改为1.
  418.         wela_3 = H;
  419.         wela_4 = H;        
  420.         wela_5 = H;         
  421.         wela_6 = H;
  422.         wela_7 = H;
  423.         wela_8 = H;        
  424.   
  425.         wela_4=L;  //显示千位
  426.         LED_PORT=table0[qian];
  427.         delayms(2);
  428.         LED_PORT = 0xff;
  429.         wela_4=H;
  430.         num=0;

  431.         wela_3=L;  //显示百位
  432.         LED_PORT=table1[bai];
  433.         delayms(2);
  434.         LED_PORT = 0xff;
  435.         wela_3=H;

  436.         wela_2=L;  //显示十位
  437.         LED_PORT=table0[shi];
  438.         delayms(2);
  439.         LED_PORT = 0xff;
  440.         wela_2=H;
  441.   
  442.         wela_1=L;  //显示个位
  443.         LED_PORT=table1[ge];
  444.         delayms(2);
  445.         LED_PORT = 0xff;
  446.          
  447.   }               

  448. void LEDdisplay_4(unsigned int num)
  449. {
  450.         unsigned char qian,bai,shi,ge;
  451.         qian=num/1000;
  452.         bai=num%1000/100;
  453.         shi=num%100/10;
  454.         ge=num%10;

  455.         wela_1 = H;          //关闭所有数码管
  456.         wela_2 = H;          //用软件仿真时关闭数码管全部改为0,单片机下载改为1.
  457.         wela_3 = H;
  458.         wela_4 = H;        
  459.         wela_5 = H;         
  460.         wela_6 = H;
  461.         wela_7 = H;
  462.         wela_8 = H;        

  463.            if(M1==1)
  464.         {
  465.         wela_4=L;  //显示千位
  466.         LED_PORT=table0[qian];
  467.         delayms(2);
  468.         LED_PORT = 0xff;
  469.         wela_4=H;
  470.         }
  471.         
  472.         if(M2==1)
  473.         {
  474.         wela_3=L;  //显示百位
  475.         LED_PORT=table1[bai];
  476.         delayms(2);
  477.            LED_PORT = 0xff;
  478.         wela_3=H;
  479.           }

  480.         if(M3==1)
  481.         {
  482.         wela_2=L;  //显示十位
  483.         LED_PORT=table0[shi];
  484.         delayms(2);
  485.         LED_PORT = 0xff;
  486.         wela_2=H;
  487.         }
  488.         if(M4==1)
  489.         {
  490.         wela_1=L;  //显示个位
  491.         LED_PORT=table1[ge];
  492.         delayms(2);
  493.         LED_PORT = 0xff;
  494.         }
  495.   }               




  496. void KEY()
  497. {
  498.   if(!Key)
  499.   delayms(20);
  500.   if(!Key)
  501.   {
  502.    num5=num5+1;
  503.    if(num5==3)
  504.    num5=0;
  505.    while(!Key);
  506.    }
  507.   switch(num5)
  508.   {        
  509.    case 1:  K1=0;
  510.                         break;
  511.    case 2:  K1=1;
  512.                         break;
  513.    case 3:  K1=0;
  514.             num5=0;
  515.                     break;
  516.   }
  517. }


  518. void KEY_1()
  519. {
  520.   if(!Key1)
  521.   delayms(20);
  522.   if(!Key1)
  523.   {
  524.    num5=num5+1;
  525.    while(!Key1);
  526.    }
  527.   switch(num5)
  528.   {        
  529.    case 1:  K2=0;
  530.                         break;
  531.    case 2:  K2=1;
  532.                     break;
  533.    case 3:  K2=0;
  534.             num5=0;
  535.                     break;
  536.   }
  537. }


  538. void INT0_Srv() interrupt 0          //外部中断0,开始设置
  539. {           
  540.   while(1)
  541.   {
  542.    LEDdisplay_3(temp);
  543.    if(!Key)                     //**************************************
  544.    {
  545.     break;
  546.         }
  547.    }
  548.    while(1)                                  //***************************************
  549.    {
  550.         Keyscan();                    
  551.     Keyscan_ADD();
  552.     Keyscan_SUB();
  553.         LEDdisplay_4(temp);
  554.         if(M5==1)                     //****************************************
  555.         {
  556.         
  557.          M1=0;
  558.          M2=0;
  559.          M3=0;
  560.          M4=0;
  561.          M5=0;
  562.          temp20=temp10;
  563.          break;
  564.         }
  565.    }                            //*******************************************
  566. }


  567. void Keyscan()
  568. {
  569.   if(!Key)
  570.   delayms(50);
  571.   if(!Key)
  572.   {
  573.    num4=num4+1;
  574.    if(num4==6)
  575.    num4=0;
  576.    while(!Key);
  577.    }
  578.    switch(num4)
  579.    {
  580.     case 0: M1=0;
  581.                 M2=0;
  582.                         M3=0;
  583.                         M4=0;
  584.                         M5=0;
  585.                         num4=0;
  586.                         M5=1;
  587.                         break;

  588.     case 1: M1=1;
  589.                 M2=0;
  590.                         M3=0;
  591.                         M4=0;
  592.                         break;

  593.         case 2: M1=0;
  594.                 M2=1;
  595.                         M3=0;
  596.                         M4=0;
  597.                 break;

  598.            case 3: M1=0;
  599.                 M2=0;
  600.                         M3=1;
  601.                         M4=0;
  602.                 break;

  603.         case 4: M1=0;
  604.                 M2=0;
  605.                         M3=0;
  606.                         M4=1;
  607.                 break;

  608.         case 5: M1=1;
  609.                 M2=1;
  610.                         M3=1;
  611.                         M4=1;
  612.                         break;
  613.     }
  614. }

  615. void Keyscan_ADD()
  616. {
  617.   if(!Key2)
  618.   delayms(20);
  619.   if(!Key2)
  620.   {
  621.    if(M1==1)
  622.    {
  623.     temp=temp+1000;        
  624.    }
  625.    else if(M2==1)
  626.    {
  627.     temp=temp+100;
  628.    }
  629.    else if(M3==1)
  630.    {
  631.     temp=temp+10;
  632.    }
  633.    else if(M4==1)
  634.    {
  635.     temp=temp+1;
  636.    }
  637.    if(temp>=10000)
  638.    {
  639.     temp=0;
  640.         }
  641.    temp10=temp;
  642.    while(!Key2);
  643.    }
  644. }

  645. void Keyscan_SUB()
  646. {
  647. if(!Key3)
  648.   delayms(20);
  649.   if(!Key3)
  650.   {
  651.    if(M1==1)
  652.    {
  653.     if(temp>0)
  654.         {
  655.     temp=temp-1000;
  656.         }
  657.    }
  658.    else if(M2==1)
  659.    {
  660.     temp=temp-100;
  661.    }
  662.    else if(M3==1)
  663.    {
  664.     temp=temp-10;
  665.    }
  666.    else if(M4==1)
  667.    {
  668.     temp=temp-1;
  669.    }
  670.     if(temp<=0)
  671.    {
  672.     temp=0;
  673.         }
  674.      temp10=temp;
  675.    while(!Key3);
  676.    }
  677. }
  678. void buzze1()            //发声子程序1
  679. {         
  680.   uint t,tt;
  681.   for(t=0;t<20;t++)      //45为蜂鸣器发声频率
  682.   {
  683.   buzzer=!buzzer;
  684.   for(tt=0;tt<100;tt++);
  685.   }
  686. }

  687. void buzze3()            //发声子程序3
  688. {
  689.   uint c;
  690. for(c=0;c<3;c++)
  691. {
  692.   buzze1();
  693. }
  694. }

  695. void ADD()
  696. {
  697.   if(K5==1)                     //K6==1
  698.          {
  699.          while(1)
  700.          {
  701.      LEDdisplay(temp1);
  702.          KEY();
  703.          if(num5==1)                                   //如果key按下一次停止计数。
  704.          {
  705.           K5=0;
  706.           K6=0;
  707.           }
  708.           if(!Key2)                                        //判断如果key2按下继续计数。
  709.           {
  710.            K5=1;
  711.            num5=0;
  712.           }
  713.   // }
  714.                 if(temp30==0&&temp1==temp40)
  715.                 {
  716.                  while(K8==1)
  717.                  {
  718.              wela_1=L;
  719.                  wela_2=L;
  720.                  wela_3=L;
  721.                  wela_4=L;
  722.                  delayms(500);
  723.                  K8=0;
  724.                  if(K8==0)
  725.                   {
  726.                    break;
  727.                   }
  728.                  }
  729.             }
  730.                 if(temp30!=0&&temp1==temp30)
  731.                 {
  732.                  num5=1;
  733.                  while(K8==1)
  734.                  {
  735.               wela_1=L;
  736.                   wela_2=L;
  737.                   wela_3=L;
  738.                   wela_4=L;
  739.                   delayms(500);
  740.                   K8=0;
  741.                   if(K8==0)
  742.                   {
  743.                    break;
  744.                   }
  745.                  }
  746.            }

  747.          if(!Key||num5==2)
  748.           {
  749.            K5=0;
  750.            K6=0;
  751.            EA=0;
  752.            temp1=0;            //中途退出加计数,计数归零。
  753.            temp40=num10;            //中途退出加计数,计数归零。
  754.            temp50=0;                   //中途退出加计数,计数归零。
  755.            buzze3();
  756.            break;
  757.       }        
  758.    }
  759.   }
  760. }

  761. void SUB()
  762. {
  763. if(K6==1)                      //K6==1
  764.          {
  765.          while(1)
  766.          {
  767.       LEDdisplay(temp1);
  768.           KEY();
  769.          if(num5==1)                                   //如果key按下一次停止计数。
  770.          {
  771.           K5=0;
  772.           K6=0;
  773.           }         
  774.           if(!Key3)                                        //判断如果key3按下继续计数。
  775.           {
  776.            K6=1;
  777.            num5=0;
  778.           }
  779.                   if(temp1<=0)                   ///////////////////////////////////
  780.                 {
  781.                  num5=1;
  782.                  while(K8==1)
  783.                  {
  784.               wela_1=L;
  785.                   wela_2=L;
  786.                   wela_3=L;
  787.                   wela_4=L;
  788.                   delayms(500);
  789.                   K8=0;
  790.                   if(K8==0)
  791.                   {
  792.                    break;
  793.                   }
  794.                  }
  795.            }
  796.           if(num5==2)                         ////////////////////////////////////////////////////////////////////////////////////////
  797.           {
  798.            K5=0;
  799.            K6=0;
  800.            EA=0;
  801.            temp1=0;                                              //中途退出加计数,计数归零。
  802.            temp40=num10;                                          //中途退出加计数,计数归零。
  803.            temp50=0;                                                         //中途退出加计数,计数归零。
  804.            buzze3();
  805.            break;
  806.      }        
  807.    }
  808.   }
  809. }
复制代码

所有资料51hei附件下载:
51+数码管秒表可设定计时时间的仿真程序.rar (104.56 KB, 下载次数: 33)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表