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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3700|回復: 9
打印 上一主題 下一主題
收起左側

一個單片機秒表程序代碼的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:792404 發表于 2020-11-2 15:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
50黑幣
這是一個秒表程序代碼,普中科技的實驗板,想實現的功能是:按住key4按鍵不放秒表計時開始,松開key4按鍵秒表計時暫停。不知道問題出在哪里了,實現不了。其余的key1加,key2減,key3清零都正常,只有key4不行,請各位師傅們幫忙看看,謝謝!

具體代碼見2樓

最佳答案

查看完整內容

顯示函數放在中斷里,不然按鍵干擾顯示。暫停不要關定時器,只停止計數即可。修改如下:
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2020-11-2 15:45 | 只看該作者
顯示函數放在中斷里,不然按鍵干擾顯示。暫停不要關定時器,只停止計數即可。修改如下:
  1. #include"reg52.h"
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit key1=P3^1;
  5. sbit key2=P3^0;
  6. sbit key3=P3^2;
  7. sbit key4=P3^3;
  8. sbit lsa=P2^2;
  9. sbit lsb=P2^3;
  10. sbit lsc=P2^4;
  11. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  12.                    0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  13. uchar num[2];
  14. uint a,t;
  15. bit sign=0;

  16. void delay(uint i)
  17. {
  18.   uint x,y;
  19.   for(x=i;x>0;x--)
  20.     for(y=123;y>0;y--);
  21. }

  22. void display()
  23. {
  24.         static uchar i=0;
  25.         num[1]=a/10;
  26.         num[0]=a%10;
  27.         P0=0x00;
  28.         switch(i)
  29.         {
  30.                 case(0):lsa=0;lsb=0;lsc=0;break;
  31.                 case(1):lsa=1;lsb=0;lsc=0;break;
  32.         }
  33.         P0=table[num[i]];
  34.         i++;i%=2;
  35. }

  36. void keyscan()
  37. {

  38.    if(key1==0)
  39.    {
  40.       delay(5);
  41.           if(key1==0)
  42.           {
  43.              a++;
  44.                  if(a==60)
  45.                  {
  46.                     a=0;
  47.                  }
  48.                  while(!key1);
  49.           }
  50.    }
  51.    if(key2==0)
  52.    {
  53.       delay(5);
  54.           if(key2==0)
  55.           {
  56.             
  57.                  if(a==0)
  58.                  {
  59.                     a=60;
  60.                
  61.                  }
  62.                  a--;
  63.                  while(!key2);
  64.           }
  65.    }
  66.    if(key3==0)
  67.    {
  68.       delay(5);
  69.           if(key3==0)
  70.           {
  71.              a=0;
  72.                  while(!key3);
  73.           }
  74.    }
  75.    if(key4==0)
  76.    {
  77.       delay(5);
  78.           if(key4==0)
  79.           {
  80.                             sign=~sign;
  81.              while(!key4);
  82.             
  83.           }
  84.    }

  85. }

  86. void main()
  87. {
  88.    TMOD=0x01;
  89.    TH0=(65536-5000)/256;
  90.    TL0=(65536-5000)%256;
  91.    EA=1;
  92.    ET0=1;
  93.    TR0=1;
  94.    while(1)
  95.    {
  96.       keyscan();
  97.    }
  98. }

  99. void timer0() interrupt 1
  100. {
  101.         TH0=(65536-5000)/256;
  102.         TL0=(65536-5000)%256;
  103.         if(sign)
  104.         {
  105.                 t++;
  106.                 if(t==200)
  107.                 {
  108.                         t=0;
  109.                         a++;
  110.                         if(a==60)
  111.                                 a=0;
  112.                 }
  113.         }
  114.         display();
  115. }
復制代碼

回復

使用道具 舉報

板凳
ID:792404 發表于 2020-11-2 15:49 | 只看該作者
這是一個秒表程序代碼,普中科技的實驗板,想實現的功能是:按住key4按鍵不放秒表計時開始,松開key4按鍵秒表計時暫停。不知道問題出在哪里了,實現不了。其余的key1加,key2減,key3清零都正常,只有key4不行,請各位師傅們幫忙看看,謝謝!

