永发信息网

利用单片机实验板制作一个电子钟,LED显示区上的DS1、DS2用于显示小时,DS3、DS4用于显示分钟的程序。

答案:4  悬赏:20  手机版
解决时间 2021-11-11 05:56
  • 提问者网友:暗中人
  • 2021-11-10 19:28
利用单片机实验板制作一个电子钟,LED显示区上的DS1、DS2用于显示小时,DS3、DS4用于显示分钟的程序。
最佳答案
  • 五星知识达人网友:孤老序
  • 2021-11-10 20:28
#include
#include
#define uchar unsigned char
#define uint unsigned int

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uint Count;
uchar j=0x08;
uchar s=0x80;
sbit Dot=P0^7;
sbit k1=P1^0;
sbit k2=P1^4;
sbit k3=P1^7;
uchar Digits_of_4DSY[]={0,0,0,0};

void DelayMS(uint ms)
{
uchar t;
while(ms--) for(t=0;t<120;t++);
}

void Showtime()
{
uchar i;
for(i=3;i!=-1;i--)
{
j=_crol_(j,1);
if(j==0x10) j=0x01;
P2=j;
P0=DSY_CODE[Digits_of_4DSY[i]];
switch(s)
{
case 0x80:
if((i==1)&&(Count%20==0)) Dot=~Dot;
break;
case 0x01:
if(i==0) Dot=0;
break;
case 0x02:
if(i==1) Dot=0;
break;
case 0x04:
if(i==2) Dot=0;
break;
case 0x08:
if(i==3) Dot=0;
break;
}

DelayMS(2);
}
}

void Settime()
{

s=_crol_(s,1);
TR0=0;
IE=0x00;
while(1)
{
if(s==0x10)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0x82;
TR0=1;
s=0x80;
break;
}
if(k1==0)
{
while(k1==0);
s=_crol_(s,1);

}
if(k2 == 0)
{
while(k2 == 0);
switch(s)
{
case 0x01:
Digits_of_4DSY[0]++;
if(Digits_of_4DSY[0]==3) Digits_of_4DSY[0]=0;
break;
case 0x02:
Digits_of_4DSY[1]++;
if(Digits_of_4DSY[1]==4) Digits_of_4DSY[1]=0;
break;
case 0x04:
Digits_of_4DSY[2]++;
if(Digits_of_4DSY[2]==6) Digits_of_4DSY[2]=0;
break;
case 0x08:
Digits_of_4DSY[3]++;
if(Digits_of_4DSY[3]==10) Digits_of_4DSY[3]=0;
break;
}

}
if(k3 == 0)
{
while(k3 == 0);
switch(s)
{
case 0x01:
Digits_of_4DSY[0]--;
if(Digits_of_4DSY[0]==-1) Digits_of_4DSY[0]=2;
break;
case 0x02:
Digits_of_4DSY[1]--;
if(Digits_of_4DSY[1]==-1) Digits_of_4DSY[1]=3;
break;
case 0x04:
Digits_of_4DSY[2]--;
if(Digits_of_4DSY[2]==-1) Digits_of_4DSY[2]=5;
break;
case 0x08:
Digits_of_4DSY[3]--;
if(Digits_of_4DSY[3]==-1) Digits_of_4DSY[3]=9;
break;
}
}
Showtime();
}

}

void main()
{

P0=0x00;
P2=0xff;
P1=0xff;
Count=0;
Dot=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0x82;
TR0=1;
while(1)
{
if(k1 == 0)
{
while(k1 == 0);

Settime();
}
Showtime();
}
}

void Time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if (++Count!=1200) return;
Count =0;
Digits_of_4DSY[3]++;
if(Digits_of_4DSY[3]==10)
{
Digits_of_4DSY[3]=0;
Digits_of_4DSY[2]++;
if(Digits_of_4DSY[2]==6)
{
Digits_of_4DSY[2]=0;
Digits_of_4DSY[1]++;
if(Digits_of_4DSY[1]==4)
{
Digits_of_4DSY[1]=0;
Digits_of_4DSY[0]++;
if(Digits_of_4DSY[0]==3)
Digits_of_4DSY[0]=0;
}
}
}

}

我这网速不行,电路图传不上去,电路跟你的那个有点区别,led是共阳极的,三极管的e极接到led,c极接电源正极,跟你那个相反。详情Q聊121009224
全部回答
  • 1楼网友:摆渡翁
  • 2021-11-10 21:50
四位的电子钟!
你们学校上实验课的时候,难道没有做过这个实验?
  • 2楼网友:千夜
  • 2021-11-10 21:00
楼上说的对喔! 没有电路不知怎样写程序!
  • 3楼网友:神鬼未生
  • 2021-11-10 20:49
不同的实验板程序会不同的。你应该说清楚,并把实验板的原理图贴出来呀。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