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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機秒表停止功能不能使用是那一段程序錯了嗎?

[復制鏈接]
跳轉到指定樓層
樓主
ID:827883 發表于 2020-11-9 18:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/*********************************/
/*項目名稱:數字式秒表的設計程序*/
/*設計者:*/
/*設計日期:2020年11月8日*/
/*設計功能說明:系統默認提示符為“p.”;
實現功能:按下S2鍵啟動秒表;按下S3鍵暫停秒表;按下S4鍵秒表繼續工作;按下S5鍵秒表清零,按下S6鍵停止秒表。
/*****************************/
/* crystal=12Mhz */
/* P2口位控口,P0口段控口 */
#include<reg51.h>                                                                                                                                            
#include"math.h"
#define uchar unsigned char
#define uint unsigned int  
unsigned char code duanma[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF}; //共陰數碼管
uchar wk[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};         
uchar dm1[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};
uchar dm2[1]={0xbf}; /*顯示橫線*/
sbit P1_0=P1^0;          /*開始*/
sbit P1_1=P1^1;          /*暫停*/
sbit P1_2=P1^2;          /*繼續*/
sbit P1_3=P1^4;          /*清零*/        
sbit P1_4=P1^3;          /*停止*/
uchar i,j,k,l,n,m,o,p;


/*延時函數*/
void ys()                           
{  
IE=0X00;
TMOD=0X01;
TH0=(65536-1000)/256;                     
TL0=(65536-1000)%256;
TR0=1;
do{}while(!TF0);
TF0=0;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256; }



/*  清零操作函數  */        

void q0()                                 

{  k=0;  n=0;  m=0; l=0;  o=0;  p=0;  }

/*  顯示程序函數  */

void display()                                       
{ j=0;
P2=wk[j];  P0=dm1[m];   ys();  j++;
P2=wk[j];  P0=dm1[n];   ys();  j++;
P2=wk[j];  P0=dm2[0];   ys();  j++;
P2=wk[j];  P0=dm1[k];   ys();  j++;
P2=wk[j];  P0=dm1[l];   ys();  j++;
P2=wk[j];  P0=dm2[0];   ys();  j++;
P2=wk[j];  P0=dm1[o];   ys();  j++;
P2=wk[j];  P0=dm1[p];   ys();  j++;
}

/*主函數*/

void main()

{

   for(;;)                                                      
{ if(P1_0==0)                                /*  是否開始工作  */
  {   for(p=0;p<6;p++)                    /* 判斷延時10min是否達到  */        
   {
      for(o=0;o<10;o++)                            /* 判斷主延時1min是否達到  */        
    {
       for(l=0;l<6;l++)                         /* 判斷延時10s是否達到  */        
     {                                                            
         for(k=0;k<10;k++)                        /* 判斷延時1s是否達到  */        
      {
          for(n=0;n<10;n++)                           /* 判斷延時100ms是否達到  */        


         {  if(P1_3==0)  {  break;  }    /*  停止功能是否執行  */                 
              else
           {
              for(m=0;m<10;m++)               /* 判斷延時10ms是否達到  */        
             {
                 if(P1_1==0)                   /*  暫停功能是否執行  */               
               {
                   while(P1_2==1)                /*  連續功能是否執行  */               
                 {   
                   if(P1_4==0) {  q0();  }         /*  清零功能是否執行  */               

                   else  {   display( );          } /*  暫停時顯示  */        

                   }
                 }        
                     else  
                                 {    display();   }                   /*  正常工作時顯示  */        
               }
              }
             }
            }                           
          }
        }        
      }  
    }                                                                  
   else
{  P2=0XF7;P0=0X0C;  }                 /*  系統提示符"P."  */        
}
  }

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:88256 發表于 2020-11-9 23:38 | 只看該作者
sbit P1_3=P1^4;          /*清零*/        
sbit P1_4=P1^3;          /*停止*/

