找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 14682|回復(fù): 11
收起左側(cè)

求助大家的幫忙,把倒計(jì)時(shí)程序修改一下,使蜂鳴器響2秒就不再響

[復(fù)制鏈接]
ID:65163 發(fā)表于 2014-8-17 17:55 | 顯示全部樓層 |閱讀模式
/**********************HJ-C52實(shí)驗(yàn)開發(fā)板例程************************
*  平臺(tái):HJ-C52 + Keil U4 + STC89C52
*  名稱:
*  公司:慧凈電子科技有限公司
*  編寫:
*  日期:2008-8-08
*   QQ : 121350852  398115088
*  晶振:11.0592MHZ
*  說明:免費(fèi)開源,不提供源代碼分析,有問題直接到慧凈論壇交流
******************************************************************/
#include<reg51.h>
sbit dula=P2^0;  //段選信號(hào)的鎖存器控制
sbit wela=P2^1;  //位選信號(hào)的鎖存器控制
sbit cs88=P2^2;         //點(diǎn)陣管的鎖存器控制        cs88=0;//關(guān)點(diǎn)陣管
sbit LCD1602=P2^5; //定義LCD1602使能端,用于HJ-C52實(shí)驗(yàn)板復(fù)位,與本實(shí)驗(yàn)無關(guān)
sbit DS1302=P2^7;  //定義DS1302時(shí)鐘使能端,用于HJ-C52實(shí)驗(yàn)板復(fù)位,與本實(shí)驗(yàn)無關(guān)
sbit SD=P2^6;      //定義SD卡使能端,用于HJ-C52實(shí)驗(yàn)板復(fù)位,與本實(shí)驗(yàn)無關(guān)
void cmg88()//關(guān)數(shù)碼管,點(diǎn)陣函數(shù)            cmg88();//關(guān)數(shù)碼管,點(diǎn)陣函數(shù)
{
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,故所記次數(shù)應(yīng)為46080,計(jì)時(shí)器每隔50000微秒發(fā)起一次中斷。
TL0=(65536-46080)%256;//46080的來歷,為50000*11.0592/12
ET0=1;
EA=1;

//主板初始化 因51單片機(jī)芯片開機(jī)時(shí)各個(gè)IO口輸出為高電平,加上以下源代碼是為了防止各種外部模塊誤動(dòng)作
    DS1302=0; //關(guān)DS1302模塊,與本實(shí)驗(yàn)無關(guān)
    SD=0;//關(guān)SD卡模塊,與本實(shí)驗(yàn)無關(guān)
    LCD1602=0;//關(guān)LCD1602模塊,與本實(shí)驗(yàn)無關(guān)
    cs88=0;//關(guān)點(diǎn)陣管
while(1)
{
  if(m==20)
  { m=0;
   s--;
  }
  a0=s%10;
  a1=s/10;
  display(a1,a0);
  if(s==0)
  {
   TR0=0;//時(shí)間到,定時(shí)器關(guān)閉
   beep=0;//蜂鳴器響,報(bào)時(shí)。
  }
}
}
void time0() interrupt 1
{TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
m++;
}

回復(fù)

使用道具 舉報(bào)

ID:65163 發(fā)表于 2014-8-19 21:11 | 顯示全部樓層
怎么沒人給力。????????????
回復(fù)

使用道具 舉報(bào)

ID:58502 發(fā)表于 2014-8-19 23:30 | 顯示全部樓層
本帖最后由 liaolinhui 于 2014-8-19 23:38 編輯

/**********************HJ-C52實(shí)驗(yàn)開發(fā)板例程************************
*  平臺(tái):HJ-C52 + Keil U4 + STC89C52
*  名稱:
*  公司:慧凈電子科技有限公司
*  編寫:
*  日期:2008-8-08
*   QQ : 121350852  398115088
*  晶振:11.0592MHZ
*  說明:免費(fèi)開源,不提供源代碼分析,有問題直接到慧凈論壇交流
******************************************************************/
#include<reg51.h>
sbit dula=P2^0;  //段選信號(hào)的鎖存器控制
sbit wela=P2^1;  //位選信號(hào)的鎖存器控制
sbit cs88=P2^2;         //點(diǎn)陣管的鎖存器控制        cs88=0;//關(guān)點(diǎn)陣管
sbit LCD1602=P2^5; //定義LCD1602使能端,用于HJ-C52實(shí)驗(yàn)板復(fù)位,與本實(shí)驗(yàn)無關(guān)
sbit DS1302=P2^7;  //定義DS1302時(shí)鐘使能端,用于HJ-C52實(shí)驗(yàn)板復(fù)位,與本實(shí)驗(yàn)無關(guān)
sbit SD=P2^6;      //定義SD卡使能端,用于HJ-C52實(shí)驗(yàn)板復(fù)位,與本實(shí)驗(yàn)無關(guān)
void cmg88()//關(guān)數(shù)碼管,點(diǎn)陣函數(shù)            cmg88();//關(guān)數(shù)碼管,點(diǎn)陣函數(shù)
{
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,故所記次數(shù)應(yīng)為46080,計(jì)時(shí)器每隔50000微秒發(fā)起一次中斷。
TL0=(65536-46080)%256;//46080的來歷,為50000*11.0592/12
ET0=1;
EA=1;

//主板初始化 因51單片機(jī)芯片開機(jī)時(shí)各個(gè)IO口輸出為高電平,加上以下源代碼是為了防止各種外部模塊誤動(dòng)作
    DS1302=0; //關(guān)DS1302模塊,與本實(shí)驗(yàn)無關(guān)
    SD=0;//關(guān)SD卡模塊,與本實(shí)驗(yàn)無關(guān)
    LCD1602=0;//關(guān)LCD1602模塊,與本實(shí)驗(yàn)無關(guān)
    cs88=0;//關(guān)點(diǎn)陣管
while(1)
{
  if(m==20)
  { m=0;
   s--;
  }
  a0=s%10;
  a1=s/10;
  display(a1,a0);
  if(s==0)
  {
   TR0=0;//時(shí)間到,定時(shí)器關(guān)閉
   beep=0;//蜂鳴器響,報(bào)時(shí)。
  delay(2000);//調(diào)用延時(shí),亂寫個(gè)數(shù),我不會(huì)算延時(shí)時(shí)間,
   beep=1;//關(guān)掉蜂鳴器
}
}
}
void time0() interrupt 1
{TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
m++;
}
回復(fù)

