找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51闹钟程序

[复制链接]
跳转到指定楼层
楼主
ID:88489 发表于 2015-8-17 19:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit led6=P1^5;
sbit led7=P1^6;
sbit led8=P1^7;
char shi,fen,miao,shi0=-1,fen0,miao0=1, shi1,fen1,miao1,
     numt0,numt1,numt2,num,num1,num2,num3,i=1,aa,nian,yue=1,ri=1;
char shi2=-1,shi3=-1,fen2,fen3,miao2=2,miao3=3,num4,num5,flag;
uchar code table[]=                                                                  
{
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71
};
void delayms(uint xms)                           //延时
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}

void display(char shi,char fen,char miao)                //显示子函数
{
        char shi1,shi2,fen1,fen2,miao1,miao2;

        shi1=shi%10;
        shi2=shi/10;
        fen1=fen%10;
        fen2=fen/10;
        miao1=miao%10;
        miao2=miao/10;

                dula=1;
                P0=0x80;
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xfd;
                wela=0;
                delayms(1);

            dula=1;
                P0=0x80;
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xf7;
                wela=0;
                delayms(1);

                dula=1;
                P0=table[miao1];
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xdf;
                wela=0;
                delayms(1);

                dula=1;
                P0=table[miao2];
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xef;
                wela=0;
                delayms(1);

                dula=1;
                P0=table[fen1];
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xf7;
                wela=0;
                delayms(1);

                dula=1;
                P0=table[fen2];
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xfb;
                delayms(1);

                dula=1;
                P0=table[shi1];
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xfd;
                wela=0;
                delayms(1);

                dula=1;
                P0=table[shi2];
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xfe;
                wela=0;
                delayms(1);
}
void tiaoshi()                                           //二十四小时制调时
{
        if(key1==0)
          {
                 delayms(5);
                if(key1==0)
                {
                        num++;
                        while(!key1);
                        if(num==3)
                        num=0;
                }
          }
}          
void tiaobiao()
{
        if(num==0)
        {
                led1=0;led3=1;led2=1;
            if(key2==0)
                {
                           delayms(5);
                           if(key2==0)
                        shi++;
                        shi1++;
                        while(!key2);
                        if(shi==24)
                        shi=0;
                        if(shi1==13)
                        shi1=1;
                }
           if(key3==0)
                {
                        delayms(5);
                        if(key3==0)
                        shi--;
                        shi1--;
                        while(!key3);
                        if(shi==-1)
                        shi=23;
                        if(shi1==0)
                        shi1=12;
                }
        }
        if(num==1)
        {
                led2=0;led1=1;led3=1;
                if(key2==0)
                {
                           delayms(5);
                           if(key2==0)
                        fen++;
                        fen1++;
                        while(!key2);
                        if(fen==60)
                        fen=0;
                        if(fen1==60)
                        fen1=0;
                }
        if(key3==0)
                {
                        delayms(5);
                        if(key3==0)
                        fen--;
                        fen1--;
                        while(!key3);
                        if(fen==-1)
                                fen=59;
                        if(fen1==-1)
                                fen1=59;
                }
        }  
        if(num==2)
        {
                led3=0;led2=1;led1=1;
                if(key2==0)
                {
                           delayms(5);
                           if(key2==0)
                        miao++;
                        miao1++;
                        while(!key2);
                        if(miao==60)
                        miao=0;
                        if(miao1==60)
                        miao1=0;
                }
                if(key3==0)
                {
                        delayms(5);
                        if(key3==0)
                        miao--;
                        miao1--;
                        while(!key3);
                        if(miao==-1)
                        miao=59;
                        if(miao1==-1)
                        miao1=59;
                }
        }
}         

