📄 rili.c
字号:
#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 + -