找回密码
 立即注册

QQ登录

只需一步,快速开始

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

简易单片机电子钟制作

[复制链接]
跳转到指定楼层
楼主
本着免费打样的福利,郑重声明我不是厂商托,
不是广告
不是广告
不是广告,
重要的事说三遍。
拿出了十几年不用的STC,翻箱倒柜两星期,终于找齐了原件,,打算给孩子做个玩具,本以为一两天就搞定的事情,结果搞了一星期,。最后也是终于在参考论坛后,找到BUG,本着搬运他人,现回馈他人的原则,贡献电路代码。


单片机源程序如下:
#include "STC12C5A60S2.h"
#include<intrins.h>

typedef unsigned char uchar;
typedef unsigned int uint;

/* define constants */
#define FOSC 11059200L
//#define MODE1T                      //Timer clock mode, comment this line is 12T mode, uncomment is 1T mode

#ifdef MODE1T
#define T1MS (65536-FOSC/500)      //2ms timer calculation method in 1T mode
#else
#define T1MS (65536-FOSC/12/50)   //50ms timer calculation method in 12T mode
#endif

#define F4KHz (256-FOSC/2/12/1000)   //CLOCKOUT1

sfr WAKE_CLKO = 0x8f;

//数码管共阴极端口选择,低电平
sbit S1        =        P0^7;
sbit S2        =        P0^6;
sbit S3        =        P0^5;
sbit S4        =        P0^4;
//LED共阴极,低电平
sbit S5        =        P0^2;
sbit S6=        P0^1;
sbit S7        =        P0^0;
sbit S8        =        P1^2;
sbit S9        =        P1^3;
sbit S10        =        P1^7;
sbit S11        =        P1^6;
sbit S12        =        P0^3;

//蜂鸣器
sbit fmq = P3^5;

// 按键
sbit KEY_IN_1 = P1^4;
sbit KEY_IN_2 = P1^5;
//sbit KEY_IN_3 = P3^1;
//sbit KEY_IN_4 = P3^0;

//DS1302
sbit sclk = P3^2;
sbit sda  = P3^3;
sbit rst  = P3^4;

//共阴极数码管显示码,0-9,a-f,-,全灭,code区常数
unsigned char code smg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,

                          0x77,0x7C,0x39,0x5E,0x79,0x71,0x40,0x00};

unsigned char num[4]={0,0,0,0};//显示缓冲区
unsigned char alarm_num[4]={0,0,0,0};//alarm显示缓冲区

//60位LED流水灯控制
unsigned char data led_smg [8]= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};


/* define variables */

unsigned char  miao = 0,fen =0,shi =0;                     //TIME
unsigned char  alarm_fen = 0; alarm_shi =12;   //alarm time
unsigned int         count1;                //counter for 1s
unsigned int         key_count;             //按键次数计数,状态切换
bit alarm = 0;                       //时钟启动控制位
bit dq =0;                           //设置时间模式
unsigned char mod = 0;  //设置分=1 设置时=2  ,设置闹钟分=3,设置闹钟时=4,

//------------------------------------------------------


/*----------------------------函数声明-------------------*/
void led_display();
void display();
void alarm_display();
void time();
void KeyScan();
void alarm_prc();
void time_prc();

void delay(unsigned int T)   //us延时函数

{

    unsigned char b,c;

    for(c=T;c>0;c--)

        for(b=5;b>0;b--);

}

void delayms(uint z)     //delayms
{
         uint x,y;
          for(x=z;x>0;x--)
            for(y=848;y>0;y--);
}

/* Timer0 interrupt routines,2ms */
void tm0_isr() interrupt 1
{
     TL0 = T1MS;                     //reload timer0 low byte
     TH0 = T1MS >> 8;                //reload timer0 high byte
                 count1++;
                 time();                        //定时器时钟
}

//-----------------------------------------------

