单片机求助

单片机求助,第1张

这个涉及到年月最好用1302去做,因为闰啊这些计算很麻烦,说不定你得去翻日历写程序,1302这些统统计算好,单片机只要读出来并显示就行,很方便。闹铃也很容易实现,就想比较电路一样,你设定个比较值,用if语句判断,如果是就闹啊闹。秒表可以用定时器做,整数晶振,计数累加,拆分赋值最方便省事,如果是倒计时就用按键设定计数值,定时减1,同样是拆分显示,音乐提醒可以在某一个IO脚输出一个电平控制,例如音乐芯片。串行通信可以用595,一根时钟线一根数据线,你看下595的数据手册,做起来难度相信不会有多大。我手头也没有电路,只是说个大概,贴个有关的程序你参考,也算是个秒表的大概吧
//本数字钟以24时制显示。其中独立按钮S19(P3^2)为调时开始按钮;S1(P1^0)为调秒;S5(P1^1)为调分;
// S9(P1^2)为调时;S12(P1^3)为确定;
//采用晶振为110592 //
#include <reg51h>
sbit sb1=P1^0;
sbit sb2=P1^1;
sbit sb3=P1^2;
sbit sb4=P1^3;
sbit dd=P1^4;
code w[8]={0,1,2,3,4,5,6,7};
code LED[11] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
unsigned int z,k,t,n,b,v,c;
void m(float i)
{
unsigned int x,j;
for(j=0;j<i;j++)
for(x=0;x<=100;x++);
}
void main()
{
TMOD=0X01;
TH0=(65336-45872)/256;
TL0=(65336-45872)/256;
EA=1;
ET0=1;
TR0=1;//定时器中断//
IT0=1;
EX0=1; //按键中断//
dd=0;
while(1)
{
EX0=1;
P0=LED[z];
P2=w[7];
m(1);
P0=LED[t];
P2=w[6];
m(1); //秒

P2=w[5];
P0=LED[10];
m(1); //间隔线

P0=LED[n];
P2=w[4];
m(1);
P0=LED[b];
P2=w[3];
m(1); //分

P2=w[2];
P0=LED[10];
m(1); //间隔线

P0=LED[v];
P2=w[1];
m(1);
P0=LED[c];
P2=w[0];
m(1); //时

if(z==10)
{
z=0;
t++;
}
if(t==6)
{
t=0;
n++;
} //秒判断

if(n==10)
{
n=0;
b++;
}

if(b==6)
{
b=0;
v++;
} //分判断

if(v==10)
{
v=0;
c++;
}

if(c==2)
if(v==4)
{
c=0;
v=0;
n=0;
b=0;
n=0;
t=0;
z=0;
} //时判断
}
}
void tt() interrupt 1 //定时器中断服务函数
{
TH0=(65336-45872)/256;
TL0=(65336-45872)/256;
k++;
if(k==20)
{
k=0;
z++;
}
}
void KEY() interrupt 0 //按键中断服务函数
{
while(1)
{
if(sb1==0) //调秒按键
{
sb1=1;
z++;
m(200);
if(z==10)
{
z=0;
t++;
if(t==6) t=0;
}
}
if(sb2==0) //调分按键
{
sb2=1;
n++;
m(200);
if(n==10)
{
n=0;
b++;
if(b==6) b=0;
}
}
if(sb3==0) //调时按键
{
sb3=1;
v++;
m(200);
if(v==10)
{
v=0;
c++;

}
if(c==2)
if(v==4)
{
c=0;
v=0;
}
}
P0=LED[z]; //数码管显示
P2=w[7];
m(1);
P0=LED[t];
P2=w[6];
m(1);
P2=w[5];
P0=LED[10];
m(1);
P0=LED[n];
P2=w[4];
m(1);
P0=LED[b];
P2=w[3];
m(1);
P2=w[2];
P0=LED[10];
m(1);
P0=LED[v];
P2=w[1];
m(1);
P0=LED[c];
P2=w[0];
m(1);
if(sb4==0) break; //确定按钮
}
EX0=0;
}

1程序写好之后首先要编译成HEX或者BIN文件才能烧录到单片机中。2如果是EPROM或者OTP的单片机,那只能烧录好之后再焊接到应用的电路板上。事实上现在的单片机都支持在线编程,就是说你把单片机焊接在电路板上了一样可以烧录(或者)修改其中的程序。如果单片机支持Bootloader,那更好,就像计算机软件升级一样,在单片机使用的过程中都能对其烧写程序!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13410407.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存