📄 new0401.c
字号:
break;
}
case 1: //时
{
zf_flag=0;
disnum(num0+alarm_hour1/10*16,32,2);
disnum(num0+alarm_hour1%10*16,40,2);
break;
}
case 2: //分
{
zf_flag=0;
disnum(num0+alarm_min1/10*16,56,2);
disnum(num0+alarm_min1%10*16,64,2);
break;
}
}
zf_flag=bit_temp;
}
//======================
//显示:闹钟模式设置 振动|声音|关闭
//======================
void freshdis3(uchar posit)
{
bit bit_temp;
bit_temp=zf_flag;
switch(posit)
{
case 0: //关闭
{
zf_flag=1;
dishz(char3,8,0);
dishz(char4,24,0);
dishz(char10,40,0);
dishz(char11,56,0);
dishz(char12,72,0);
dishz(char13,88,0);
disnum(space,32,2);
disnum(space,72,2);
disnum(space,80,2);
disnum(space,88,2);
disnum(space,96,2);
zf_flag=0;
dishz(char5,40,2);
dishz(char6,56,2);
break;
}
case 1: //声音
{
zf_flag=0;
dishz(char14,40,2);
dishz(char15,56,2);
break;
}
case 2: //振动
{
zf_flag=0;
dishz(char1,40,2);
dishz(char2,56,2);
break;
}
}
zf_flag=bit_temp;
}
//==================
//显示: 闹钟设置2 00日00:00
//==================
void freshdis4(uchar posit)
{
bit bit_temp;
bit_temp=zf_flag;
switch(posit)
{
case 0:
{
disnum(space,0,0);
disnum(space,8,0);
disnum(space,16,0);
disnum(space,88,0);
disnum(space,96,0);
disnum(space,104,0);
disnum(space,72,2);
disnum(space,80,2);
disnum(space,88,2);
disnum(space,104,2);
disnum(space,112,2);
dishz(char3,24,0);
dishz(char4,40,0);
dishz(char12,56,0);
dishz(char13,72,0);
disnum(num2,88,0);
disnum(num0+alarm_day/10*16,32,2);
disnum(num0+alarm_day%10*16,40,2);
dishz(char9,48,2);
if(conver)
{disnum(num0+alarm_hour2/10*16,64,2);
disnum(num0+alarm_hour2%10*16,72,2);}
else
{alarm_hour=alarm_hour2>12? (alarm_hour2-12):alarm_hour2;
disnum(num0+alarm_hour2/10*16,64,2);
disnum(num0+alarm_hour2%10*16,72,2);
}
disnum(colon,80,2);
disnum(num0+alarm_min2/10*16,88,2);
disnum(num0+alarm_min2%10*16,96,2);
break;
}
case 1: //日
{
zf_flag=0;
disnum(num0+alarm_day/10*16,32,2);
disnum(num0+alarm_day%10*16,40,2);
break;
}
case 2: //时
{
zf_flag=0;
disnum(num0+alarm_hour2/10*16,64,2);
disnum(num0+alarm_hour2%10*16,72,2);
break;
}
case 3: //分
{
zf_flag=0;
disnum(num0+alarm_min2/10*16,88,2);
disnum(num0+alarm_min2%10*16,96,2);
break;
}
}
zf_flag=bit_temp;
}
//=================
//按键处理
//=================
void keydo(void)
{
switch(shift)
{
case 0: //正常显示
freshdis1(0);
break;
case 1: //校时间
if(clr==1)
{
freshdis1(0);
clr=0;
}
freshdis1(change+1);
break;
case 2: //闹钟1调节
if(clr==1)
{
freshdis2(0);
clr=0;
}
freshdis2(change+1);
break;
case 3: //闹钟2调节
if(clr==1)
{
freshdis4(0);
clr=0;
}
freshdis4(change+1);
break;
case 4: //闹钟模式
if(clr==1)
{
freshdis3(0);
clr=0;
}
freshdis3(change);
break;
}
}
//================= //**********我加的
// 音乐子程序 //**********我加的
//================= //**********我加的
void music(uchar mus) //**********我加的
{
uchar mus; //**********我加的
switch(mus) //**********我加的
{ //**********我加的
case 0: //**********我加的
{
//=================
//按键扫描函数
//=================
void keyscan(void)
{
uchar full_mouth;
if(key1==0) //key1切换
{
delay5ms(2);
if(key1==0)
{
while(key1==0);
if((alarm_hour1==hour)&&(alarm_min1==minute)||((alarm_day==day)&&(alarm_hour2==hour)&&(alarm_min2==minute))) //在闹钟响时按此键关闭
{
alarm_switch=0;
disnum(space,8,2);
disnum(space,16,2);
}
now_second=second;
clr=1;
disp_flag=0;
change=0;
shift++; //shift=0,1,2,3分别表示'正常/校时/校闹1/校闹2/闹模
if(shift>=6)shift=0; //**********把5改为6加了个”转换 “
if(shift!=0)disp_flag=0;
else disp_flag=1;
}
}
else if(key2==0) //key2切换
{
delay5ms(2);
if(key2==0)
{
while(key2==0);
if((alarm_hour1==hour)&&(alarm_min1==minute)||((alarm_day==day)&&(alarm_hour2==hour)&&(alarm_min2==minute))) //在闹钟响时按此键关闭
{
alarm_switch=0;
disnum(space,8,2);
disnum(space,16,2);
}
now_second=second;
clr=1;
disp_flag=0;
change++;
switch(shift)
{
case 1: //校时
if(change>=7)change=0;
break;
case 2: //校闹1
if(change>=2)change=0;
break;
case 3: //校闹2
if(change>=3)change=0;
break;
case 4: //闹模
{
if(change>=3)change=0;
switch(change)
{
case 0: //关闭
alarm_switch=0;
disnum(space,8,2);
disnum(space,16,2);
TR1=0;
break;
case 1: //声音
alarm_switch=1;
dishz(char17,8,2);
mode=1;
break;
case 2: //振动
alarm_switch=1;
mode=1;
dishz(char16,8,2);
break;
}
break;
}
case 5: //*********加的********转换
if(conver)conver=0;//*********加的
else conver=1;//*********加的
dishz(char18,8,2);//*********加的
dishz(char19,16,2);//*********加的
break; //*********加的
case 6: //***********选曲
alarm_switch=1;//********加的
made=0; //********加的
dishz(char20,8,2);
disnum(num0+mus*16,16,2);//********加的
break; //********加的
}
}
}
else if(key3==0) //key3数字的递增
{
delay5ms(2);
if(key3==0)
{
if(shift==0){black=0;freshdis2(0);} //只显示闹钟时间
while(key3==0);
now_second=second;
clr=1;
disp_flag=0;
switch(shift)
{
case 1: //校时
{
switch(change)
{
case 0:
hour++;
if(hour>=24)hour=0;
break;
case 1:
minute++;
if(minute>=60)minute=0;
break;
case 2:
second=0;
break;
case 3:
week++;
if(week>=7)week=0;
break;
case 4:
year++;//*******下面这句我删了原句是:if(year>=2051)year=1982;
break;
case 5:
mouth++;
if(mouth>=13)mouth=1;
break;
case 6:
day++;
if(mouth==1||mouth==3||mouth==5||mouth==7||mouth==8||mouth==10||mouth==12)
{
full_mouth=32;
}
else if(mouth==2)
{
if((year%4==0&&year%100!=0)||(year%400==0)){full_mouth=29;}//*******我把括号里的year%4改了
else{full_mouth=30;}
}
else{full_mouth=31;}
if(day>=full_mouth)
{day=1;}
break;
}
break;
}
case 2: //校闹1
{
switch(change)
{
case 0: //时
alarm_hour1++;
if(alarm_hour1>=24)alarm_hour1=0; //*******这里需要24/12转换吗?我觉得不用吧
break;
case 1: //分
alarm_min1++;
if(alarm_min1>=60)alarm_min1=0;
break;
}
break;
}
case 3: //校闹2
{
switch(change)
{
case 0: //日
alarm_day++;
if(alarm_day>=32)alarm_day=1;
break;
case 1: //时
alarm_hour2++;
if(alarm_hour2>=24)alarm_hour2=0;
break;
case 2: //分
alarm_min2++;
if(alarm_min2>=60)alarm_min2=0;
break;
}
}
case 6: //*********选曲
{
mus++;
if(mus>=4)mus=0;
}
}
}
keydo();
}
//=============
//闹钟频率产生
//说明:1khz的响四声,停四声时间的声响
//=============
void timer1(void)interrupt 3
{
TH1=8;
TL1=0x18;
i++;
if(i>=10)
{
i=0;
j++;
m=~m;
if(j>=7){j=0;n=~n;}
}
if(m&&n)
{
sound=~sound;//*******这句是什么意思?要加音乐的话怎么办呢?我没看懂这个中断,我要在这里加个音乐子程序,还没找到合适的。
}
}
//===========
//定时函数
//===========
void timer0(void) interrupt 1
{
suchar i;
uchar full_mouth;
TH0=0x3c;
TL0=0xb0;
if(i>=200) //***********应该把20改为200吧
{
i=0;
second++;
if(second>=60)
{
second=0;
minute++;
if(minute>=60)
{
minute=0;
hour++;
if(hour>=24)
{
hour=0;
day++;
week++;
if(week>7)week=1;
if(mouth==1||mouth==3||mouth==5||mouth==7||mouth==8||mouth==10||mouth==12)
{
full_mouth=32;
}
else if(mouth==2)
{
if((year%4==0&&year%100!=0)||(year%400==0)){full_mouth=29;}//*******我把括号里的year%4改了
else{full_mouth=30;}
}
else{full_mouth=31;}
if(day>=full_mouth)
{
day=1;
mouth++;
if(mouth>=13)
{
mouth=1;
year++;
}
}
}
}
}
}
i++;
}
main()
{
TMOD=1;
ET0=ET1=EA=1;
TR0=1;
TH0=0x3c;
TL0=0xb0;
TH1=8;
TL1=0x18;
year=1980;//****要求是1980开始
now_second=-4;
mouth=day=alarm_day=1;
zf_flag=1;
disp_flag=alarm_switch=0;
conver=1; //**********我加的
lcd_reset();
clear();
while(1)
{
keyscan(); //按键扫描函数
if(alarm_switch==1) //是否开闹钟?
{
if((alarm_hour1==hour)&&(alarm_min1==minute)||((alarm_day==day)&&(alarm_hour2==hour)&&(alarm_min2==minute))) //闹钟时间到
{
if(mode==1) //声音
{
TR1=1;
moto=1;
}
else //振动
{
moto=0;
TR1=0;
}
}
else //关闭
{
TR1=0;
moto=sound=1;
}
}
else
{
moto=sound=1;
TR1=0;
}
if(disp_flag==1)
{freshdis1(0);}
if(second<=(now_second+3)){black=0;}
else{black=1;now_second=-4;}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -