问题遇到的现象和发生背景
网上查资料做了个定时闹钟的pretous,但是功能无法实现,哪位大神能帮我调试一下。
仿真图和keil程序文件上传到了蓝奏云
(https://wwqv.lanzout.com/ik0yO0hm8fud)
keil程序如下,编译的时候有一个警告,网上搜了一下,说好像会有调用冲突(调试的时候最好把程序的功能也注释一下)
```c
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code shuzi[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x20};
uchar kongbai=0x20;
sbit rs=P2^5;
sbit rw=P2^6;
sbit en=P2^7;
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit led_miao=P1^7;
sbit buzz=P2^3;
sbit lamp=P2^4;
uchar shi1=0x85,shi2=0x86;
uchar fen1=0x88,fen2=0x89;
uchar ns1=0xcb,ns2=0xcc;
uchar nf1=0xce,nf2=0xcf;
uchar aaak1=1,aaak2=1,aaak3=1,aaak4=1, clockon, ringoff;
uchar b,c,d,e,ch,hou=10;
uchar bn,cn,dn,chn,houn=10;
uchar tt0, tt1, tt2, tt3, tt4, change, ho=10;
int tt5, a, an;
uchar pt;
void time0();
//-----时钟说明-----//
// ab:cd //
//-----闹钟说明-----//
// an bn:cn dn //
//------------------//
void delay (uint z) //延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110; y>0;y--);
}
void wc(uchar com)
{
rs=0;
P0=com;
delay (5) ;
en=1;
delay(5);
en=0;
}
void wd(uchar date)
{
rs=1;
P0=date;
delay(5);
en=1;
delay(5);
en=0;
}
void init()
{
en=0;
rs=0;
rw=0;//写数据或指令时,的口必须为低电平
wc(0x38);
wc(0x0c);
wc(0x06);//写一个字符后地址指针加
wc(0x01);
}
void showtime(uchar fen_1,uchar fen_2,uchar f1,uchar f2)
{
wc(fen_1);delay(1);
wd(shuzi[f1]);delay(1);
wc(fen_2);delay(1);
wd(shuzi[f2]);delay(1);
}
void showmao(uchar kkkkk)
{
if(kkkkk==0)
{wc(0x87);delay(1);wd(0x3a);delay(1);}
else if(kkkkk==1)
{wc(0xcd);delay(1);wd(0x3a);delay(1);}
else
{wc(0xcd);delay(1);wd(kongbai);delay(1);}
}
void key()
{
if(k1==0)//1 start
{
delay(100);
if(k1==0)
{
wc(0x80+0x40);delay(1);
wd(0x59);delay(1);
delay(100);
while(1)
{
if(k1==0) //1-1 start
{
delay(100);
if(k1==0)
{
b++;
if(b>=hou)
{
ch++;
if(ch>=2)
hou=4;
else
hou=10;
if(a>=2&&b>=hou)
{
a=(-1);
b=0;
ch=0;
hou=10;
}
a++;
b=0;
}
showtime(shi1,shi2,a,b);
}
}//1-1 end
if(k2==0)//1-2 start
{
delay (100);
if(k2==0)
{
d++;
if(d>=10)
{
d=0;
c++;
if(c>=6)
c=0;
}
showtime (fen1, fen2,c, d);
}
}//1-2 end
if(k3==0)//1-3 start
{
wc (0x80+0x40);delay(1);
wd(kongbai);delay(1) ;
tt5=a;tt4=b;tt3=c;tt2=d;
EA=1;ET0=1;TR0=1;
break;
}//1-3 end
if(k4==0)//1-4 start
{
//待定
}//1-4 end
}
}
}//1 end
if(k2==0)//2 start
{
delay (100) ;
if(k2==0)
{
if(aaak1==1)
{
aaak1++;
wc(0x80+0x41);delay(1);wd(0x59);delay(1);
showtime (ns1,ns2,an,bn) ;
showmao(1) ;
showtime (nf1,nf2,cn,dn);
}
else
{
wc(0x80+0x41);delay(1);wd(kongbai);delay(1);
showtime(ns1,ns2,10,10);
showtime(nf1,nf2,10,10);
showmao(2) ;
aaak1=1;
}
}
}//2 end
if(k3==0)//3 start
{
delay (100);
if(k3==0)
{
showtime (ns1,ns2,an,bn) ;
showmao(1) ;
showtime(nf1,nf2,cn,dn);
wc(0x80+0x42);delay(1);wd(0x59);delay(1);
delay (100) ;
while(1)
{
if(k1==0)//3-1 start
{
delay(100);
if(k1==0)
{
bn++;
if (bn>=houn)
{
chn++;
if(chn>=2)
houn=4;
else
houn=10;
if(an>=2&&bn>=houn)
{
an=(-1);
bn=0;
chn=0;
houn=10;
}
an++;
bn=0;
}
showtime(ns1, ns2, an, bn);
}
}//3-1 end
if(k2==0)//3-2 start
{
delay (100);
if(k2==0)
{
dn++;
if(dn>=10)
{
dn=0;
cn++;
if(cn>6)
cn=0;
}
showtime(nf1, nf2, cn, dn);
}
}//3-2 end
if(k3==0)//3-3 start
{
wc(0x80+0x42);delay(1);wd(kongbai);delay(1);
showtime(ns1, ns2, 10, 10);
showtime(nf1, nf2, 10, 10);
showmao(2) ;
break;
}//3-3 end
if(k4==0)//3-4start
{
delay(100);
if(k4==0)
{
if(aaak3==1)
{
aaak3++;ringoff=1;
wc(0x80+0x43);delay(1);wd(0x52);delay(1);
}
else
{
aaak3=1;ringoff=0;
wc(0x80+0x43);delay(1);wd(kongbai) ;delay(1);
}
}
}//3-4 end
}
}
}//3 end
if(k4==0)//4 start
{
delay (100) ;
if(k4==0)
{
if(aaak4==1)
{
aaak4++;
lamp=1;
clockon=1;
wc(0x80+0x4a);delay(1);wd(0xef);delay(1);
buzz=0;delay(50);buzz=1;delay(50);
buzz=0;delay(50);buzz=1;delay(50) ;
buzz=0;delay(50);buzz=1;
}
else
{
aaak4=1;
lamp=0;
clockon=0;
wc(0x80+0x4a);delay(1);wd(kongbai);delay(1);
buzz=0;delay(50);buzz=1;
}
}
}//4 end
}
void main()
{
TMOD = 0x01;
init();
showtime(shi1,shi2,0,0);
showtime(fen1,fen2,0,0);
showmao(0);
showtime(ns1,ns2,10,10);
showtime(nf1,nf2,10,10);
showmao(2);
time0();
lamp=0;
while(1)
{
key();
}
}
void time0()
{
TH0=(65536-50000)/256; //50MS
TL0=(65536-50000)%256;
}
void t0() interrupt 1
{
time0();
tt0++;
if(k1==0)
{
delay(5);//硬件实现时,延时-10
if(k1==0)
{
a=tt5;b=tt4;c=tt3;d=tt2;
EA=0;ET0=0;TR0=0;
}
}
if(k2==0)
{
delay (5) ;//硬件实施时,延时-10
if(k2==0)
{
if (aaak1==1)
{
aaak1++;
wc(0x80+0x41);delay(1);wd(0x59);delay(1);
showtime(ns1,ns2,an,bn) ;
showmao(1);
showtime(nf1,nf2,cn,dn) ;
}
else
{
wc(0x80+0x41);delay(1);wd(kongbai) ;delay(1);
showtime(ns1,ns2,10,10);
showtime(nf1,nf2,10,10);
showmao(2) ;
aaak1=1;
}
}
}
if(k4==0)
{
delay(5) ;
if(k4==0)
{
if(aaak4==1)
{
aaak4++;
lamp=1;
clockon=1;
wc(0x80+0x4a);delay(1);wd(0xef);delay(1);
buzz=0;delay(50);buzz=1;delay(50);
buzz=0;delay(50);buzz=1;delay(50);
buzz=0;delay(50);buzz=1;
}
else
{
aaak4=1;
lamp=0;
clockon=0;
wc(0x80+0x4a);delay(1);wd(kongbai);delay(1);
buzz=0;delay(50);buzz=1;
}
}
}
if(tt0>=1)//20
{
tt0=0;
led_miao=~led_miao;
tt1++;
if(tt1>=1)//判断是否 够秒
{
tt2++;
if(tt2>=10) //判断分钟的个位是否满
{
tt2=0;
tt3++;
if(tt3>=6)//判断分钟的十位是否满
{
tt3=0;
tt4++;
if(tt4>=hou)//判断小时的个位是否满或
{
ch++;
if(ch>=2)//当到了时以上时,判断条件变为
{
hou=4;
}
else
{
hou=10;
}
if(tt5>=2&&tt4>=hou) //当满小时的时候,全部清零,从头算起
{
tt5=(-1);
tt4=0;
ch=0;
hou=10;
}
tt5++;
tt4=0;
showtime(shi1, shi2, tt5, tt4) ;//小时十位加一
}
showtime(shi1, shi2, tt5, tt4);//小时个位加一
}
showtime(fen1, fen2, tt3, tt2);//分钟十位加一
}
showtime(fen1, fen2, tt3, tt2) ;//分钟个位加一-
tt1=0;
}
}
if(clockon==1&&tt5==an&&tt4==bn&&tt3==cn&&tt2==dn&&pt<=60)//ring for 3s
{
buzz=0;e=1; lamp=0;pt++;
}
if((k4==0&&e==1)|pt>=60)//if ring more than 3s,it will stop
{
buzz=1;e=0;clockon=0;wc(0x80+0x4a);delay(1);wd(kongbai);delay(1);pt=0;
}
}
```