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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4480|回復: 6
收起左側

單片機秒表程序,怎么在不改動的情況下加個按鍵控制秒表的暫停和計時?

[復制鏈接]
ID:462433 發表于 2019-1-11 21:38 | 顯示全部樓層 |閱讀模式
這是個秒表   怎么在不改動的情況下加個按鍵控制秒表的暫停和計時?

  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define ab P0
  4. uchar int_time;
  5. uchar a,b;
  6. sbit LSA = P2^2;
  7. sbit LSB = P2^3;
  8. sbit LSC = P2^4;
  9. unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x79,0x71};
  10. uchar displaydata[8];
  11. void digdisplay();

  12. void clock(a,b)
  13. {
  14.         displaydata[0] = table[b/10];
  15.         displaydata[1] = table[b%10];
  16.         displaydata[2] = 0x40;
  17.         displaydata[3] = table[a/10];
  18.         displaydata[4] = table[a%10];
  19.         digdisplay();
  20. }
  21. /***********************************
  22. *   Ö÷oˉêy  
  23. ***********************************/
  24. void main()
  25. {
  26.         TMOD = 0X01;
  27.         TH0 = (65536-46083)/256;
  28.         TL0 = (65536-46083)/256;
  29.         EA = 1;
  30.         ET0 = 1;
  31.         TR0 = 1;
  32.         int_time = 0;
  33.         a =0;b = 0;
  34.         while(1)
  35.         {
  36.                    clock(a,b);                        
  37.         }
  38. }

  39. void digdisplay()
  40. {
  41.         uchar i,j;
  42.         for(i=0;i<5;i++)
  43.         {
  44.                 switch(i)
  45.                 {
  46.                         case 0:
  47.                         LSA = 0;LSB = 0;LSC = 0;break;
  48.                         case 1:
  49.                         LSA = 1;LSB = 0;LSC = 0;break;
  50.                         case 2:
  51.                         LSA = 0;LSB = 1;LSC = 0;break;
  52.                         case 3:
  53.                         LSA = 1;LSB = 1;LSC = 0;break;
  54.                         case 4:
  55.                         LSA = 0;LSB = 0;LSC = 1;break;
  56.                 }
  57.                 ab = displaydata[i];
  58.     j = 50;
  59.                 while(j--);
  60.                 ab = 0x00;
  61.         }
  62. }


  63. void TO_time() interrupt 1
  64. {
  65.         TH0 = (65536-50000)/256;
  66.         TL0 = (65536-50000)%256;
  67.         int_time++;
  68.         if(int_time == 2)
  69.         {
  70.                 int_time = 0;
  71.                 a++;
  72. }
  73. if(a == 10)
  74. {
  75.         b++;
  76.         a=0;
  77. }
  78. if(b == 60)
  79. {
  80.         b = 0;
  81. }                                          
  82. }
復制代碼


回復

使用道具 舉報

ID:183978 發表于 2019-1-12 02:34 | 顯示全部樓層
可以考慮掉電模式
回復

使用道具 舉報

ID:213173 發表于 2019-1-12 10:55 | 顯示全部樓層
不改動怎么加按鍵功能?給你改成單鍵60分鐘百分秒表。1ms數碼管動態顯示。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define ab P0
//uchar int_time;
uchar b,c;
uint a;
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
sbit key1 = P3^0;

unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x79,0x71};
uchar displaydata[8];
bit d;
void digdisplay();
void keyscan();
       
void clock(a,b)
{
        displaydata[0] = table[c/10];
        displaydata[1] = table[c%10];
        displaydata[3] = table[b/10];
        displaydata[4] = table[b%10];
        displaydata[6] = table[a/100%10];
        displaydata[7] = table[a/10%10];

}
/***********************************
*   ?÷oˉêy  
***********************************/
void main()
{
        TMOD= 0x01;                //設置定時器模式
        TL0 = 0x66;                //設置定時初值1ms
        TH0 = 0xFC;                //設置定時初值
        EA = 1;
        ET0 = 1;
        TR0 = 1;
   displaydata[2] = 0x40;
   displaydata[5] = 0x40;
        a =0;b = 0;
        while(1)
        {
                keyscan();
                clock(a,b);                        
        }
}

void digdisplay()
{
        static uchar i=0;
        ab = 0x00;
        switch(i)
        {
           case 0:
           LSA = 0;LSB = 0;LSC = 0;ab = displaydata[i];i++;break;
           case 1:
           LSA = 1;LSB = 0;LSC = 0;ab = displaydata[i];i++;break;
           case 2:
           LSA = 0;LSB = 1;LSC = 0;ab = displaydata[i];i++;break;
           case 3:
           LSA = 1;LSB = 1;LSC = 0;ab = displaydata[i];i++;break;
           case 4:
           LSA = 0;LSB = 0;LSC = 1;ab = displaydata[i];i++;break;
           case 5:
           LSA = 1;LSB = 0;LSC = 1;ab = displaydata[i];i++;break;
           case 6:
           LSA = 0;LSB = 1;LSC = 1;ab = displaydata[i];i++;break;
           case 7:
           LSA = 1;LSB = 1;LSC = 1;ab = displaydata[i];i=0;break;
        }
}
void keyscan()       
{
        static uchar count1=0,count2=0;        //計數變量                       
        static bit key_sign=0;                                        //按鍵狀態標志
        if(key1==0)                                //檢測輸入如果為0
        {
                if((++count1>=100)&&(key_sign==0))
                {                       
                        key_sign=1;                //按鍵自鎖標志置1,防止重復響應
                        count2++;
                        if(count2>=3)
                                count2=0;
                        switch(count2)
                        {
                                case 0:        a=0;
                                                        b=0;
                                                        c=0;        break;//清0
                                case 1:        d=1;  break;//計時
                                case 2:        d=0;        break;//暫停
                        }               
                }
        }
        else
        {
                count1=0;                                //計數變量清0
                key_sign=0;                                //按鍵狀態標志清0
        }
}