#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^1;
sbit key2=P3^0;
sbit key3=P3^2;
sbit key4=P3^3;
sbit lsa=P2^2;
sbit lsb=P2^3;
sbit lsc=P2^4;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar num[2];
uint a,t;

void delay(uint i)
{
  uint x,y;
  for(x=i;x>0;x--)
    for(y=123;y>0;y--);
}

void display()
{
  uchar a;
  for(a=0;a<2;a++)
  {
     switch(a)
         {
            case(0):lsa=0;lsb=0;lsc=0;break;
                case(1):lsa=1;lsb=0;lsc=0;break;
         }
         P0=table[num[a]];
         delay(10);
         P0=0x00;
  }
}

void keyscan()
{
   num[1]=a/10;
   num[0]=a%10;
   if(key1==0)
   {
      delay(5);
          if(key1==0)
          {
             a++;
                 if(a==60)
                 {
                    a=0;
                 }
                 while(!key1);
          }
   }
   if(key2==0)
   {
      delay(5);
          if(key2==0)
          {
            
                 if(a==0)
                 {
                    a=60;
               
                 }
                 a--;
                 while(!key2);
          }
   }
   if(key3==0)
   {
      delay(5);
          if(key3==0)
          {
             a=0;
                 while(!key3);
          }
   }
   if(key4==0)
   {
      delay(5);
          if(key4==0)
          {
             while(!key4);
                 TR0=~TR0;
          }
   }

}

void main()
{
   TMOD=0x01;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   EA=1;
   ET0=1;
   
   while(1)
   {
      keyscan();
      display();
   }
}

void timer0() interrupt 1
{
           TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
        t++;
        if(t==20)
        {
           t=0;
           a++;
           if(a==60)
           {
              a=0;
           }
          
        }
}
回復

使用道具 舉報

地板
ID:332444 發表于 2020-11-2 17:11 | 只看該作者
在按鍵釋放循環代碼調用計數即可實現。
回復

使用道具 舉報

5#
ID:792404 發表于 2020-11-2 17:34 | 只看該作者
#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^1;
sbit key2=P3^0;
sbit key3=P3^2;
sbit key4=P3^3;
sbit lsa=P2^2;
sbit lsb=P2^3;
sbit lsc=P2^4;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar num[2];
uint a,t;

void delay(uint i)
{
  uint x,y;
  for(x=i;x>0;x--)
    for(y=123;y>0;y--);
}

void display()
{
  uchar a;
  for(a=0;a<2;a++)
  {
     switch(a)
         {
            case(0):lsa=0;lsb=0;lsc=0;break;
                case(1):lsa=1;lsb=0;lsc=0;break;
         }
         P0=table[num[a]];
         delay(10);
         P0=0x00;
  }
}

void keyscan()
{
   num[1]=a/10;
   num[0]=a%10;
   if(key1==0)
   {
      delay(5);
          if(key1==0)
          {
             a++;
                 if(a==60)
                 {
                    a=0;
                 }
                 while(!key1);
          }
   }
   if(key2==0)
   {
      delay(5);
          if(key2==0)
          {
            
                 if(a==0)
                 {
                    a=60;
               
                 }
                 a--;
                 while(!key2);
          }
   }
   if(key3==0)
   {
      delay(5);
          if(key3==0)
          {
             a=0;
                 while(!key3);
          }
   }
   if(key4==0)
   {
      delay(5);
          if(key4==0)
          {
             while(!key4);
                 TR0=~TR0;
          }
   }

}

void main()
{
   TMOD=0x01;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   EA=1;
   ET0=1;
   
   while(1)
   {
      keyscan();
      display();
   }
}

void timer0() interrupt 1
{
           TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
        t++;
        if(t==20)
        {
           t=0;
           a++;
           if(a==60)
           {
              a=0;
           }
          
        }
}


回復

使用道具 舉報

6#
ID:332444 發表于 2020-11-2 19:11 | 只看該作者
回復

