找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC89C52时钟显示加闹钟功能(4位)显示更多位添加相应程序就好

[复制链接]
跳转到指定楼层
楼主
ID:379074 发表于 2019-1-12 11:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
部分程序如下:
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit LA=P1^2;//段选
sbit LB=P1^3;//段选
sbit LC=P1^4;//段选
sbit deep=P1^5;//闹钟
u8 i,j,k,m;
u8 a,b,c,d;
u16 e,s1,s2,s3,s4,s5,s6,s7;//s1秒加,s2秒减,s3分加,s4分减,s5启动,s6暂停,s7定时开启

u8 code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //显示0~9 共阴
u8 code smg1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //显示0~9加小数点
void delay(u16 x)
{
   while(x--);                          
}
void digital()
{
   u8 t;
   a=0,b=0,c=0,d=0;
   for(t=0;t<4;t++)
   {
         switch(t)
         {
           case 0:LA=0;LB=0;LC=1;i=0;
                  P0=smg[i];break;
           case 1:LA=1;LB=1;LC=0;j=0;
                  P0=smg[j];break;
           case 2:LA=0;LB=1;LC=0;k=0;
                  P0=smg1[k];break;
           case 3:LA=1;LB=0;LC=0;m=0;
                  P0=smg[m];break;
           default:break;
         }
         delay(100);
     P0=0x00;//数码管消隐
   }
}
void keypros()//计时启动前手动调节时间
{
  P2=0x7f;
  if(P2!=0x7f)
  {
           delay(100);
         if(P2!=0x7f)
         {
                switch(P2)
                {
                   case 0x77:s1=0;break;
                   case 0x7b:s2=0;break;
                   case 0x7d:s3=0;break;
                   case 0x7e:s4=0;break;
                   default:break;
                }
                while(P2!=0x7f)
            {
              LA=0;LB=0;LC=1;P0=smg[i];delay(100);P0=0x00;
          LA=1;LB=1;LC=0;P0=smg[j];delay(100);P0=0x00;
          LA=0;LB=1;LC=0;P0=smg1[k];delay(100);P0=0x00;
          LA=1;LB=0;LC=0;P0=smg[m];delay(100);P0=0x00;
                }
         }
  }
  P2=0xbf;
  if(P2!=0xbf)
  {
           delay(100);
         if(P2!=0xbf)
         {
                switch(P2)
                {
                   case 0xb7:s5=0;break;
                   case 0xbd:s7=0;break;
                }
            while(P2!=0xbf)
            {
                  LA=0;LB=0;LC=1;P0=smg[i];delay(100);P0=0x00;
          LA=1;LB=1;LC=0;P0=smg[j];delay(100);P0=0x00;
          LA=0;LB=1;LC=0;P0=smg1[k];delay(100);P0=0x00;
          LA=1;LB=0;LC=0;P0=smg[m];delay(100);P0=0x00;
            }
         }
  }//判断是否有按键按下
  if(s1==0)//秒加
  {
          if(i==9)
          {
            i=0;
            if(j==5)
            {
              j=0;
                  if(k==9)
                  {
                    k=0;
                    if(m==5)
                    {
                      i=0,j=0,k=0,m=6;
                    }
                    else m++;
                  }
                   else k++;
            }
            else j++;
          }
          else i++;
          s1=1;
  }       
  if(s2==0)//秒减
  {
      if(i==0)
          {
            i=9;
            if(j==0)
            {
              j=5;
                  if(k==0)
                  {
                    k=9;
                    if(m==0)
                    {
                      i=0,j=0,k=0,m=0;
                    }
                    else m--;
                  }
                   else k--;
            }
            else j--;
          }
          else i--;
            s2=1;
  }
  if(s3==0)//分加
  {
          if(k==9)
      {
            k=0;
            if(m==5)
            {
                    k=0,m=6;
        }
            else m++;
      }
          else k++;
            s3=1;
  }
  if(s4==0)//分减
  {
          if(k==0)
      {
            k=9;
            if(m==0)
            {
                    k=0,m=0;
        }
            else m--;
      }
          else k--;
            s4=1;
  }
  if(s7==0)//定时
  {
    a=i,b=j,c=k,d=m;
        s7=1;
  }       
  LA=0;LB=0;LC=1;P0=smg[i];delay(100);P0=0x00;
  LA=1;LB=1;LC=0;P0=smg[j];delay(100);P0=0x00;
  LA=0;LB=1;LC=0;P0=smg1[k];delay(100);P0=0x00;
  LA=1;LB=0;LC=0;P0=smg[m];delay(100);P0=0x00;
}
void chushi() //定时器T0初始化
{
  TMOD=0X01;//方式1,16位。
  TH0=0XD8;//初值设定
  TL0=0XF0;//10ms后溢出
  EA=1;ET0=1;
  TR0=1;//计时启动
}
void dig() //计时子函数!!!
{
  i++;
  if(i>9)
  {
          i=0;j++;
    if(j==6&&i==0)
    {
          j=0;k++;       
      if(k>9)
      {
            k=0;m++;
        if(m==6&&k==0&&j==0&&i==0)
        {
               TR0=0;//时间暂停
        }
          }
        }
  }
  LA=0;LB=0;LC=1;P0=smg[i];delay(100);P0=0x00;
  LA=1;LB=1;LC=0;P0=smg[j];delay(100);P0=0x00;
  LA=0;LB=1;LC=0;P0=smg1[k];delay(100);P0=0x00;
  LA=1;LB=0;LC=0;P0=smg[m];delay(100);P0=0x00;
}  
void main()        //主函数
{



STC89C52数字时钟加闹钟(四位数码管显示).pdf

44.57 KB, 下载次数: 25, 下载积分: 黑币 -5

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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