您的位置 首页 系统

根据单片机的电子时钟规划

上图是Proteus仿真图,其中反相器用74lHC14,排阻用10K的,晶振用12MHZ的,电阻R1-R8用200欧的即可。但在实际制作时数码管可以用两个四位一

上图是Proteus仿真图,其间反相器用74lHC14,排阻用10K的,晶振用12MHZ的,电阻R1-R8用200欧的即可。但在实践制造时数码管能够用两个四位一体共阳极的,这样衔接电路会愈加便利。能够用三极管替代反相器,这样能够节省本钱,但替代后无法用Proteus仿真出来,下图为替代后的图片,三极管用常用的9012或许9015即可,经自己实践验证作用非常好。

下图为原理图:

下图为实物图

以下为源程序

#include
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={ //不带小数点的数码管编码
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
uchar code table1[]={ //带小数点的数码管编码
0x40,0x79,0x24,0x30,
0x19,0x12,0x02,0x78,
0x00,0x10};

uchar shi=12,second,minute;
uint num,num1,num2,num3;
sbit k1=P1^4;
sbit k2=P1^5;
void display();
void keyscan();
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x–)
for(y=110;y>0;y–);
}

void init()
{
TMOD=0x01;

TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
EA=1;
ET0=1;
TR0=1;
}

void main()
{
init();
while(1)
{
keyscan();
display();

}
}

void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
num++;
if(num==20)
{
num=0;
second++;
if(second==60)
{
second=0;
minute++;
}
if(minute>=60)
{
minute=0;
shi++;
}
if(shi>=24)
shi=0;

}
}

void display()
{
P2=0xdf;
P0=table[second];
delay(2);
P2=0xff;

P2=0xef;
P0=table[second/10];
delay(2);
P2=0xff;

P2=0xf7;
P0=table1[minute];
delay(2);
P2=0xff;

P2=0xfb;
P0=table[minute/10];
delay(2);
P2=0xff;

P2=0xfd;
P0=table1[shi];
delay(2);
P2=0xff;

P2=0xfe;
P0=table[shi/10];
delay(2);
P2=0xff;
}

void keyscan()
{
if(k1==0)
{
delay(10);
if(k1==0)
{
shi++;
while(!k1);
}
}
if(k2==0)
{
delay(10);
if(k2==0)
{
minute++;
while(!k2);
}

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/xitong/261682.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部