void TO_time() interrupt 1
{
        TL0 = 0x66;                //設置定時初值1ms
        TH0 = 0xFC;                //設置定時初值
        if(d)
        {
                a++;
                if(a == 1000)
                {
                        b++;
                        a=0;
                }
                if(b == 60)
                {
                        b = 0;
                        c++;
                }                                          
                if(c == 60)
                        c = 0;
        }
   digdisplay();
}
回復

使用道具 舉報

ID:290305 發表于 2019-1-12 11:52 | 顯示全部樓層
//秒表
#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
unsigned char DisplayData[4];
unsigned char MMMM=0,MM=0,TTTT=0,TT=0,i=0;
bit A=0;//bit只有0和1兩種值

sbit LSA=P1^0;
sbit LSB=P1^1;
sbit LSC=P1^2;
sbit LSD=P1^3;

u8 code smgduan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void waibuzhongduan()
{
        EA=1;
        EX0=1;        
        IT0=1;
        EX1=1;        
        IT1=1;
}

void dingshiqizhongduan()
{
        TMOD=0X01;
        TH0=0xD8;
        TL0=0xF0;
        EA=1;
        TR0=0;
        ET0=1;
        PT0=1;//為1時,定時器0中斷為高級優先級,為0時,為低級優先級。

}

void delay10ms(unsigned int c)
{
        unsigned char a,b;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}
void Display()
{
        unsigned char i,j;
        for(i=0;i<4;i++)
        {
                switch(i)
                {
                        case (0):LSA=0;LSB=1;LSC=1;LSD=1;break;
                        case (1):LSA=1;LSB=0;LSC=1;LSD=1;break;
                        case (2):LSA=1;LSB=1;LSC=0;LSD=1;break;
                        case (3):LSA=1;LSB=1;LSC=1;LSD=0;break;
                }
                P2=DisplayData[i];
        j=10;
        while(j--);
        P2=0XFF;        
        }
}
void XS()
{
        if(A==0)
        {
                DisplayData[0]=smgduan[TT/10];
                DisplayData[1]=smgduan[TT%10]+0x80;
                DisplayData[2]=smgduan[MM/10];
                DisplayData[3]=smgduan[MM%10];
        }
        else
        {
                DisplayData[0]=smgduan[TTTT/10];
                DisplayData[1]=smgduan[TTTT%10]+0x80;
                DisplayData[2]=smgduan[MMMM/10];
                DisplayData[3]=smgduan[MMMM%10];        
        }
}

void main()
{
        waibuzhongduan();
        dingshiqizhongduan();
        while(1)
        {
                XS();
                Display();
        }
}
void Int0() interrupt 0
{
        
                delay10ms(100);
                A=0;
                switch(i)
                {
                        case 0:TR0=1;break;
                        case 1:TR0=0;break;
                        case 2:TT=0,MM=0;break;
                }
                i++;
                if(i>2)
                {
                        i=0;
                }
                delay10ms(10);
                IE0=0;//外部發生中斷時其值為1               
}

void Time0() interrupt 1
{

        TH0=0xD8;
        TL0=0xF0;
        MM++;
        if(MM==100)
        {                                 
                MM=0;
                TT++;
                                if (TT==100)
                                {
                                        TT=0;
                                }
        }
        TF0=0;//為1時表示定時器T0計數溢出
}
void Int1() interrupt 2
{

                delay10ms(100);
                TTTT=TT;
                MMMM=MM;
                A=~A;
                delay10ms(10);
                TF1=0;//外部發生中斷時其值為1
}
   
回復

使用道具 舉報

ID:290305 發表于 2019-1-12 11:53 | 顯示全部樓層
你可以參考下我這個,我的就是按鍵控制啟動和暫停以及清零,你可以稍微改一改
回復

使用道具 舉報

ID:462433 發表于 2019-1-12 11:58 | 顯示全部樓層

不可以實現呀!!!用了掉電模式   5秒就斷電       就只能重新開始了
回復

使用道具 舉報

ID:123289 發表于 2019-1-12 14:35 | 顯示全部樓層
樓主構思奇妙。
方法很簡單,讀通現有的程序。就知道如果加了。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩一区在线播放 | 色偷偷888欧美精品久久久 | xxxcom在线观看 | 精品99在线 | 国产精品久久久久久网站 | 亚洲精品日韩精品 | 国产精品久久精品 | 玖玖国产| 精品久久香蕉国产线看观看亚洲 | 国产三级 | 日韩电影在线 | 亚洲高清视频在线观看 | 亚洲欧美中文日韩在线v日本 | 亚洲www啪成人一区二区 | 精品福利视频一区二区三区 | 天堂在线中文 | 日本三级电影免费 | 精品国产一区二区三区日日嗨 | 美日韩免费视频 | 99免费在线视频 | 国产成人精品一区二区三区视频 | 精品欧美一区二区精品久久 | 久久一区二区三区四区五区 | 伊人久久综合 | 亚洲国产精品成人久久久 | 午夜av成人 | 操皮视频 | 日本超碰在线 | a级片网站| 色综合久 | 成人av免费在线观看 | 成人福利网站 | 一区 | 欧美男人的天堂 | 久久精品国产免费 | 91麻豆精品国产91久久久资源速度 | 日本天堂视频 | av毛片 | 免费黄色的网站 | 久草视频网站 | 一区二区三区四区在线视频 |