单片机/MCUwilliam hill官网
直播中

王军华

12年用户 86经验值
擅长:电源/新能源 模拟技术 嵌入式技术 制造/封装
私信 关注
[问答]

帮忙加一个闹钟,谢谢

#include
***it sd=P3^6;   //选锁存器
***it key1=P1^0;      // 选择键
***it key2=P1^3;   //s4  时间增加
***it 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++;
}
求哪位高人帮我再加一个闹钟 ,我已经弄了好几次了,都没成功。

回帖(10)

lstcspring

2012-11-9 20:26:39
程序要调行,谁也保证不了写个程序不调就能用,自己慢慢调吧,有什么具体的问题再来问
举报

张三

2012-11-9 21:40:56
加个标志位,大于设置的时间闹钟就响,就这么简单
举报

王军华

2012-11-9 21:41:30
最重要我是不知道怎么编一个闹钟的啊,帮帮忙啦,你有没有关于闹钟的程序啊?
举报

王军华

2012-11-9 21:44:11
引用: lovezjf234 发表于 2012-11-9 21:40
加个标志位,大于设置的时间闹钟就响,就这么简单

大概加在那里啊,我有急用。学校马上就要交了,{:soso_e109:}
举报

h1654155206.7273

2012-12-25 10:00:52
同学 你会了吗?  
举报

ˊΑit+F⒋

2012-12-29 10:53:14
举报

1653343207.965700

2012-12-29 19:42:58
着急赶快调呀
举报

程晨

2012-12-29 22:54:21
程序有错吧,哪里有key4啊?
举报

h1654155960.8359

2017-3-13 09:54:36
不错的文件,值得收藏
举报

tranhunga

2017-5-9 19:48:40
感谢分享好资料
举报

更多回帖

发帖
×
20
完善资料,
赚取积分