void moshi()                                        //模式选择
{     
        if(key4==0)
    {
                delayms(5);
                if(key4==0)
                {
                        aa++;
                        if(aa==7)
                        aa=0;
                        while(!key4);
                }
        }
}
void naozhong()                                                                                   //闹钟设置
{
        if(key1==0)
        {
                delayms(5);
                if(key1==0)
                  num1++;
                  num4++;
                  num5++;
                  if(num1==2)
                    num1=0;
                  if(num4==2)
                    num4=0;
                  if(num5==2)
                    num5=0;
                while(!key1);
        }
}
void sznz()
{
        if(num1==0)
        {       
                led1=0;led2=1;led3=1;         
                if(key2==0)
                {         
                        delayms(5);
                        if(key2==0)
                         {                 
                                  shi0++;
                                  if(shi0==24)
                                  shi0=0;
                                  while(!key2);
                          }
                 }
        }
        if(num1==1)
        {       
            led2=0; led1=1;led3=1;
                  if(key2==0)
                {
                        delayms(5);
                        if(key2==0)
                         {
                                   fen0++;
                                   if(fen0==60)
                                   fen0=0;
                                   while(!key2);
                         }
                 }
        }
  if(key3==0)
    {
                delayms(5);
                if(key3==0)
                {
                  flag++;
                  P1=0;
                  if(flag==2)
                  flag=0;
                  while(!key3);
                }           
        }
}
void sznz1()
{
        if(num4==0)
        {       
                led1=0;led2=1;led3=1;         
                if(key2==0)
                {         
                        delayms(5);
                        if(key2==0)
                         {                 
                                  shi2++;
                                  if(shi2==24)
                                  shi2=0;
                                  while(!key2);
                          }
                 }
        }
        if(num4==1)
        {       
            led2=0; led1=1;led3=1;
                  if(key2==0)
                {
                        delayms(5);
                        if(key2==0)
                         {
                                   fen2++;
                                   if(fen2==60)
                                   fen2=0;
                                   while(!key2);
                         }
                 }
        }
   if(key3==0)
    {
                delayms(5);
                if(key3==0)
                 {
                         flag++;
                          P1=0;
                    if(flag==2)
                      flag=0;
                         while(!key3);
                 }                           
        }
}
void sznz2()
{
        if(num5==0)
        {       
                led1=0;led2=1;led3=1;         
                if(key2==0)
                {         
                        delayms(5);
                        if(key2==0)
                         {                 
                                  shi3++;
                                  if(shi3==24)
                                  shi3=0;
                                  while(!key2);
                          }
                 }
        }
        if(num1==1)
        {       
            led2=0; led1=1;led3=1;
                  if(key2==0)
                {
                        delayms(5);
                        if(key2==0)
                         {
                                   fen3++;
                                   if(fen3==60)
                                   fen3=0;
                                   while(!key2);
                         }
                 }
        }
   if(key3==0)
    {
                delayms(5);
                if(key3==0)
                {
                  flag++;
                  P1=0;
                  if(flag==2)
                  flag=0;
                  while(!key3);
                }            
        }
}
void riqi()                                        //调日期
{
        if(key1==0)
        {
                delayms(5);
                if(key1==0)
                {
                        num2++;
                        if(num2==3)
                        num2=0;
                        while(!key1);
                }
        }       
}
void xgrq()
{
                if(num2==0)
        {       
                led1=0;led3=1;led2=1;         
                if(key2==0)
                {         
                        delayms(5);
                        if(key2==0)
                         {                 
                                  nian++;
                                  while(!key2);
                          }
                 }
                if(key3==0)
                {
                        delayms(5);
                        if(key3==0)
                          {
                                  nian--;
                                  while(!key3);
                          }
                }
        }
        if(num2==1)
        {          
                led2=0;led1=1;led3=1;
                if(key2==0)
                {
                        delayms(5);
                        if(key2==0)
                         {
                                   yue++;
                                   if(yue==13)
                                   yue=1;
                                   while(!key2);
                         }
                 }
                if(key3==0)
                {
                        delayms(5);
                        if(key3==0)
                        {
                                        yue--;
                                        if(yue==0)
                                        yue=12;
                                        while(!key3);
                        }
                }
        }
                if(num2==2)
        {          
                  led3=0; led2=1;led1=1;
                  if(key2==0)
                {
                        delayms(5);
                        if(key2==0)
                         {
                                   ri++;
                                   if(ri==32)
                                   ri=1;
                                   while(!key2);
                         }
                 }
                if(key3==0)
                {
                        delayms(5);
                        if(key3==0)
                        {
                                        ri--;
                                        if(ri==0)
                                        ri=31;
                                        while(!key3);
                        }
                }
        }               
}
void init()
{
        TMOD=0x11;
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        TH1=(65536-45872)/256;
        TL1=(65536-45872)%256;
        EA=1;
        ET0=1;
        ET1=1;
        TR0=1;
        TR1=1;
}

