微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 这个仿真如何加入一个时钟芯片 并让时钟芯片起效

这个仿真如何加入一个时钟芯片 并让时钟芯片起效

时间:10-02 整理:3721RD 点击:
#include <reg51.h>
unsigned char led[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};  //用一维数组定义0-9、横杠、全灭
unsigned char num[10]={2,0,0,8,0,1,1,6,6,8} ;
unsigned char a[6];           
unsigned char second=0,minute=0,hour=12;
unsigned char minute1=0,hour1=0,zdbs=0;
unsigned char b[6]={0x7f,0xbf,0xdf,0xf7,0xfb,0xfd};        //扫描
unsigned char k=0;
unsigned int temp;          // 记录1000毫秒为1秒的变量
unsigned char M,S_flag;        //M是模式,更新时间的4种模式加上正常模式        S_flag闪烁标志
sbit K1=P3^0; //设置键
sbit K2=P3^1; //增加键
sbit K3=P3^2; //减少键
sbit BEEP=P1^3; //蜂鸣器报警

void delay(unsigned n)              //0.2毫秒
{
  int x,y;
  for(x=0;x<n;x++)
  for(y=0;y<24;y++);
}

void init()                 //定时器初始化
{  
  M=0;
  S_flag=0;     //闪烁标志位
  TMOD=0x10;   //定时器1以方式1定时
   TH1=0xfc;
   TL1=0x18;
   EA=1;     //打开总中断
   ET1=1;         //允许定时器1中断
   TR1=1;         //开启定时器1 (开始定时计数)
}
void time1() interrupt 3                 //定时器1中断函数
{
   TH1=0xfc;                          //定时1ms        
   TL1=0x18;
   temp++;
   if(temp==1000)                 //配合定时器定时1s
   {   temp=0;
                   second++;        
   }
        if(second==60)                                
     {    second=0;
             if(minute<59)
                      minute++;
                 else  {   minute=0;
                                   hour++;
                                   hour%=24;   
                       }
        }
   if((hour1==hour&&minute1==minute&&second<10)||(zdbs==minute&&second<1)) //闹钟时间到
   {
   BEEP=0;
   }
   else {BEEP=1;}
   if(temp%250==0)            //每250ms
       S_flag=!S_flag;              //闪烁标志位取反     
    if(k==6)  k=0;
         P0=a[k];
         P2=b[k++];   
         delay(3);         
         P2=0xff;
  //BEEP=1;
}   

void display()                //显示函数
{
        switch(M)
        {
        case 0:
                {
                        a[0]=led[hour/10];        //秒
                        a[1]=led[hour%10]|0x80;
                        a[2]=led[minute/10];  //分
                        a[3]=led[minute%10]|0x80;
                        a[4]=led[second/10];   //时
                        a[5]=led[second%10];
                }break;
        case 1:
                {
                        if(S_flag==1)
                        {
                                a[0]=led[hour/10];
                                a[1]=led[hour%10]|0x80;
                        }
                        else
                        {
                                a[0]=led[11];
                                a[1]=led[11];
                        }
                        a[2]=led[minute/10];
                        a[3]=led[minute%10]|0x80;
                        a[4]=led[second/10];
                        a[5]=led[second%10];
                }break;
        case 2:
                {
                        a[0]=led[hour/10];
                        a[1]=led[hour%10]|0x80;
                        if(S_flag==1)
                        {
                                a[2]=led[minute/10];
                                a[3]=led[minute%10]|0x80;
                        }
                        else
                        {
                                a[2]=led[11];
                                a[3]=led[11];
                        }
                        a[4]=led[second/10];
                        a[5]=led[second%10];
                }break;
        case 3:
                {
                        if(S_flag==1)
                        {
                                a[0]=led[hour1/10];
                                a[1]=led[hour1%10]|0x80;
                        }
                        else
                        {
                                a[0]=led[11];
                                a[1]=led[11];
                        }
                        a[2]=led[minute1/10];
                        a[3]=led[minute1%10]|0x80;
                        a[4]=led[11];
                        a[5]=led[11];
                }break;
        case 4:
                {
                        a[0]=led[hour1/10];
                        a[1]=led[hour1%10]|0x80;
                        if(S_flag==1)
                        {
                                a[2]=led[minute1/10];
                                a[3]=led[minute1%10]|0x80;
                        }
                        else
                        {
                                a[2]=led[11];
                                a[3]=led[11];
                        }
                        a[4]=led[11];
                        a[5]=led[11];
                }
        }
}           