使用道具 舉報

7#
ID:792404 發表于 2020-11-3 07:09 | 只看該作者
xianfajushi 發表于 2020-11-2 19:11
https://blog.csdn.net/xianfajushi/article/details/89448933

謝謝總工,可以了,已解決
回復

使用道具 舉報

8#
ID:792404 發表于 2020-11-3 07:10 | 只看該作者
xianfajushi 發表于 2020-11-2 17:11
在按鍵釋放循環代碼調用計數即可實現。

謝謝師傅,我試一下
回復

使用道具 舉報

9#
ID:792404 發表于 2020-11-3 07:11 | 只看該作者
wulin 發表于 2020-11-2 21:53
顯示函數放在中斷里,不然按鍵干擾顯示。暫停不要關定時器,只停止計數即可。修改如下:

OK了,感謝總工指點
回復

使用道具 舉報

10#
ID:514901 發表于 2020-11-6 15:43 | 只看該作者
#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^1;
sbit key2=P3^0;
sbit key3=P3^2;
sbit key4=P3^3;
sbit lsa=P2^2;
sbit lsb=P2^3;
sbit lsc=P2^4;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar num[2];
uint a,t;

void delay(uint i)
{
  uint x,y;
  for(x=i;x>0;x--)
    for(y=123;y>0;y--);
}

void display()
{
  uchar a;
  for(a=0;a<2;a++)
  {
     switch(a)
         {
            case(0):lsa=0;lsb=0;lsc=0;break;
                case(1):lsa=1;lsb=0;lsc=0;break;
         }
         P0=table[num[a]];
         delay(10);
         P0=0x00;
  }
}

void keyscan()
{
   num[1]=a/10;
   num[0]=a%10;
   if(key1==0)
   {
      delay(5);
          if(key1==0)
          {
             a++;
                 if(a==60)
                 {
                    a=0;
                 }
                 while(!key1);
          }
   }
   if(key2==0)
   {
      delay(5);
          if(key2==0)
          {
            
                 if(a==0)
                 {
                    a=60;
               
                 }
                 a--;
                 while(!key2);
          }
   }
   if(key3==0)
   {
      delay(5);
          if(key3==0)
          {
             a=0;
                 while(!key3);
          }
   }
   if(key4==0)
   {
      delay(5);
          if(key4==0)
          {
             TR0 = 1;
             while(!key4)
             {
                    display();
             }
              TR0 = 0;
          }
   }

}

void main()
{
   TMOD=0x01;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   EA=1;
   ET0=1;
   
   while(1)
   {
      keyscan();
      display();
   }
}

void timer0() interrupt 1
{
           TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
        t++;
        if(t==20)
        {
           t=0;
           a++;
           if(a==60)
           {
              a=0;
           }
           
        }
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 丁香五月网久久综合 | av看片| 国产成人高清成人av片在线看 | 一级黄色毛片 | 日韩三片 | 特级毛片爽www免费版 | 正在播放国产精品 | 日韩精品在线网站 | 国产精品一区一区三区 | 欧美一级高潮片免费的 | 在线播放一区 | 精品一区在线看 | 在线观看中文字幕av | 久久精品av麻豆的观看方式 | 欧美成人一级 | 亚洲 欧美 激情 另类 校园 | 国产一区二区三区四区在线观看 | 日韩在线观看一区二区三区 | 成人精品久久日伦片大全免费 | 国产午夜精品一区二区三区四区 | 综合久久综合久久 | av无遮挡| 黄色毛片一级 | 欧美激情欧美激情在线五月 | 二区三区视频 | 91综合网 | 亚洲视频三 | 国产成人精品一区二区三区网站观看 | 国产在线资源 | 亚洲国产第一页 | 亚洲自拍一区在线观看 | 久久久久网站 | 亚洲中午字幕 | 亚洲免费一区二区 | 日本视频中文字幕 | 超碰日韩| 久久久av一区 | 国产 日韩 欧美 制服 另类 | 久久国产精品一区二区三区 | www.久久.com | 日韩中文一区二区 |