帮忙加一个闹钟,谢谢

2019-07-16 03:54发布

#include<reg52.h>
sbit sd=P3^6;   //选锁存器
sbit key1=P1^0;      // 选择键
sbit key2=P1^3;   //s4  时间增加
sbit key3=P1^2;      //S3  时间减少
char a=0,hour=0,minute=0,seconed=0;
char h1,h2,m1,m2,s1,s2;
char num=0;
char code table[]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f};
void delay(char z)
{
  char x,y;
for(x=z;x>0;x--)
  for(y=160;y>0;y--);
}
void display_hour(char h)    //显示小时
{
  h1=h/10;
h2=h%10;
sd=1;
P0=table[h1];
P2=0xfe;  //1111 1110
sd=0;
delay(10);
sd=1;
P2=0xfd;  //1111 1101
P0=table[h2];
sd=0;
delay(10);

}
void display_minute(char m)    //显示分钟
{
  m1=m/10;
m2=m%10;
sd=1;
P0=table[m1];
P2=0xf7;  //1111 0111
sd=0;
delay(10);
sd=1;
P2=0xef;   //1110 1111
P0=table[m2];
sd=0;
delay(10);

sd=1;
P0=0xbf;
P2=0xdb;
sd=0;
delay(10);
}
void display_seconed(char s)    //显示秒
{
  s1=s/10;
s2=s%10;
sd=1;
P2=0xbf;   //1011 1111
P0=table[s1];
sd=0;
delay(10);
sd=1;
P2=0x7f;  //0111 1111
P0=table[s2];
sd=0;
delay(10);
}

void init()      //初始化函数
{
  TMOD=0x01;     //定时器0工作方式1
TH0=(65536-45872)/256;  //装初值晶振11.0592   50ms为45872
TL0=(65536-45872)%256;
EA=1;      //开总中断
ET0=1;      //开定时器0中断
TR0=1;      //开启定时器0
}
void key()      //按键函数,功能为对时间进行调整
{
  if(key1==0)     //key1键按下进入选择并停止定时器
{
   delay(10);
  while(!key1);    //松手检测
  TR0=0;
  num++;      //没按一次key1  num自加1
}
if(num==1)      //key1按一次进行“小时”调整
{
   if(key2==0)     //key2按下时间增加
  {
   delay(10);
   while(!key2);
    hour++;
   if(hour==24)
   hour=0;
  }
  if(key3==0)      //key3按下时间减少
  {
   delay(10);
   while(!key3);
    hour--;
   if(hour<0)
   hour=23;
  }
}
if(num==2)       //按下key1两次进行“分钟调整”
{
   if(key4==0)
  {
   delay(10);
   while(!key4);
    minute++;
   if(minute==60)
   minute=0;
  }
  if(key3==0)
  {
   delay(10);
   while(!key3);
    minute--;
   if(minute<0)
   minute=59;
  }
}
if(num==3)       //key1按下三次对“秒”进行调节
{
    if(key4==0)
  {
   delay(10);
   while(!key4);
    seconed++;
   if(seconed==60)
   seconed=0;
  }
  if(key3==0)
  {
   delay(10);
   while(!key3);
    seconed--;
   if(seconed<0)
   seconed=59;
  }
}
if(num==4)     //key1按下四次认为调节完毕开启定时器并将num清0
{
   num=0;
  TR0=1;
}
}
void main()
{
  init();
while(1)
{
  display_seconed(seconed);  //显示“秒,分,时”
  display_minute(minute);
  display_hour(hour);
  if(a==20)      //判断定时器是否到1s
  {
    a=0;
   seconed++;
   if(seconed>59)
   {
     seconed=0;
    minute++;
    if(minute>59)
    {
      minute=0;
     hour++;
     if(hour>23)
     {
       hour=0;
     }
    }
   }
  }
  key();
}
}
void time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
a++;
}
求哪位高人帮我再加一个闹钟 ,我已经弄了好几次了,都没成功。

HW-5.0电路图.pdf 下载积分: 积分 -1 分
89.53 KB, 下载次数: 11, 下载积分: 积分 -1 分 这是我板子的电路图
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
lstcspring
1楼-- · 2019-07-16 09:52
程序要调行,谁也保证不了写个程序不调就能用,自己慢慢调吧,有什么具体的问题再来问
lovezjf234
2楼-- · 2019-07-16 14:02
 精彩回答 2  元偷偷看……
wjhlong820
3楼-- · 2019-07-16 16:57
最重要我是不知道怎么编一个闹钟的啊,帮帮忙啦,你有没有关于闹钟的程序啊?
wjhlong820
4楼-- · 2019-07-16 19:10
lovezjf234 发表于 2012-11-9 21:40
加个标志位,大于设置的时间闹钟就响,就这么简单

大概加在那里啊,我有急用。学校马上就要交了,
wly21935253
5楼-- · 2019-07-16 20:07
同学 你会了吗?  
ˊΑit+F⒋
6楼-- · 2019-07-16 23:03

一周热门 更多>