void key_prc()          //按键
{
           if(K1==0)
                 {
                        delay(10);                //延时去抖                          
                        if(K1==0)           //按K1进行模式切换  
                        {   M++;
                                if(M==5)
        M=0;
                        }
                        while(!K1);//等待按键释放
                 }                                                         

       if(M!=0)
       {
         switch(M)
         {
              case 1:                   //模式1——调时
              {
                                if(K2==0)
                                {
                                        delay(10);                //延时去抖         
                                    if(K2==0)       //加键按下
                                        {           
                                                if(hour<23) hour++;
                                                else hour=0;
                                        }
                                        while(!K2);           //等待按键释放
                                }
                                          
                                if(K3==0)
                                {
                                        delay(10);                                         
                                    if(K3==0)        
                                          {
                                                if(hour> 0) hour--;
                                                else hour=23;
                                    }
                                        while(!K3);         
                                }
                      } break;
                                             
                          case 2:                  //模式2——调分
                          {                                 
                                if(K2==0)
                                {
                                        delay(10);               
                                        if(K2==0)      
                                        {                                
                                                if(minute<59) minute++;
                                                else minute=0;
                                        }
                                        while(!K2);
                                }
                                          
                                if(K3==0)
                                {
                                        delay(10);                                
                                        if(K3==0)         
                                          {
                                                if(minute>0) minute--;
                                                else minute=59;
                                    }
                                        while(!K3);
                            }
                        } break;
                                    
                                 case 3:                  //模式3——闹钟调时
                                  {                                          
                                        if(K2==0)
                                                {
                                                        delay(10);                        
                                                if(K2==0)      
                                                                {           
                                                                   if(hour1<23)
                                                           hour1++;
                                                                   else hour1=0;
                                                                }
                                                        while(!K2);         
                                            }
                                          
                                         if(K3==0)
                                                {
                                                        delay(10);                        
                                                        if(K3==0)         
                                                      {
                                                                if(hour1>0)
                                                     hour1--;
                                                                  else hour1=23;
                                                }
                                                        while(!K3);
                                                 }
                                  }         break;
                                         
                                  case 4:                  //模式4——闹钟调分  
                                   {         
                                         if(K2==0)
                                                {
                                                        delay(10);                                         
                                                if(K2==0)      
                                                            {           
                                                                  if(minute1<59)
                                                          minute1++;
                                                                  else minute1=0;
                                                                }
                                                while(!K2);
                                                }
                                
                                        if(K3==0)
                                                {
                                                        delay(10);                //延时去抖                        
                                                    if(K3==0)          //减键按下
                                                      { if(minute1>0)
                                                     minute1--;
                                                                  else minute1=59;
                                                }
                                                while(!K3);                 
                                        }
                                        }  break;
                }
        }                                 
}         

void main()
{
        
          BEEP=1;
          init();
    while(1)
    {
         key_prc();
         display();
        }        
}   


谢谢各位大神了 我真的很急啊