/* main program */
void main()
{
          P2M1 = 0x00;
                P2M0 = 0xff;                                                                                //        P2强推挽
          P2   = 0x00;                                                                                //  全关闭
#ifdef MODE1T
    AUXR = 0x80;                    //timer0 work in 1T mode,timer1 work 12T mode
#endif
    TMOD = 0x21;                    //set timer0 as mode1 (16-bit),set timer1 as mode2 (8-bit auto-reload)
    TL0 = T1MS;                     //initial timer0 low byte
    TH0 = T1MS >> 8;                //initial timer0 high byte
          TL1 = F4KHz;                 //initial timer1
    TH1 = F4KHz;                 //initial timer1
    ET0 = 1;                        //enable timer0 interrupt
    EA = 1;                         //open global interrupt switch
                TR0 = 1;                        //timer0 start running
    while (1)
                 {
     KeyScan();
                        if (dq)
                           {
                                         time_prc();         //设置时钟
                                         display();
          }
                        if(alarm)
                        {
                                 alarm_prc();         //设置闹钟
                                 alarm_display();     //显示设置时间
      }               
                        if((dq == 0) && (alarm ==0))
                        {
                                display();
                    led_display();
             if((alarm_shi==shi)&&(alarm_fen==fen)) { WAKE_CLKO= 0x02;        TR1 = 1 ;}
                         if(fen == (alarm_fen+1))     // 1s
                         {
                         WAKE_CLKO= 0x00;TR1 = 0;
                         }
            }
    }
}
//-------------------- control time function --------------------

void time_prc()
{
                num[3] = fen%10;    //分钟个位
                num[2] = fen/10;    //分钟十位
                num[1] = shi%10;
                num[0] = shi/10;
}

//-----------------------alarm  time function------------------
void alarm_prc()
{
                alarm_num[3] = alarm_fen%10;    //分钟个位
                alarm_num[2] = alarm_fen/10;    //分钟十位
                alarm_num[1] = alarm_shi%10;
                alarm_num[0] = alarm_shi/10;  
}

//--------------------------------key Scan-----------------------
void KeyScan()
{
          if (KEY_IN_1 == 0)
                {
                          delayms(10);
                          if (KEY_IN_1 == 0)              //按键确认
                                   {
              key_count++;              //按键次数计数
                                      while(!KEY_IN_1);         //等待释放
                                                  if(key_count ==1)         // first key
                                                           {
                                                                         TR0 =0;            //关闭定时器
                   P0 = P0|0x0f;
                   P1 = P1|0xcc;      //关闭LED                 
                                                                         dq =1;             //时间设置模式
                                                                         alarm = 0;                                        //闹钟设置关闭
                                                                         mod =1;            // 时间分设置
                 }
                                                        if(key_count == 2)     
                                                           {
                                                                         mod = 2;          //时间时设置
                 }
                                                        if(key_count == 3)     
                                                            {
                                                                                dq = 0;         //时间设置关闭
                                                                                alarm = 1;      //闹钟设置开
                                                                                mod = 3;       //闹钟分设置
                  }
                                                        if(key_count == 4)     
                                                            {
                                                                                mod = 4;       //闹钟时设置
                  }
                                                        if(key_count == 5)    //退出设置,开始记时
                                                            {
                                                                                key_count =0 ;      //
                                                                                alarm = 0;
                                                                                dq = 0;
                                                                                mod =0;
                                                                          TL0 = T1MS;                     //initial timer0 low byte
                    TH0 = T1MS >> 8;                //initial timer0 high byte        
                    TR0=1;
                  }
                                         }
                }

                if(key_count != 0)                //进入设置模式
                {
                   if(KEY_IN_2== 0)
                      {
                               delayms(10);
                               if(KEY_IN_2 == 0)        //确认KEY2按键
                                       {
                  while(!KEY_IN_2);     //等待释放
                                                                     if(mod == 1)
                                                                                      {
                            fen++;
                               if(fen == 60)
                                                                                                                            {
                                                                                                                                                fen = 0;
                                   }                                                                                                                                 
                           }                                                                                                  
                                                                                        if(mod == 2)
                                                                                             {
                                                                                                                 shi++;
                                                                                                                 if(shi == 24)
                                                                                                                     {
                                                                                                                                         shi = 0;
                                  }
                            }
                                                                                        if(mod == 3)
                                                                                              {
                                                                                                                        alarm_fen++;
                                                                                                                        if(alarm_fen == 60)
                                                                                                                          {
                                                                                                                                        alarm_fen =0;
                                 }
                            }
                                                                                        if(mod == 4)
                                                                                              {
                                                                                                                alarm_shi++;
                                                                                                                        if(alarm_shi == 24)
                                                                                                                         {
                                                                                                                                 alarm_shi =0;
                                }
                            }                                                                 
                                                    }
                       }
          }        
}        

