⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 试验.c

📁 此程序是基于51单片机的时钟显示的c程序,可分多种模式显示。
💻 C
字号:
/***********DS1302数码管时钟****************/


#include <AT89X51.H>
#include"ds1302.h"

/*********宏定义***************/
#define uint unsigned int
#define uchar unsigned char



/**************全局变量*******************/
uchar led[]={0xc0,0xf9,0xa4,0xb0,0x99,
             0x92,0x82,0xf8,0x80,0x90};//"0~9"代码
        
uchar bitcode[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选
uchar l_1[8]={16,16,16,16,16,18,13,19};//"LOC"显示代码
uchar l_2[8]={16,16,16,21,20,18,13,19};//"UNLOC"显示代码


uchar c[8];//中间变量
uchar cnt , cnt1 , mode1 ; //键盘扫描方式mode1
bit mode_lock;//键盘锁定,1为锁定,0为解锁
bit add_OR_dec_flag; //加减标志位,0为加,1为减

/**************************************************/





/***********z*1ms延时**************/
void delay(uint z)
{
 uint x , y ;
 for(x=z;x>0;x--)
 for(y=121;y>0;y--);
}




/*******中断,显示初始化************/
void init()
{
 TMOD=0x11;
 TH0=-1000/256;
 TL0=-1000%256;
 TR0=1;
 ET0=1;

 EA=1;

 mode1=0;
 mode_lock=0;
}



/********定时器0中断子程序****************/
/******功能:用于动态扫描数码管************/
void  t0() interrupt 1
{
 TH0=-1000/256;
 TL0=-1000%256;
 cnt++;
 if(cnt>7)cnt=0;
 switch(cnt)
 {
 case 0 : P0=led[c[cnt]];P1=bitcode[cnt];break;
 case 1 : P0=led[c[cnt]];P1=bitcode[cnt];break;
 case 2 : P0=led[c[cnt]];P1=bitcode[cnt];break;
 case 3 : P0=led[c[cnt]];P1=bitcode[cnt];break;
 case 4 : P0=led[c[cnt]];P1=bitcode[cnt];break;
 case 5 : P0=led[c[cnt]];P1=bitcode[cnt];break;
 case 6 : P0=led[c[cnt]];P1=bitcode[cnt];break;
 case 7 : P0=led[c[cnt]];P1=bitcode[cnt];break;
 default:break;
 }
}




/********时间显示****************/
void display_time()
{
 c[0]=hour_h;
 c[1]=hour_l;
 c[2]=17;
 c[3]=min_h;
 c[4]=min_l;
 c[5]=17;
 c[6]=sec_h;
 c[7]=sec_l;
}




/**********时间调整************************/
/******功能:按键P2_0:秒减******************/
/******     按键P2_1:秒加******************/
/******     按键P2_2:分减******************/
/******     按键P2_3:分加******************/

void sjtz()
{
      if(P2_0==0)  //秒减
        {
          delay(10);
          if(P2_0==0)
            {
              add_OR_dec_flag=1;
              Set(7,add_OR_dec_flag);//调用时间调整子程序,此程序在DS1302.H文件中
              while(P2_0==0);
            }
        }
     if(P2_1==0)//秒加
        {
          delay(10);
          if(P2_1==0)
            {
			  
			  add_OR_dec_flag=0;
              Set(7,add_OR_dec_flag);//调用时间调整子程序,此程序在DS1302.H文件中
              while(P2_1==0);
            }
        }
      if(P2_2==0)  //分减
        {
          delay(10);
          if(P2_2==0)
            {
              add_OR_dec_flag=1;
              Set(6,add_OR_dec_flag);//调用时间调整子程序,此程序在DS1302.H文件中
              while(P2_2==0);
			}
           
        }
     if(P2_3==0)//分加
        {
          delay(10);
          if(P2_3==0)
            {
			  
			  add_OR_dec_flag=0;
              Set(6,add_OR_dec_flag);//调用时间调整子程序,此程序在DS1302.H文件中
              while(P2_3==0);
            }
        }

}



/*********主函数*************/
void main()
{
 uchar i ;
 init();

 while(1)
 {
 RTC_display();
 display_time();
 sjtz();//显示时间
}
 display_time();

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -