单片机课程设计,电子钟,已有时钟功能求调时部分程序!

2025-03-10 07:23:32
推荐回答(3个)
回答1:

上述的程序,都占用了单片机的什么引脚?
0~9数字键、C/R键,这些键盘,使用什么引脚?
最好给出电路。

回答2:

你可以这样当你按下调时键时,计时器停止计时,然后输出显示,然后结束时再启动计时器。汇编我不太懂。C语言我懂多点 #include
#define uint unsigned int
#define uchar unsigned char
sbit qd=P1^0;
sbit tz=P1^1;
sbit fw=P1^2;
sbit duan=P3^7;
sbit weic=P2^2;
sbit weib=P2^1;
sbit weia=P2^0;
sbit shi=P1^5;
sbit fen=P1^4;
sbit miao=P1^3;
uint s,f,m,tcnt;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(int);
void Display(uchar,uchar,uchar);
void main()
{ f=0;m=0;s=0;
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
while(1)
{
if(qd==0x)
{ delay(5);
if(qd==0)
{
while(!qd)
Display(m,f,s);
TR0=1;

}
}
if(tz==0)
{ delay(5);
if(tz==0)
{

TR0=0;
Display(m,f,s);
}
}
if(fw==0)
{ delay(5);
if(fw==0)
{

TR0=0;
f=0;
s=0;
m=0;
Display(m,f,s);
}
}
if(miao==0)
{ delay(5);
if(miao==0)
{ TR0=0;
while(!miao)
Display(m,f,s);
m++;
TR0=1;
if(m==60)
{ m=0;

}
}
}
if(fen==0)
{ delay(5);
if(fen==0)
{ TR0=0;
while(!fen)
Display(m,f,s);
f++;
TR0=1;
if(f==60)
{ f=0;

}
}
}
if(shi==0)
{ delay(5);
if(shi==0)
{ TR0=0;
while(!shi)
Display(m,f,s);
s++;
TR0=1;
if(s==12)
s=0;

}
}
Display(m,f,s);
}
}

void tim0() interrupt 1 using 0
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
tcnt++;
if(tcnt==100)
{
tcnt=0;
m++;
if(m==60)
{
f++;
m=0;
}
if(f==60)
{
f=0;
s++;
}
if(s==12)
{
s=0;
}
}
}
void delay(int z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void Display(uchar m,uchar f,uchar s)
{
P0=table[m%10];
duan=1;
duan=0;
weic=1;
weib=1;
weia=1;
delay(5);
P0=table[m/10];
duan=1;
duan=0;
weic=1;
weib=1;
weia=0;
delay(5);
P0=table[f%10];
duan=1;
duan=0;
weic=1;
weib=0;
weia=1;
delay(5);
P0=table[f/10];
duan=1;
duan=0;
weic=1;
weib=0;
weia=0;
delay(5);
P0=table[s%10];
duan=1;
duan=0;
weic=0;
weib=1;
weia=1;
delay(5);
P0=table[s/10];
duan=1;
duan=0;
weic=0;
weib=1;
weia=0;
delay(5);
} 这里边用的是两种锁存器。74H138

回答3:

中断?