//-----------------------------auto 时间更新函数-----------------------------------
void time()
{
         if(count1 == 50)               // 1s
         {
                  count1 = 0;
                  miao++;
                         switch(miao)
                           {
                                          case 1:   led_smg[0] = 0x01;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;        break;
                                                case 2:   led_smg[0] = 0x02;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;        break;                                                               
                                                case 3:   led_smg[0] = 0x04;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;        break;
                                                case 4:   led_smg[0] = 0x08;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
            case 5:   led_smg[0] = 0x10;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 6:   led_smg[0] = 0x20;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;                                                               
                                                case 7:   led_smg[0] = 0x40;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 8:   led_smg[0] = 0x80;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                          case 9:   led_smg[0] = 0x00;led_smg[1] = 0x01;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 10:  led_smg[0] = 0x00;led_smg[1] = 0x02;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;                                                               
                                                case 11:  led_smg[0] = 0x00;led_smg[1] = 0x04;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 12:  led_smg[0] = 0x00;led_smg[1] = 0x08;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
            case 13:  led_smg[0] = 0x00;led_smg[1] = 0x10;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 14:  led_smg[0] = 0x00;led_smg[1] = 0x20;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;                                                               
                                                case 15:  led_smg[0] = 0x00;led_smg[1] = 0x40;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 16:  led_smg[0] = 0x00;led_smg[1] = 0x80;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;   
                                          case 17:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x01;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 18:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x02;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00; break;                                                               
                                                case 19:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x04;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00; break;
                                                case 20:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x08;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00; break;
            case 21:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x10;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00; break;
                                                case 22:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x20;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00; break;                                                               
                                                case 23:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x40;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00; break;
                                                case 24:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x80;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00; break;        
                                          case 25:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x01;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00; break;
                                                case 26:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x02;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;                                                               
                                                case 27:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x04;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 28:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x08;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00; break;
            case 29:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x10;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 30:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x20;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;   break;                                                               
                                                case 31:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x40;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 32:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x80;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;               
                                          case 33:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x01;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;        break;
                                                case 34:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x02;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;        break;                                                               
                                                case 35:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x04;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;        break;
                                                case 36:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x08;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
            case 37:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x10;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 38:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x20;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;                                                               
                                                case 39:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x40;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 40:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x80;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                          case 41:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x01;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 42:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x02;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;                                                               
                                                case 43:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x04;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 44:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x08;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
            case 45:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x10;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 46:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x20;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;                                                               
                                                case 47:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x40;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;
                                                case 48:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x80;led_smg[6] = 0x00;led_smg[7] = 0x00;  break;   
                                          case 49:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x01;led_smg[7] = 0x00;  break;
                                                case 50:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x02;led_smg[7] = 0x00; break;                                                               
                                                case 51:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x04;led_smg[7] = 0x00; break;
                                                case 52:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x08;led_smg[7] = 0x00; break;
            case 53:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x10;led_smg[7] = 0x00; break;
                                                case 54:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x20;led_smg[7] = 0x00; break;                                                               
                                                case 55:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x40;led_smg[7] = 0x00; break;
                                                case 56:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x80;led_smg[7] = 0x00; break;        
                                          case 57:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x01; break;
                                                case 58:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x02;  break;                                                               
                                                case 59:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x04;  break;
                                                case 60:  led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x08; break;
           default :         led_smg[0] = 0x00;led_smg[1] = 0x00;led_smg[2] = 0x00;led_smg[3] = 0x00;
                      led_smg[4] = 0x00;led_smg[5] = 0x00;led_smg[6] = 0x00;led_smg[7] = 0x00;        break;                                                                                
         }
                    if(miao == 60)             //1min
                              {
                                             miao = 0;
                                             fen++;
                                             if(fen == 60)
                                               {
                                                                         fen = 0;
                                                                         shi++;
                                                                         if(shi == 24)
                                                                          {
                                                                                         shi = 0;
                    }
                  }
             }
    }
                num[3] = fen%10;    //分钟个位
                num[2] = fen/10;    //分钟十位
                num[1] = shi%10;
                num[0] = shi/10;
}