void main()
{         
    init();       
        while(1)
        {       
            moshi();           
                   if(aa==0)                                                                                                //时钟24小时制
                 {                   
                           display(shi,fen,miao);
                           tiaobiao();
                           tiaoshi();
                  }
                 if(aa==1)                                                                                                  //时钟12小时制
                 {                  
                           display(shi1,fen1,miao1);
                           tiaobiao();
                           tiaoshi();
                  }
           if(aa==2)                                                                                                //日期
                {
                        display(nian,yue,ri);
                        riqi();
                        xgrq();
                }                                                                               
           if(aa==3)                                                                                                      //闹钟 1
                {                                                                                         
                        display(shi0,fen0,miao0);
                        naozhong();
                        sznz();
                }
           if(aa==4)                                                                                                  //闹钟 2
                 {
                        display(shi2,fen2,miao2);
                        naozhong();
                        sznz1();
                 }
                if(aa==5)                                                                                                  //闹钟 3
                 {
                        display(shi3,fen3,miao3);
                        naozhong();
                        sznz2();
                 }
                if(aa==6)
                 {
                          if(key1==0)
                                {
                                        delayms(5);
                                        if(key1==0)
                                        {
                                                 TR1=~TR1;
                                                beep=1;
                                                 P0=0xf7;
                                                while(!key1);
                                        }
                                }
                    if(key2==0)
                                {
                                        delayms(5);
                                        if(key2==0)
                                        beep=1;
                                        delayms(10000);
                                        beep=0;
                                        delayms(5000);
                                }
                       
                 }
        }                               
}

void T0_time() interrupt  1
{
       
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        numt0++;
        if(numt0==20)
        {
                numt0=0;

                miao++;                                                                        //二十四小时制
                if(miao==60)
                {
                        miao=0;fen++;
                        if(fen==60)
                        {
                                fen=0;shi++;
                                if(shi==24)
                                {
                                        shi=0 ;
                                        ri++;
                                if(
                                                (ri==32&&yue==1)||(ri==30&&yue==2)||(ri==32&&yue==3)||(ri==31&&yue==4)||
                                                (ri==32&&yue==5)||(ri==31&&yue==6)||(ri==32&&yue==7)||(ri==32&&yue==8)||
                                                (ri==31&&yue==9)||(ri==32&&yue==10)||(ri==31&&yue==11)||(ri==32&&yue==12)
                                            )
                                                  {
                                                        ri=1;
                                                        yue++;
                                                  }
                                                if(yue==13)
                                                        {
                                                                   yue=1;
                                                                nian++;
                                                        }
                                }
                        }
                }
                miao1++;
       
                if(miao1==60)                 //十二小时制
                  {
                          miao1=0;
                        fen1++;
                        if(fen1==60)
                          {
                                  fen1=0;
                                shi1++;
                                if(shi1==13)
                                {
                                  i++;
                                  if(i%2==0)
                                  {
                                        led8=0;
                                        led7=1;
                                   }
                                  if(i%2!=0)
                                  {
                                    led8=1;
                                        led7=0;
                                  }
                                  shi1=1;
                                  
                                }
                          }
                  }
        }
}
void T1_time() interrupt  3
{
        TH1=(65536-45872)/256;
        TL1=(65536-45872)%256;
        numt1++;
       
                 
               
                if(flag==0)
                  {
                          if(numt1==20)
                        {
                                 numt1=0;
                             if(
                                           (shi0==shi&&fen0==fen&&miao<10)||
                                           (shi2==shi&&fen2==fen&&miao<10)||                          //闹钟响
                                           (shi3==shi&&fen3==fen&&miao<10)
                                  )                       
                                        beep=0;
                        else
                                        beep=1;
                        }       
                  }
                if(flag==1)
                          {                 beep=1;
                                 if(numt1==20)
                                  
                                   {
                                         numt1=0;
                                        
                                 
                                   if(
                                           (shi0==shi&&fen0==fen&&miao<12)||
                                           (shi2==shi&&fen2==fen&&miao<12)||                          //闹钟响
                                           (shi3==shi&&fen3==fen&&miao<12)
                                      )                               
                                            beep=0;
                                }
                                                       
                          }                                                         
       
}                             
               

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

使用道具 举报

沙发
ID:60515 发表于 2015-8-18 09:07 来自手机 | 只看该作者
实践成功??有没有电路图。
回复

使用道具 举报

板凳
ID:54731 发表于 2015-8-18 17:56 | 只看该作者
楼主:你用51单片机定时与实际时间相差多少?不过你思路可以,玩玩还是可以的,拿来做成实际东西可能不能吧?
回复

使用道具 举报

地板
ID:94340 发表于 2015-11-1 19:53 | 只看该作者
要是有图就好了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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