找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14675|回复: 11
打印 上一主题 下一主题
收起左侧

求助大家的帮忙,把倒计时程序修改一下,使蜂鸣器响2秒就不再响

[复制链接]
跳转到指定楼层
楼主
ID:65163 发表于 2014-8-17 17:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/**********************HJ-C52实验开发板例程************************
*  平台:HJ-C52 + Keil U4 + STC89C52
*  名称:
*  公司:慧净电子科技有限公司
*  编写:
*  日期:2008-8-08
*   QQ : 121350852  398115088
*  晶振:11.0592MHZ
*  说明:免费开源,不提供源代码分析,有问题直接到慧净论坛交流
******************************************************************/
#include<reg51.h>
sbit dula=P2^0;  //段选信号的锁存器控制
sbit wela=P2^1;  //位选信号的锁存器控制
sbit cs88=P2^2;         //点阵管的锁存器控制        cs88=0;//关点阵管
sbit LCD1602=P2^5; //定义LCD1602使能端,用于HJ-C52实验板复位,与本实验无关
sbit DS1302=P2^7;  //定义DS1302时钟使能端,用于HJ-C52实验板复位,与本实验无关
sbit SD=P2^6;      //定义SD卡使能端,用于HJ-C52实验板复位,与本实验无关
void cmg88()//关数码管,点阵函数            cmg88();//关数码管,点阵函数
{
dula=1;  
P0=0x00;
dula=0;
cs88=0x00;
P0=0x00;
cs88=1;
}
sbit beep=P2^3;
unsigned char j,k,a1,a0,s=60;
unsigned int m;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(unsigned char i)
{
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}
void display(unsigned char sh_c,unsigned char g_c)
{
   dula=0;
   P0=table[sh_c];
   dula=1;
   dula=0;
   
   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(5);
   
   P0=table[g_c];
   dula=1;
   dula=0;
   
   P0=0xfd;
   wela=1;
   wela=0;
   delay(5);
}
void main()
{
TMOD=0x01;
TR0=1;
TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12
ET0=1;
EA=1;

//主板初始化 因51单片机芯片开机时各个IO口输出为高电平,加上以下源代码是为了防止各种外部模块误动作
    DS1302=0; //关DS1302模块,与本实验无关
    SD=0;//关SD卡模块,与本实验无关
    LCD1602=0;//关LCD1602模块,与本实验无关
    cs88=0;//关点阵管
while(1)
{
  if(m==20)
  { m=0;
   s--;
  }
  a0=s%10;
  a1=s/10;
  display(a1,a0);
  if(s==0)
  {
   TR0=0;//时间到,定时器关闭
   beep=0;//蜂鸣器响,报时。
  }
}
}
void time0() interrupt 1
{TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
m++;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:65163 发表于 2014-8-19 21:11 | 只看该作者
怎么没人给力啊?????????????
回复

使用道具 举报

板凳
ID:58502 发表于 2014-8-19 23:30 | 只看该作者
本帖最后由 liaolinhui 于 2014-8-19 23:38 编辑

/**********************HJ-C52实验开发板例程************************
*  平台:HJ-C52 + Keil U4 + STC89C52
*  名称:
*  公司:慧净电子科技有限公司
*  编写:
*  日期:2008-8-08
*   QQ : 121350852  398115088
*  晶振:11.0592MHZ
*  说明:免费开源,不提供源代码分析,有问题直接到慧净论坛交流
******************************************************************/
#include<reg51.h>
sbit dula=P2^0;  //段选信号的锁存器控制
sbit wela=P2^1;  //位选信号的锁存器控制
sbit cs88=P2^2;         //点阵管的锁存器控制        cs88=0;//关点阵管
sbit LCD1602=P2^5; //定义LCD1602使能端,用于HJ-C52实验板复位,与本实验无关
sbit DS1302=P2^7;  //定义DS1302时钟使能端,用于HJ-C52实验板复位,与本实验无关
sbit SD=P2^6;      //定义SD卡使能端,用于HJ-C52实验板复位,与本实验无关
void cmg88()//关数码管,点阵函数            cmg88();//关数码管,点阵函数
{
dula=1;  
P0=0x00;
dula=0;
cs88=0x00;
P0=0x00;
cs88=1;
}
sbit beep=P2^3;
unsigned char j,k,a1,a0,s=60;
unsigned int m;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(unsigned int i)  //你原来的char范围小我改成int
{
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}
void display(unsigned char sh_c,unsigned char g_c)
{
   dula=0;
   P0=table[sh_c];
   dula=1;
   dula=0;
   
   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(5);
   
   P0=table[g_c];
   dula=1;
   dula=0;
   
   P0=0xfd;
   wela=1;
   wela=0;
   delay(5);
}
void main()
{
TMOD=0x01;
TR0=1;
TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12
ET0=1;
EA=1;

//主板初始化 因51单片机芯片开机时各个IO口输出为高电平,加上以下源代码是为了防止各种外部模块误动作
    DS1302=0; //关DS1302模块,与本实验无关
    SD=0;//关SD卡模块,与本实验无关
    LCD1602=0;//关LCD1602模块,与本实验无关
    cs88=0;//关点阵管
while(1)
{
  if(m==20)
  { m=0;
   s--;
  }
  a0=s%10;
  a1=s/10;
  display(a1,a0);
  if(s==0)
  {
   TR0=0;//时间到,定时器关闭
   beep=0;//蜂鸣器响,报时。
  delay(2000);//调用延时,乱写个数,我不会算延时时间,
   beep=1;//关掉蜂鸣器
}
}
}
void time0() interrupt 1
{TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
m++;
}
回复

使用道具 举报

地板
ID:19715 发表于 2014-8-20 10:14 | 只看该作者
不用停止定时器,用定时器做个两秒钟的延时sec2,用于蜂鸣器响2秒计时。
#include<reg51.h>
sbit dula=P2^0;  //段选信号的锁存器控制
sbit wela=P2^1;  //位选信号的锁存器控制
sbit cs88=P2^2;         //点阵管的锁存器控制        cs88=0;//关点阵管
sbit LCD1602=P2^5; //定义LCD1602使能端,用于HJ-C52实验板复位,与本实验无关
sbit DS1302=P2^7;  //定义DS1302时钟使能端,用于HJ-C52实验板复位,与本实验无关
sbit SD=P2^6;      //定义SD卡使能端,用于HJ-C52实验板复位,与本实验无关
void cmg88()//关数码管,点阵函数            cmg88();//关数码管,点阵函数
{
dula=1;  
P0=0x00;
dula=0;
cs88=0x00;
P0=0x00;
cs88=1;
}
sbit beep=P2^3;
unsigned char j,k,a1,a0,s=60;
unsigned char sec2;//蜂鸣器响2秒的计时器
unsigned int m;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(unsigned char i)
{
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}
void display(unsigned char sh_c,unsigned char g_c)
{
   dula=0;
   P0=table[sh_c];
   dula=1;
   dula=0;
   
   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(5);
   
   P0=table[g_c];
   dula=1;
   dula=0;
   
   P0=0xfd;
   wela=1;
   wela=0;
   delay(5);
}
void main()
{
TMOD=0x01;
TR0=1;
TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12
ET0=1;
EA=1;
//主板初始化 因51单片机芯片开机时各个IO口输出为高电平,加上以下源代码是为了防止各种外部模块误动作
    DS1302=0; //关DS1302模块,与本实验无关
    SD=0;//关SD卡模块,与本实验无关
    LCD1602=0;//关LCD1602模块,与本实验无关
    cs88=0;//关点阵管
    beep=1;//关闭蜂鸣器。
    sec2=0;
while(1)
{
   if(m==20 )
      { m=0;
         if(s!=0 )s--;
         else
             {
               if(++sec2>=2){sec2=3; beep=1; }//关闭蜂鸣器。
               else beep=0;//蜂鸣器响,报时。         
             }
       }
     a0=s%10;
     a1=s/10;
     display(a1,a0);
}
}
void time0() interrupt 1
{TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
m++;
}
回复

使用道具 举报

5#
ID:19715 发表于 2014-8-20 10:39 | 只看该作者
这样要改进成:重新倒计时也很容易.
只要做个按键,按下之后,重新赋值
s=60;
sec2=0;
回复

使用道具 举报

6#
ID:61153 发表于 2014-8-20 10:53 | 只看该作者
看了老办天,还是不怎么看得懂!!努力学习中!!
回复

使用道具 举报

7#
ID:65163 发表于 2014-8-30 20:57 | 只看该作者
非常感谢大家的帮助,问题我已经解决,换啦其它的控制方式。
回复

使用道具 举报

8#
ID:65163 发表于 2014-8-30 21:21 | 只看该作者
再次感谢明白大哥的编写,是我之前想要的效果,同时感谢liaolinhui大哥。
回复

使用道具 举报

9#
ID:73480 发表于 2015-2-28 16:46 | 只看该作者
大神电路图怎么连接啊
回复

使用道具 举报

10#
ID:73480 发表于 2015-2-28 16:46 | 只看该作者
开发板上的
回复

使用道具 举报

11#
ID:73021 发表于 2015-3-3 22:05 来自手机 | 只看该作者
你也买了慧净的开发板啊
回复

使用道具 举报

12#
ID:162496 发表于 2017-3-2 09:11 | 只看该作者
if(m==20 )  { m=0;  if(s!=0 )s--  是什么意思,m是什么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表