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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6672|回復(fù): 8
收起左側(cè)

多功能數(shù)碼管秒表(帶正、倒計時,及時鐘模式)有代碼

  [復(fù)制鏈接]
ID:151893 發(fā)表于 2016-12-3 17:27 | 顯示全部樓層 |閱讀模式

自己焊的,看起開,,還可以吧,哈哈

自己焊的,看起開,,還可以吧,哈哈

基于STC89C52的數(shù)碼管顯示秒表,用矩陣鍵盤,有走秒,輸入時間正計時、倒計時,到時提醒,及切換到時鐘模式的功能
鍵盤位置:7                 8                   9                    開始(正計時)
                 4                 5                   6                    暫停
                 1                 2                   3                    倒計時
                 模式切換     0                   時間校正        清零
很容易理解,所以,這個就直接附代碼~~
下載地址:
多功能秒表.doc (6.43 KB, 下載次數(shù): 85)


///////////////////////////////////////////////////頭文件和一些定義和初始化在附件里有///////////////////////////////////////////////////
char codetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                   0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
                   0x54};//數(shù)碼管段碼,最后一個為n
char code weixuan[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//數(shù)碼管位碼

void Init()//清零
{      
    run=0;
    remind=0;
    num=0;
    time=0;
    miao=0;
    fen=0;
    time0=0.00001;
    beep=1;
    key=16;
    EA=0;
    ET0=0;
    TR0=0;
}      

void delay(unsigned char i)//延時
{
char j,k;
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}
void bee()//蜂鳴器
{
beep=0;        
delay(500);
beep=1;        
}

void keyscan()//按鍵檢測
{
    uchar temp;
    P3=0xfe;
    temp=P3;
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
        delay(10);
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {   
            temp=P3;
            switch(temp)
            {
                case 0xee:
                      key=7;
                     break;
                case0xde:
                      key=8;
                     break;
                case 0xbe:
                      key=9;
                     break;
                case0x7e:
                      key=12;
                     break;
            }
            while(temp!=0xf0)
            {
                temp=P3;
                temp=temp&0xf0;
            }
        }
    }
    P3=0xfd;
    temp=P3;
    temp=temp&0xf0;
   if(temp!=0xf0)
    {
        delay(10);
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
            temp=P3;
            switch(temp)
            {
                case 0xed:
                      key=4;
                     break;
                case0xdd:
                      key=5;
                     break;
                case0xbd:
                      key=6;
                     break;
                case0x7d:
                      key=13;
                     break;
            }
            while(temp!=0xf0)
            {
                temp=P3;
                temp=temp&0xf0;
            }

        }
    }

    P3=0xfb;
    temp=P3;
    temp=temp&0xf0;
   if(temp!=0xf0)
    {
        delay(10);
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
            temp=P3;
            switch(temp)
            {
                case 0xeb:
                      key=1;
                     break;
                case0xdb:
                      key=2;
                     break;
                case0xbb:
                      key=3;
                     break;
                case0x7b:
                      key=14;
                     break;
            }
            while(temp!=0xf0)
            {
                temp=P3;
                temp=temp&0xf0;
            }
        }
    }
    P3=0xf7;
    temp=P3;
    temp=temp&0xf0;
   if(temp!=0xf0)
    {
        delay(10);
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
            temp=P3;
            switch(temp)
            {
                case 0xe7:
                      key=10;
                     break;
                case0xd7:
                      key=0;
                     break;
                case0xb7:
                      key=11;
                     break;
                case0x77:
                      key=15;
                     break;
            }
            while(temp!=0xf0)
            {
                temp=P3;
                temp=temp&0xf0;
            }
        }
    }
}

void stor()
{
   if(key!=16)
    {
       if(key>11)
            switch(key)
            {
                case 12:run=1;break;
                case13:run=0;break;
                case14:run=2;break;
                case15:Init();
            }
        if(key<10)
        {
            if(time0==0.00001)
                time0=0;
            time0=time0*10+key;
            run=3;
        }      
    }
    key=16;//防止循環(huán)進(jìn)入此函數(shù)      
}

void T0_time()interrupt 1
{
   TH0=(65536-9216)/256;
    TL0=(65536-9216)%256;
//  num++;
//  if(num==2)
//  {
//      num=0;
        if(run==1)
          time+=0.01;
        else
          time-=0.01;
//  }
}