{  if(P1_3==0)  {  break;  }    /*  停止功能是否執行  */   

你這是什么意思?
回復

使用道具 舉報

板凳
ID:827883 發表于 2020-11-10 00:20 | 只看該作者
hhdsdy 發表于 2020-11-9 23:38
sbit P1_3=P1^4;          /*清零*/        
sbit P1_4=P1^3;          /*停止*/

改了之后還是不能用
回復

使用道具 舉報

地板
ID:213173 發表于 2020-11-10 07:40 | 只看該作者
樓主主函數結構錯誤,給你改用定時器中斷計時,你試試。
  1. //999.9秒表
  2. #include<reg51.h>                                                                                                                                            
  3. //#include"math.h"
  4. #define uchar unsigned char
  5. #define uint unsigned int  
  6. sbit S1=P1^0;          /*開始/停止/清零*/
  7. sbit S2=P1^1;          /*暫停/繼續*/
  8. uchar code duanma[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF}; //共陰數碼管
  9. uchar code wk[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};         
  10. uchar Cnt100ms=0,Cnt1s=0;
  11. uint  Cnt250us=0;
  12. bit   make=0;//使能

  13. /*  延時函數  */
  14. void delay(uint x)
  15. {
  16.         uint i,j;
  17.         for(i=x;i>0;i--)
  18.                 for(j=120;j>0;j--);
  19. }

  20. /*  初始化定時器函數  */
  21. void Timer0Init()        //250微秒@12.000MHz
  22. {
  23.         TMOD= 0x02;                //設置定時器模式
  24.         TL0 = 0x06;                //設置定時初值
  25.         TH0 = 0x06;                //設置定時重載值
  26.         TR0 = 1;                //定時器0開始計時
  27.         EA  = 1;
  28.         ET0 = 1;
  29. }
  30. /*  按鍵掃描函數  */
  31. void key_scan()                               
  32. {
  33.         static uchar count=0,num=0; //計數變量
  34.         static bit key_sign=0;                //按鍵狀態標志
  35.         if(!S1||!S2)
  36.         {
  37.                 if(++count>=10 && key_sign==0)//消抖
  38.                 {       
  39.                         key_sign=1;
  40.                         if(!S1)
  41.                         {
  42.                                 num++;
  43.                                 num%=3;
  44.                                 switch(num)/*開始/停止/清零*/
  45.                                 {
  46.                                         case 0: make=0;Cnt250us=0;Cnt100ms=0;Cnt1s=0;break;//清零
  47.                                         case 1: make=1;break;//開始
  48.                                         case 2: make=0;break;//停止
  49.                                 }
  50.                         }
  51.                         if(!S2)        make=~make;
  52.                 }
  53.         }
  54.         else
  55.         {
  56.                 count=0;                                //計數變量清0
  57.                 key_sign=0;                        //按鍵狀態標志清0
  58.         }

  59. }
  60. /*  數碼管顯示函數  */
  61. void display()                                       
  62. {
  63.         static i=0;
  64.         P0=0xff;
  65.         P2=wk[i];
  66.         switch(i)
  67.         {
  68.                 case 0: P0=duanma[Cnt1s/100%10];break;
  69.                 case 1: P0=duanma[Cnt1s/10%10];break;
  70.                 case 2: P0=duanma[Cnt1s%10]&0x7f;break;
  71.                 case 3: P0=duanma[Cnt100ms%10];break;
  72.         }
  73.         i++;
  74.         i%=4;
  75. }

  76. /*主函數*/

  77. void main()
  78. {
  79.         Timer0Init();
  80.         while(1)
  81.         {
  82.                 key_scan();       
  83.                 display();
  84.                 delay(1);
  85.         }
  86. }
  87. /**************中斷服務程序*****************/
  88. void timer0() interrupt        1//250微秒@12MHz
  89. {
  90.         if(make==1)                        //暫停/啟動
  91.         {
  92.                 Cnt250us++;                                        //中斷變量Cnt250us自+1
  93.                 if(Cnt250us>=400)                                //100ms
  94.                 {
  95.                         Cnt250us=0;                                //清0
  96.                         Cnt100ms++;                        //100毫秒計數
  97.                         if(Cnt100ms>=10)
  98.                         {
  99.                                 Cnt100ms=0;
  100.                                 Cnt1s++;                                //秒計數
  101.                                 if(Cnt1s>999)
  102.                                         Cnt1s=0;
  103.                         }
  104.                 }
  105.         }
  106. }
復制代碼

回復

使用道具 舉報

5#
ID:414556 發表于 2020-11-10 09:31 | 只看該作者
while(P1_2==1)  
在功能里面設條件就會不能實現功能
回復

使用道具 舉報

6#
ID:158375 發表于 2020-11-10 10:27 | 只看該作者
按鍵檢查無消抖處理,建議改程序結構。
回復

使用道具 舉報

7#
ID:827883 發表于 2020-11-10 12:29 | 只看該作者
wulin 發表于 2020-11-10 07:40
樓主主函數結構錯誤,給你改用定時器中斷計時,你試試。

要改成5個按鍵,還要顯示p。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人高清在线 | 精品国产一区二区久久 | av黄在线观看 | 国产一区二区在线播放 | 亚洲国产aⅴ精品一区二区 免费观看av | www.夜夜骑.com | 91亚洲免费 | 狠狠干天天干 | 欧美精品久久久久久久久老牛影院 | 欧美一区二区三区在线播放 | 中文字幕在线精品 | 国产97视频在线观看 | av特级毛片| 男女午夜免费视频 | 五月综合激情在线 | 国产高清精品网站 | 色综合av | 日韩一区中文字幕 | 午夜精品| 北条麻妃一区二区三区在线观看 | 黄色操视频 | 亚洲精品性视频 | 欧美日韩一区在线 | 久久99精品久久久久久 | 午夜男人的天堂 | 欧美第一页| 国产精品免费一区二区三区 | 一区二区精品 | 日韩精品一区二区三区中文在线 | aaaaa毛片 | 自拍偷拍亚洲视频 | 国产精品久久网 | 国产一区二区三区欧美 | 国产成人免费 | 亚洲精品久久久 | 国产精品欧美一区二区 | 久久国产精品一区二区三区 | 久久国产激情视频 | 色成人免费网站 | 天堂综合| 国产一区日韩在线 |