//数码管显示函数
void display()
{     
        P2  =  smg[num[0]];
              S1= 0;
              delay(1);
                                P2 =   smg[17];
              S1  = 1 ;
        
              P2 = smg[num[1]];
              S2 = 0;
        delay(1);
                    P2 =   smg[17];        
              S2 = 1;
                        
                    P2 = smg[num[2]];
              S3 = 0;
        delay(1);
                    P2 =   smg[17];        
              S3 = 1;
        
              P2 = smg[num[3]];
              S4 = 0;
        delay(1);
                    P2 =   smg[17];        
              S4 = 1;         
}
//alarm数码管显示函数
void alarm_display()
{     
        P2  =  smg[alarm_num[0]];
              S1= 0;
              delay(1);
                                P2 =   smg[17];
              S1  = 1 ;
        
              P2 = smg[alarm_num[1]];
              S2 = 0;
        delay(1);
                    P2 =   smg[17];        
              S2 = 1;
                        
                    P2 = smg[alarm_num[2]];
              S3 = 0;
        delay(1);
                    P2 =   smg[17];        
              S3 = 1;
        
              P2 = smg[alarm_num[3]];
              S4 = 0;
        delay(1);
                    P2 =   smg[17];        
              S4 = 1;         
}
//流水灯显示
void led_display()
{
              P2  =  led_smg[0];
              S5 = 0;
              delay(1);
                                P2 =   0x00;
              S5  = 1 ;
        
              P2 = led_smg[1];
              S6 = 0;
       delay(1);
                    P2 =   0x00;        
              S6 = 1;
                        
                    P2 = led_smg[2];
              S7 = 0;
        delay(1);
                    P2 =   0x00;        
              S7 = 1;
        
              P2 = led_smg[3];
              S8 = 0;
       delay(1);
                    P2 =   0x00;        
              S8 = 1;
                                
                                       
              P2 = led_smg[4];
              S9 = 0;
        delay(1);
                    P2 =   0x00;        
              S9 = 1;
                                
                                       
              P2 = led_smg[5];
              S10 = 0;
        delay(1);
                    P2 =   0x00;        
              S10 = 1;
                                
                                       
              P2 = led_smg[6];
              S11 = 0;
        delay(1);
                    P2 =   0x00;        
              S11 = 1;
                                
                                       
              P2 = led_smg[7];
              S12 = 0;
        delay(1);
                    P2 =   0x00;        
              S12 = 1;
}


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:57657 发表于 2021-11-27 16:34 | 只看该作者
你这程序太乱,delay 这样写,数码管显示,流水灯什么都要用定时器中断处理才对的吧。

unsigned int delay_ms = 0;
bit _delay_ = 0;

#define delayms(ms) delay_ms=(ms);_delay_=1;while(_delay_)

void tm0_isr() interrupt 1
{
    TL0 = T1MS;
    TH0 = T1MS >> 8;
    count1++;
    time();
    if (_delay_ && !--delay_ms) {
        _delay_ = 0;
    }
}
回复

使用道具 举报

板凳
ID:46065 发表于 2021-11-27 17:37 | 只看该作者
楼主,可以的,竟然给人送钟(终),这要多大的仇啊!
回复

使用道具 举报

地板
ID:88256 发表于 2021-11-27 23:31 | 只看该作者
圆盘LED那里,强迫症患者表示无法接受,首先是数字1呆在了60(应该为0)的位置,所以15也无法呆在水平的位置,偏偏30的位置又是对的(29的丝印也反了)。
然后是LED的方向,从28到57是杂乱无章的
明明是圆盘时钟,却整了个四方形的边框,而且数字太密也不好看,还是0、5、10、15……这样比较好看。
没有RTC,没有亮度控制,所以并不实用(最好闹钟一起整一个)。
玩笑话,没有贬低的意思,别介意啊,我自己用60个WS2812加ESP-12F模块加PCF8563做的,硬件线路很简单的,还可以网络校时。
回复

使用道具 举报

5#
ID:253767 发表于 2021-11-28 07:15 | 只看该作者
谢谢分享!!!
虽不完美,但值得称赞!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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