使用道具 舉報(bào)

ID:19715 發(fā)表于 2014-8-20 10:14 | 顯示全部樓層
不用停止定時(shí)器,用定時(shí)器做個(gè)兩秒鐘的延時(shí)sec2,用于蜂鳴器響2秒計(jì)時(shí)。
#include<reg51.h>
sbit dula=P2^0;  //段選信號(hào)的鎖存器控制
sbit wela=P2^1;  //位選信號(hào)的鎖存器控制
sbit cs88=P2^2;         //點(diǎn)陣管的鎖存器控制        cs88=0;//關(guān)點(diǎn)陣管
sbit LCD1602=P2^5; //定義LCD1602使能端,用于HJ-C52實(shí)驗(yàn)板復(fù)位,與本實(shí)驗(yàn)無關(guān)
sbit DS1302=P2^7;  //定義DS1302時(shí)鐘使能端,用于HJ-C52實(shí)驗(yàn)板復(fù)位,與本實(shí)驗(yàn)無關(guān)
sbit SD=P2^6;      //定義SD卡使能端,用于HJ-C52實(shí)驗(yàn)板復(fù)位,與本實(shí)驗(yàn)無關(guān)
void cmg88()//關(guān)數(shù)碼管,點(diǎn)陣函數(shù)            cmg88();//關(guān)數(shù)碼管,點(diǎn)陣函數(shù)
{
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秒的計(jì)時(shí)器
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,故所記次數(shù)應(yīng)為46080,計(jì)時(shí)器每隔50000微秒發(fā)起一次中斷。
TL0=(65536-46080)%256;//46080的來歷,為50000*11.0592/12
ET0=1;
EA=1;
//主板初始化 因51單片機(jī)芯片開機(jī)時(shí)各個(gè)IO口輸出為高電平,加上以下源代碼是為了防止各種外部模塊誤動(dòng)作
    DS1302=0; //關(guān)DS1302模塊,與本實(shí)驗(yàn)無關(guān)
    SD=0;//關(guān)SD卡模塊,與本實(shí)驗(yàn)無關(guān)
    LCD1602=0;//關(guān)LCD1602模塊,與本實(shí)驗(yàn)無關(guān)
    cs88=0;//關(guān)點(diǎn)陣管
    beep=1;//關(guān)閉蜂鳴器。
    sec2=0;
while(1)
{
   if(m==20 )
      { m=0;
         if(s!=0 )s--;
         else
             {
               if(++sec2>=2){sec2=3; beep=1; }//關(guān)閉蜂鳴器。
               else beep=0;//蜂鳴器響,報(bào)時(shí)。         
             }
       }
     a0=s%10;
     a1=s/10;
     display(a1,a0);
}
}
void time0() interrupt 1
{TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
m++;
}
回復(fù)

使用道具 舉報(bào)

ID:19715 發(fā)表于 2014-8-20 10:39 | 顯示全部樓層
這樣要改進(jìn)成:重新倒計(jì)時(shí)也很容易.
只要做個(gè)按鍵,按下之后,重新賦值
s=60;
sec2=0;
回復(fù)

使用道具 舉報(bào)

ID:61153 發(fā)表于 2014-8-20 10:53 | 顯示全部樓層
看了老辦天,還是不怎么看得懂!努力學(xué)習(xí)中!!
回復(fù)

使用道具 舉報(bào)

ID:65163 發(fā)表于 2014-8-30 20:57 | 顯示全部樓層
非常感謝大家的幫助,問題我已經(jīng)解決,換啦其它的控制方式。
回復(fù)

使用道具 舉報(bào)

ID:65163 發(fā)表于 2014-8-30 21:21 | 顯示全部樓層
再次感謝明白大哥的編寫,是我之前想要的效果,同時(shí)感謝liaolinhui大哥。
回復(fù)

使用道具 舉報(bào)

ID:73480 發(fā)表于 2015-2-28 16:46 | 顯示全部樓層
大神電路圖怎么連接啊
回復(fù)

使用道具 舉報(bào)

ID:73480 發(fā)表于 2015-2-28 16:46 | 顯示全部樓層
開發(fā)板上的
回復(fù)

使用道具 舉報(bào)

ID:73021 發(fā)表于 2015-3-3 22:05 來自手機(jī) | 顯示全部樓層
你也買了慧凈的開發(fā)板啊
回復(fù)

使用道具 舉報(bào)

ID:162496 發(fā)表于 2017-3-2 09:11 | 顯示全部樓層
if(m==20 )  { m=0;  if(s!=0 )s--  是什么意思,m是什么
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表