你的显示函数有问题,本来程序显示乱码!改如下才正常显示,void display()                //显示函数
{
        switch(M)
        {
        case 0:
                {
                      P0=a[0]=led[hour/10];        //秒
                                          P2=b[1];
                                          delay(10);
                      P0=a[1]=led[hour%10]|0x80;
                                          P2=b[2];
                                          delay(10);
                      P0=a[2]=led[minute/10];  //分
                                          P2=b[3];
                                          delay(10);
                      P0=a[3]=led[minute%10]|0x80;
                                          P2=b[4];
                                          delay(10);
                      P0=a[4]=led[second/10];   //时
                                          P2=b[5];
                                          delay(10);
                      P0=a[5]=led[second%10];
                                          P2=b[6];
                                          delay(10);
                }break;
        case 1:
                {
                        if(S_flag==1)
                        {
                                P0=a[0]=led[hour/10];
                                                                P2=b[1];
                                                    delay(10);
                                P0=a[1]=led[hour%10]|0x80;
                                                                P2=b[2];
                                                    delay(10);
                        }
                        else
                        {
                                P0=a[0]=led[11];
                                                                P2=b[1];
                                                    delay(10);
                                P0=a[1]=led[11];
                                                                P2=b[2];
                                                    delay(10);
                        }
                        P0=a[2]=led[minute/10];
                                                P2=b[3];
                                            delay(10);
                        P0=a[3]=led[minute%10]|0x80;
                                                P2=b[4];
                                            delay(10);
                        P0=a[4]=led[second/10];
                                                P2=b[5];
                                            delay(10);
                        P0=a[5]=led[second%10];
                                                P2=b[6];
                                            delay(10);
                }break;
        case 2:
                {
                        P0=a[0]=led[hour/10];
                                                P2=b[1];
                                            delay(10);
                        P0=a[1]=led[hour%10]|0x80;
                                                P2=b[2];
                                            delay(10);
                        if(S_flag==1)
                        {
                                P0=a[2]=led[minute/10];
                                                                P2=b[3];
                                                    delay(10);
                                P0=a[3]=led[minute%10]|0x80;
                                                                P2=b[4];
                                                    delay(10);
                        }
                        else
                        {
                                P0=a[2]=led[11];
                                                                P2=b[3];
                                                    delay(10);
                                P0=a[3]=led[11];
                                                                P2=b[4];
                                                    delay(10);
                        }
                        P0=a[4]=led[second/10];
                                                P2=b[5];
                                            delay(10);
                        P0=a[5]=led[second%10];
                                                P2=b[6];
                                            delay(10);
                }break;
        case 3:
                {
                        if(S_flag==1)
                        {
                                P0=a[0]=led[hour1/10];
                                                                P2=b[1];
                                                    delay(10);
                                P0=a[1]=led[hour1%10]|0x80;
                                                                P2=b[2];
                                                    delay(10);
                        }
                        else
                        {
                                P0=a[0]=led[11];
                                                                P2=b[1];
                                                    delay(10);
                                P0=a[1]=led[11];
                                                                P2=b[2];
                                                    delay(10);
                        }
                        P0=a[2]=led[minute1/10];
                                                P2=b[3];
                                            delay(10);
                        P0=a[3]=led[minute1%10]|0x80;
                                                P2=b[4];
                                            delay(10);
                        P0=a[4]=led[11];
                                                P2=b[5];
                                            delay(10);
                        P0=a[5]=led[11];
                                                P2=b[6];
                                            delay(10);
                }break;
        case 4:
                {
                        P0=a[0]=led[hour1/10];
                                                P2=b[1];
                                            delay(10);
                        P0=a[1]=led[hour1%10]|0x80;
                                                P2=b[2];
                                            delay(10);
                        if(S_flag==1)
                        {
                                P0=a[2]=led[minute1/10];
                                                                P2=b[3];
                                                    delay(10);
                                P0=a[3]=led[minute1%10]|0x80;
                                                                P2=b[4];
                                                    delay(10);
                        }
                        else
                        {
                                P0=a[2]=led[11];
                                                                P2=b[3];
                                                    delay(10);
                                a[3]=led[11];
                                                                P2=b[4];
                                                    delay(10);
                        }
                        P0=a[4]=led[11];
                                                P2=b[5];
                                            delay(10);
                        P0=a[5]=led[11];
                                                P2=b[6];
                                            delay(10);
                }
        }
}           

从电路看,单片机还有空余的引脚,如何加时钟芯片,在于你选的时钟芯片,根据芯片连接引脚,再编写对应的程序就可以了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top