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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

  [復制鏈接]
跳轉到指定樓層
樓主

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


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

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;//防止循環進入此函數      
}

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++)//數碼管0-2位依次顯示
//     {
//       yu1=shang1%10;//取余
//        shang1=shang1/10;//取商
//           if(a5==1)//循環到個位時顯示小數點
//           {      
//              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++)//數碼管3-4位依次顯示
//        {
//          yu2=shang2%10;//取余
//           shang2=shang2/10;//取商
//           if(a5==3)//循環到個位時顯示小數點
//           {      
//              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();
    }
}

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:151927 發表于 2016-12-3 17:57 | 只看該作者
可以用作課程設計嗎
回復

使用道具 舉報

板凳
ID:151893 發表于 2016-12-3 19:21 | 只看該作者
shizhanglei 發表于 2016-12-3 17:57
可以用作課程設計嗎

怎么樣的課程設計?有什么要求
回復

使用道具 舉報

地板
ID:151893 發表于 2016-12-3 19:55 | 只看該作者
shizhanglei 發表于 2016-12-3 17:57
可以用作課程設計嗎

你具體什么要求?
回復

使用道具 舉報

5#
ID:152009 發表于 2016-12-3 23:47 | 只看該作者
怎么樣的課程設計?有什么要求
回復

使用道具 舉報

6#
ID:257970 發表于 2017-12-6 10:08 來自手機 | 只看該作者
這個可以改成實現6位數碼管顯示時分秒倒計時的嗎?
回復

使用道具 舉報

7#
ID:267933 發表于 2017-12-27 20:02 | 只看該作者
大神,沒有仿真圖。
回復

使用道具 舉報

8#
ID:781537 發表于 2020-6-17 13:38 | 只看該作者
可以,這功能完美
回復

使用道具 舉報

9#
ID:243874 發表于 2020-10-19 13:07 | 只看該作者
這個有電路嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色片在线 | 久久精品欧美一区二区三区麻豆 | 欧美综合视频 | 亚洲精品高清视频 | 国产精品久久久久久久久污网站 | 免费在线看黄 | 久久久青草婷婷精品综合日韩 | 激情在线视频 | 一区二区三区影院 | 国产精品久久久久久影视 | 亚洲精品视频一区二区三区 | 日韩一区二区三区在线 | 久久激情网| 91国在线视频 | 四虎影院久久 | 一区在线播放 | 精品三区 | a级在线 | 精品综合久久久 | 91亚洲精选| 一区二区三区网站 | 国产精品久久久久久av公交车 | 亚洲一区在线播放 | 国产精品观看 | 91资源在线观看 | 国产一区二区三区免费观看在线 | 午夜视频网站 | 日韩在线观看一区二区三区 | 亚洲高清视频在线观看 | 日韩在线不卡 | 一级毛片免费视频观看 | 久草在线 | 日韩在线中文字幕 | av电影一区 | 精品国产18久久久久久二百 | 欧美中文一区 | 美女露尿口视频 | 丁香婷婷在线视频 | 国产精品久久久久aaaa樱花 | 亚洲欧美日韩精品 | 九色 在线 |