void display(float t)
{
    intmiao_,time10,a[6],n1;
    time10=t*100;
    miao_=time10%100;
    miao=time10/100%60;
    fen=time10/100/60;

    a[0]=miao_%10;
   a[1]=miao_/10;
   a[2]=miao%10;
   a[3]=miao/10;
    a[4]=fen%10;
    a[5]=fen/10;

        for(n1=0;n1<6;n1++)
        {
           if(n1!=2&&n1!=4)
           {      
                P0=table[a[n1]];
                dula=1;
                dula=0;
               P0=weixuan[n1];
               wela=1;
               wela=0;
               delay(5);
            }
            else
            {                                       //05 4744
                P0=table[a[n1]]+0x80;      
               dula=1;
               dula=0;
               P0=weixuan[n1];
               wela=1;
               wela=0;
               delay(5);
            }
        }      

//  if(remind==0)
//  {
//  for(a5=0;a5<3;a5++)//數(shù)碼管0-2位依次顯示
//     {
//       yu1=shang1%10;//取余
//        shang1=shang1/10;//取商
//           if(a5==1)//循環(huán)到個位時顯示小數(shù)點
//           {      
//              P0=table[yu1]+0x80;
//              dula=1;
//               dula=0;
//               P0=weixuan[a5];
//               wela=1;
//               wela=0;
//                delay(5);
//            }
//          else
//          {
//              P0=table[yu1];      
//               dula=1;
//               dula=0;
//               P0=weixuan[a5];
//               wela=1;
//               wela=0;
//               delay(5);
//          }
//     }
//      for(;a5<5;a5++)//數(shù)碼管3-4位依次顯示
//        {
//          yu2=shang2%10;//取余
//           shang2=shang2/10;//取商
//           if(a5==3)//循環(huán)到個位時顯示小數(shù)點
//           {      
//              P0=table[yu2]+0x80;
//              dula=1;
//               dula=0;
//               P0=weixuan[a5];
//               wela=1;
//               wela=0;
//               delay(5);
//            }
//          else
//          {
//              P0=table[yu2];      
//               dula=1;
//               dula=0;
//                P0=weixuan[a5];
//               wela=1;
//               wela=0;
//               delay(5);
//          }
//        }
//
//  }
//  else
//  {
//              P0=table[13];      
//               dula=1;
//               dula=0;
//                P0=weixuan[0];
//               wela=1;
//               wela=0;
//               delay(5);
//
//              P0=table[16];      
//               dula=1;
//               dula=0;
//               P0=weixuan[1];
//               wela=1;
//                wela=0;
//               delay(5);
//
//              P0=table[14];      
//               dula=1;
//               dula=0;
//               P0=weixuan[2];
//               wela=1;
//               wela=0;
//               delay(5);
//  }
}

void check_display()
{
    if(run==0)
      TR0=0;
    if(run==1&&TR0==0||run==2&&TR0==0)
    {
        TMOD=0x01;
        TH0=(65536-9216)/256;
        TL0=(65536-9216)%256;
        EA=1;
        ET0=1;
        TR0=1;
        if(run==2&&time0!=0.00001)
            time=time0;
    }
    if(time==time0&&run==1&&remind==0)
    {
//      bee();
        run=0;
        remind=1;
    }
    if(time<=0&&run==2&&remind==0)
    {
//      bee();
        run=0;
        remind=1;
    }
    if(run!=3)
        display(time);
    else
        display(time0);
}                                                     

void main()
{
    Init();
    while(1)
    {   
        keyscan();
        stor();
        check_display();
    }
}

評分

參與人數(shù) 3黑幣 +108 收起 理由
13202036330 + 3
51pp + 5 贊一個!
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:151927 發(fā)表于 2016-12-3 17:57 | 顯示全部樓層
可以用作課程設(shè)計嗎
回復(fù)

使用道具 舉報

ID:151893 發(fā)表于 2016-12-3 19:21 | 顯示全部樓層
shizhanglei 發(fā)表于 2016-12-3 17:57
可以用作課程設(shè)計嗎

怎么樣的課程設(shè)計?有什么要求
回復(fù)

使用道具 舉報

ID:151893 發(fā)表于 2016-12-3 19:55 | 顯示全部樓層
shizhanglei 發(fā)表于 2016-12-3 17:57
可以用作課程設(shè)計嗎

你具體什么要求?
回復(fù)

使用道具 舉報

ID:152009 發(fā)表于 2016-12-3 23:47 | 顯示全部樓層
怎么樣的課程設(shè)計?有什么要求
回復(fù)

使用道具 舉報

ID:257970 發(fā)表于 2017-12-6 10:08 來自觸屏版 | 顯示全部樓層
這個可以改成實現(xiàn)6位數(shù)碼管顯示時分秒倒計時的嗎?
回復(fù)

使用道具 舉報

ID:267933 發(fā)表于 2017-12-27 20:02 | 顯示全部樓層
大神,沒有仿真圖。
回復(fù)

使用道具 舉報

ID:781537 發(fā)表于 2020-6-17 13:38 | 顯示全部樓層
可以,這功能完美
回復(fù)

使用道具 舉報

ID:243874 發(fā)表于 2020-10-19 13:07 | 顯示全部樓層
這個有電路嗎
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 6080亚洲精品一区二区 | 在线欧美视频 | 丁香五月网久久综合 | 精品国产18久久久久久二百 | 天天影视亚洲综合网 | 男人av网 | 三a毛片| 成人免费视频 | 精品国产一区二区三区久久久四川 | 色永久| 欧美一区二区 | 欧美性受xxx | 国产在线精品一区二区 | 成人国产精品久久久 | 亚洲第一色av| 欧美日韩a | 精品一级| 久久99精品久久久久久秒播九色 | 国产乱码精品一区二区三区忘忧草 | 激情 一区 | 欧美一区二区三区四区五区无卡码 | 成年人网站免费视频 | 国产91精品久久久久久久网曝门 | 在线看一区二区 | 欧美黄在线观看 | 成人性视频在线播放 | 国产乱人伦 | 三区四区在线观看 | 毛片大全| 精品视频久久久久久 | 国产免费一区二区三区 | 视频一区二区在线 | 国产91亚洲精品 | 欧美精品在欧美一区二区少妇 | 国产91在线视频 | 台湾佬成人网 | 在线一区二区三区 | 日韩精品国产精品 | 精品国产一区二区国模嫣然 | 日本小电影在线 | 99福利视频|