找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2926|回复: 1
打印 上一主题 下一主题
收起左侧

数码管 时钟 秒表 切换

[复制链接]
跳转到指定楼层
楼主
ID:75419 发表于 2015-4-26 21:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar hour=        0,min=0,sec=0,qian,bai,shi,ge;      
int  aa,num,aa1,kk,k=0;
int  bzw=0,flag=0,ks=0;
sbit        k1 = P3^0;    //功能键                 
sbit        k2 = P3^1;     //减                  
sbit        k3 = P3^2;      //加               
sbit        k4 = P3^3;   
sbit        k5 = P3^4;                    
sbit        k6 = P3^5;     
sbit        k7 = P3^6;     
sbit  DELL=P1^5;           //响铃         
uchar code seg_data[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5c,0x79,0x71,0X40};
/********以下是延时函数********/
void Delay(int xms)                              
{
        int i,j;
        for(i=xms;i>0;i--)                     //i=xms即延时约xms毫秒
                for(j=110;j>0;j--);
}
void  beep() //蜂鸣器
{
   int i;              
        for(i=0;i<10;i++)                 
        {
          DELL=~DELL;
           Delay(10);   
         }   
}
void miaobiao()        //跑秒
{
       
        qian=num/1000;        //千位表达式
        bai=num%1000/100;     //百位表达式
        shi=num%100/10;
        ge=num%10;
       
        P2=0xf7;       //打开第四位
        P0=seg_data[qian];
        Delay(5);

        P2=0xfb;        //打开第三位
        P0=seg_data[bai];
    Delay(5);

        P2=0xfd;          //打开第二位
        P0=seg_data[shi];         //送十位段数据
        Delay(5);
       
        P2=0xfe;        //打开第一位
        P0=seg_data[ge];           //送各位段数据
        Delay(5);
       
}
void  Display()   //时间
{  

  P0=0x00;
  P0=seg_data[sec%10];
  P2=0xfe;
  Delay(1);

  P0=0x00;
  P0=seg_data[sec/10];
  P2=0xfd;
  Delay(1);

  P0=0x40;
  P2=0xfb;                                        // 显示--
  Delay(1);

  P0=0x00;
  P0=seg_data[min%10];
  P2=0xf7;
  Delay(1);  
  P0=0x00;
  P0=seg_data[min/10];
  P2=0xef;
  Delay(1);

  P0=0x40;
  P2=0xdf;                           // 显示--
  Delay(1);

  P0=0x00;
  P0=seg_data[hour%10];
  P2=0xbf;
  Delay(1);        
  P0=0x00;
  P0=seg_data[hour/10];
  P2=0x7f;
  Delay(1);

}
void   tiao()
{
   if(k2==0)               
    {
          Delay(5);
          if(k2==0)
          while(!k2)         
      {
          beep();
          TR1=1;
          }
         }
if(k3==0)                       
    {
         Delay(5);
         if(k3==0)
         while(!k3)         
      {
          beep();
          TR1=0;
          }
         }          
if(k4==0)                       
    {
         Delay(5);
         if(k4==0)
         while(!k4)         
      {
          beep();
          num=0;
          }
         }       
}
void  Keyscan()           //按键
{
if(kk==1)
  {
    if(k2==0)                        //分减
    {
          Delay(300);         
     min--;beep();
          if(min==-1)
            min=59;       
         }
         if(k3==0)                        //分加
    {
         Delay(300);         
     min++;beep();
          if(min==60)
            min=0;       
         }
   }
if(kk==2)
   {
      if(k2==0)                          //时减
       {
              Delay(300);
                  hour--;beep();
                  if(hour==-1)          // 注意这里
                    hour=23;       
       }
         if(k3==0)                          //时加
       {
              Delay(300);
                  hour++;beep();
                  if(hour==24)
                    hour=0;       
           }
   }
   if(kk>2)
   {
     kk=0;
   }                                                                 
}
void init()
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;

TH1=(65536-8000)/256;
TL1=(65536-8000)%256;
EA=1;
ET1=1;
ET0=1;
TR1=0;   // 关闭  
TR0=1;
}
void  tirme1() interrupt  3
{
         TH1=(65536-8000)/256;
     TL1=(65536-8000)%256;
         aa1++;

    if(aa1==12)  //  跑秒
           {                 
                aa1=0;         //清零、、
            num++;
            if(num==9999)   // 设置显示几位,
                  {
                    num=0;
                  }
           }
         
}
void  tirme0() interrupt  1
{
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   aa++;
   if(aa==20)   //时间
   {
           aa=0;
        sec++;             
        if(sec==60)
        {
         sec=0;
         min++;
         if(min==60)
         {
           min=0;
           hour++;
           if(hour==24)
           {
             sec=0;min=0;hour=0;
           }
         }
        }
   }
}
void main()
{
init();
while(1)
{
  Keyscan();
  tiao();
  if(k1==0)          //调时间
    {
     Delay(5);
         if(k1==0)                  
         while(!k1)                
     beep();kk++;         
    }
  if (k7==0)         //切换
        {
                Delay(5);               
                if (k7==0)
                while(!k7);
                 flag++;
                if(flag==1)
                {
                    bzw=1;  //时间停  秒表开始
                }
                if(flag==2)
                {
                        bzw=0;         //时间开始         秒表停
                        flag=0;  //清零
                }                                               
        }

  if (bzw==0)
  Display();
  if (bzw==1)
  miaobiao();
}
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的积分奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:32941 发表于 2015-4-28 12:15 | 只看该作者
51黑论坛有你更精彩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表