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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3040|回復: 2
收起左側

定時器秒表99秒,按鍵可控

[復制鏈接]
ID:320909 發表于 2018-5-12 20:40 | 顯示全部樓層 |閱讀模式

中斷,定時器,數碼管動態顯示
0~99秒定時器
按鍵按一下
開啟顯示00
再按一下開始計時
再按一下暫停
再按一下清0

一起學習

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png 0.png

單片機源程序如下:
  1. #include<reg51.h>

  2. sbit p1=P1^0;
  3. sbit p2=P1^1;
  4. unsigned char code TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
  5.                       0x80,0x90};
  6. unsigned char disp[2]={0xc0,0xc0};

  7. unsigned char i=0;
  8. unsigned int cnt =0;

  9. void main(){
  10. unsigned long sec =0;
  11.         EA=1;
  12.         TMOD=0x01;
  13.         TH0=0xfc;
  14.         TL0=0x18;
  15.         ET0=1;
  16.         TR0=1;
  17.        
  18.         while(1){
  19.         if(cnt>=1000){
  20.         cnt=0;
  21.                 sec++;
  22.                 disp[0]=TAB[sec%10];
  23.                 disp[1]=TAB[sec/10];
  24.         }
  25.        
  26.        
  27.        
  28.         }
  29.   


  30. }



  31. void inter0() interrupt 1{
  32. TH0=0xfc;
  33.         TL0=0x18;
  34.         cnt++;
  35.         if(++i==3)i=1;
  36.         P2=0xff;
  37.         P1=~i;
  38.         P2=disp[i-1];
  39.        
  40.        
  41. }
復制代碼

所有資料51hei提供下載:
定時器秒表.rar (14.37 KB, 下載次數: 37)


回復

使用道具 舉報

ID:320909 發表于 2018-5-15 12:46 | 顯示全部樓層
不好意思源碼發錯了現在補上,并且加上了 led 提示燈
回復

使用道具 舉報

ID:320909 發表于 2018-5-15 12:47 | 顯示全部樓層
#include<reg51.h>
#define SEG P2
#define SCANP P1
sbit PB0=P1^7;
sbit led=P0^7;

#define count_M1 50000
#define TH_M1 (65636-count_M1)/256
#define TL_M1 (65636-count_M1)%256
int count_T0=0;

#define count_M2  250
#define TH_M2 (256-count_M2)
#define TL_M2 (256-count_M2)
char count_T1=0;

char code TAB[10]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};
char disp[2]= {0xc0,0xc0};

char seconds=0;
char scan=0;
char flag=0;

void debouncer(void);
void delay(int x);
main() {

    IE=0x8f;
    TCON=0x00;
    TMOD=0x21;
    TH0=TH_M1;
    TL0=TL_M1;
    TR0=0;
    TH1=TH_M2;
    TL1=TL_M2;
    TR1=0;

    while(1) {
                       
                          
        if(PB0==0&&flag==0) {  

            debouncer();
                                          led=0;
            TR0=1;
            TR1=1;
            TR0=0;
            flag=1;
            while(PB0==0);
            debouncer();

        }
        if(PB0==0&&flag==1) {
            debouncer();
            TR0=1;
            flag=2;
            while(PB0==0);
            debouncer();

        }
        if(PB0==0&&flag==2) {
            debouncer();
                                           led=0;
            TR0=0;
            flag=3;
            while(PB0==0);
            debouncer();

        }
        if(PB0==0&&flag==3) {
            debouncer();
            seconds=0;
            disp[0]=disp[1]=0xc0;
            TR0=0;
            flag=1;
            while(PB0==0);
            debouncer();

        }



    }



}

void T0_1s(void)interrupt 1
{
    TH0=TH_M1;
    TL0=TL_M1;
    if(++count_T0==16) //為了消除誤差將20改為16
    {   
        count_T0=0;
                          
                           led=~led;
                       
        seconds++;
        if(seconds==99)
            seconds=0;
    }
    disp[1]=TAB[seconds/10];
    disp[0]=TAB[seconds%10];
}

void T1_8ms(void) interrupt 3
{
    if(++count_T1==32)
    {
        count_T1=0;
        if(++scan==3) scan=1;
        SEG=0xff;
        SCANP=~scan;
        SEG=disp[scan-1];
    }
}


void debouncer(void)
{
    int i;
    for(i=0; i<2400; i++);
}

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表