跪求单片机电子时钟的设计

2024-12-20 21:21:00
推荐回答(4个)
回答1:

  #include
  #include
  #define uchar unsigned char

  sbit dula=P3^7;

  sbit L1=P2^0;
  sbit L2=P2^1;
  sbit L3=P2^2;
  sbit key1=P3^0;
  sbit key2=P3^1;
  sbit key3=P3^2;
  sbit key4=P3^3;

  uchar aa;
  uchar code table[]={0x3f,0x06,0x5b,0x4f,
  0x66,0x6d,0x7d,0x07,
  0x7f,0x6f,0x77,0x7c,
  0x39,0x5e,0x79,0x71
  };
  uchar nummiao,numfen,numshi,t0;

  void delayms(uchar xms)
  {
  uchar i,j;
  for(i=xms;i>0;i--)
  for(j=110;j>0;j--);
  }
  void init()
  {
  TMOD=0x11;
  TH0=(65536-50000)%256;
  TL0=(65536-50000)/256;

  EA=1;
  ET0=1;

  }
  void display(uchar nummiao,numfen,numshi)
  {
  uchar shishi,geshi,shifen,gefen,shimiao,gemiao;
  shimiao=nummiao/10;
  gemiao=nummiao%10;
  shifen=numfen/10;
  gefen=numfen%10;
  shishi=numshi/10;
  geshi=numshi%10;

  dula=1;
  P0=table[shimiao];
  dula=0;
  L1=0;
  L2=1;
  L3=1;
  delayms(5);

  dula=1;
  P0=table[gemiao];
  dula=0;
  L1=1;
  L2=1;
  L3=1;
  delayms(5);

  dula=1;
  P0=0x40;
  dula=0;
  L1=1;
  L2=0;
  L3=1;
  delayms(5);

  dula=1;
  P0=table[gefen];
  dula=0;
  L1=0;
  L2=0;
  L3=1;
  delayms(5);

  dula=1;
  P0=table[shifen];
  dula=0;
  L1=1;
  L2=1;
  L3=0;
  delayms(5);

  dula=1;
  P0=0x40;
  dula=0;
  L1=0;
  L2=1;
  L3=0;
  delayms(5);

  dula=1;
  P0=table[geshi];
  dula=0;
  L1=1;
  L2=0;
  L3=0;
  delayms(5);

  dula=1;
  P0=table[shishi];
  dula=0;
  L1=0;
  L2=0;
  L3=0;
  delayms(5);

  }

  void keyscan()
  {
  if(key1==0)
  {
  delayms(10);
  if(key1==0)
  {

  numshi++;
  if(numshi==24)
  numshi=0;
  while(!key1);

  }

  }

  if(key2==0)
  {
  delayms(10);
  if(key2==0)
  {

  if(numfen==60)
  numfen=0;
  numfen++;
  while(!key2);

  }
  }

  if(key3==0)
  {
  delayms(10);

  if(key3==0)
  {

  nummiao=0;
  while(!key3);

  }
  }

  if(key4==0)
  {
  delayms(10);
  if(key4==0)
  {

  while(!key4);
  TR0=~TR0;

  }
  }
  }

  void main()
  {

  init();

  aa=0xfe;

  while(1)
  {
  P1=aa;

  if(nummiao==60)
  {
  numfen++;
  nummiao=0;}
  if(numfen==60)
  { numshi++;
  numfen=0;}
  if(numshi==24)
  numshi=0;
  keyscan();
  display(nummiao,numfen,numshi);

  }

  }

  void t0time()interrupt 1
  {

  TH0=(65535-50000)/256;
  TL0=(65535-50000)%256;
  t0++;
  if(t0==20)
  {
  t0=0;

  nummiao++;}

  aa=_crol_(aa,1);

  }
  这个时钟程序显示时分秒 你拿回去在display下面再添一个蜂鸣器函数 让它在一小时到时的时候响 响的时间一分钟在函数内完成编写 然后在主函数中 添加时增一 则启动蜂鸣器的语句 就可以完成所要功能了
  其中P0口连数码管八个段 P2口加38译码器 连数码管阴极
  这样够清楚了吧

回答2:

给你发一份以作参考吧
数字电子钟礼包

回答3:

其实,你去点单片机论坛,很多都可以搜到的

回答4:

我有时钟芯片 lcd1602 的 做出来实物的 你要不要