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

📄 rili.c

📁 DS1302的1602时钟电路设计LED数码管时钟电路采用24h计时方式
💻 C
📖 第 1 页 / 共 2 页
字号:
#include<ds1302.c>
#include<LCD1602.c>
#include<Music.c>
sbit P32=P3^2;
sbit P33=P3^3;
sbit P34=P3^4;
//注意:以上头文件只能包含一次reg51.h
//把#include<Music.c>中的数组song[]一定要定义为unsigned char code song[].即一定要有code,否则不能生成.hex文件
unsigned char  SetTime_Date[]={0x00,0x00,0x02,0x15,0x01,0x04,0x09};//时间日期初值格式:秒 分 时 日 月 星期 年
//注意:SetTime_Date不能为code型,否则不能进行运算和修改
unsigned char GetDate[]={0,9,'-',0,1,'-',0,1,'-',0,4,'\0'};  //日期格式:年、月、日、星期
unsigned char GetTime[]={0,0,':',0,0,':',0,0,'\0'};  //时间格式: 时、分、秒,注意要在后面加上\0否则会出现乱码
unsigned char Setclock[]={0,0,':',0,0,':',0,0,'\0'};//获取闹钟设置时间
unsigned char Getclock[]={0x0c,0,0};
unsigned char f[5]={0};
unsigned char i,m,z,hour;
int SetT=0,SetD=0;

void IntIT()
{ IT0=1;IT1=1;    //外部中断边沿触发方式
  TMOD=0x15;     //定时/计数方式T1为定时,T0为计数,都为方式1,即16位
  //TR1=1;
  //EX0、EX1在选择模式中断TR0里面再开
  //EX0=1;         //3.2外部中断0
  //EX1=1;         //3.3口,外部中断1
  TR0=1;   //开计数器中断
  ET0=1;         //3.4T0计数中断
  ET1=1;          //音乐定时用
  EA=1;
  TH0=0xff;       //计数器T0计数1次就中断
  TL0=0xff; 
  TL1=0x00;
  TH1=0x00;
}

//.........时间显示函数
void PrintTime()
{unsigned char i=3,j=0,k=2;
 v_Get1302();
 for(i=3;i>0;i--) //注意不能让i=2;i>=0;i--,否则不通,i为char型,
 {GetTime[j++] = ucCurtime[k]/10 + '0';
  GetTime[j++] = ucCurtime[k]%10 + '0';//转为字符
  j++;k--;}
  Gotoxy(2,0);
  Display_string("Time: ");
  Print(GetTime);
  }


//.........日期显示函数
 void PrintDate()
{unsigned char i=4,j=0,k=6;
 v_Get1302();
 for(i=4;i>0;i--) //注意不能让i=2;i>=0;i--,否则不通,i为char型,
   {if(k==5) {GetDate[9] = ucCurtime[k]/10 + '0';//把星期放到后面
              GetDate[10] = ucCurtime[k]%10 + '0';//转为字符
			  }
    else {GetDate[j++] = ucCurtime[k]/10 + '0';
          GetDate[j++] = ucCurtime[k]%10 + '0';//转为字符
	      j++;}
    k--;}
  //Gotoxy(1,0);
  //Display_string("Date:");
  //Print(GetDate);
  }



//.............闹钟设置
void Clock()
{ unsigned char i=3,j=0,k=0;
  //..........获取闹钟时间
   Getclock[0]=uc_R1302(0xc1);//小时
   Getclock[1]=uc_R1302(0xc3);//分
   Getclock[2]=uc_R1302(0xc5);//秒
  for(i=3;i>0;i--) //注意不能让i=2;i>=0;i--,否则不通,i为char型,
    {Setclock[j++] = Getclock[k]/10 + '0';
     Setclock[j++] = Getclock[k]%10 + '0';//转为字符,注意下面用到改数据的地方要减去字符'0'。
     j++;k++;}
  //Gotoxy(2,0);
  //Display_string("Time: ");
  //Print(Setclock);
  }

//.............报时声音
void BaoShi(unsigned char hour)
{unsigned i;
 for(hour;hour>0;hour--)
   {i=50;
    while(i){P00=~P00;Delay(2);i--;}
	MDelay(65000);
    }
  
}

//.............模式选择按键
void Timer0() interrupt 1
{ TH0=0xff;       //计数器T0计数1次就中断
  TL0=0xff; 
  //EX0=1;         //3.2外部中断0
  //EX1=1;         //3.3口,外部中断1
  while(P34==0);
  m++;
}

//............光标移动按键
void Int0() interrupt 0
{     while(P32==0);
      WriteC(0x14);
      WriteC(0x14);
      WriteC(0x14);
      SetT++;        //用来确定光标的位置,以便知道改哪个值,确定时间
      SetD++;        //..确定日期
      
}

//...........修改数值递增,此时显示数据不动
//....按一次加1或自增到所需值时按下确定
void Int1() interrupt 2
{while(P33==0); 
 z=1;
 }


//...........按键识别
void Key()
{//.........按键识别
    if(P32==0){MDelay(10000);if(P32==0){WriteC(0x14);WriteC(0x14); WriteC(0x14);
                                        SetT++;        //用来确定光标的位置,以便知道改哪个值,确定时间
                                         SetD++;        //..确定日期
										}
              }

	if(P33==0){MDelay(10000);if(P33==0)z=1;}
	if(P34==0){MDelay(10000);if(P34==0)m++;}
     
 } 
 
 
 void main()
{// i=0,j=0,k=0,n=0;m=0;z=0;//若前面定义有j,k,n这句也能通过编译,晕!
 i=0;m=0;z=0;
 P00=0;//避免喇叭发出杂音
 //IntIT();
 InitLCD();
 ClearLCD();
 v_Set1302(SetTime_Date);
 
 //....注意:液晶共40个格,全屏移动时最多只能显示40个字符.开头要留几个空,即定位到中间点否则移快就看不到前面的字符
 

⌨️ 快捷键说明

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