找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求教大神

[复制链接]
跳转到指定楼层
楼主
ID:55960 发表于 2013-10-15 16:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
希望修改程序使得蜂鸣器在工作时只响一声而不是长响


#include<reg51.h>
#define uint unsigned int
sbit BZ=P2^3;
void delay(uint t)
{
uint i,j;
for(i=0;i<t;i++)
   {
    for(j=0;j<121;j++);
        {;}
   }
}
void initial(void)
{
TMOD=0x00;
TH1=0xf0;
TL1=0x0c;
IE=0X00;
TR1=1;
}
void main (void)
{
  initial();
   {
    while(!TF1);
        TF1=0;
    BZ=!BZ;
        }
  }         

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

使用道具 举报

沙发
ID:52083 发表于 2013-10-15 17:40 | 只看该作者
回复

使用道具 举报

板凳
ID:7485 发表于 2013-10-15 19:25 | 只看该作者
本帖最后由 ahshmj 于 2013-10-15 19:27 编辑

你期望的是什么效果(什么条件下响,什么时间停)?

你现在的是:定时器每溢出一次,蜂鸣器响一次,而且溢出时间是4084ns(4毫秒多一点),是不可能实现的......
回复

使用道具 举报

地板
ID:53032 发表于 2013-10-16 09:28 | 只看该作者
BZ=0 ;(响)BZ=1(不响) ( BZ=!BZ;只有一种状态 要么响要么不响)
回复

使用道具 举报

5#
ID:55999 发表于 2013-10-16 16:35 | 只看该作者
呵呵 高手挺多的
回复

使用道具 举报

6#
ID:55960 发表于 2013-10-16 18:16 | 只看该作者
ahshmj 发表于 2013-10-15 19:25
你期望的是什么效果(什么条件下响,什么时间停)?

你现在的是:定时器每溢出一次,蜂鸣器响一次,而且 ...

那应该怎么改啊
回复

使用道具 举报

7#
ID:55960 发表于 2013-10-16 18:17 | 只看该作者
520yan 发表于 2013-10-16 09:28
BZ=0 ;(响)BZ=1(不响) ( BZ=!BZ;只有一种状态 要么响要么不响)

好的,我试试看,谢了
回复

使用道具 举报

8#
ID:55960 发表于 2013-10-16 18:56 | 只看该作者
三省 发表于 2013-10-16 16:35
呵呵 高手挺多的

大家都挺热心的,呵呵
回复

使用道具 举报

9#
ID:7485 发表于 2013-10-17 07:38 | 只看该作者
我说的是你期望你的制作有什么样的效果。什么状况下响,什么时候停。
“BZ=0 ;(响)BZ=1(不响) ( BZ=!BZ;只有一种状态 要么响要么不响)” 和没说的一样。
回复

使用道具 举报

10#
ID:55960 发表于 2013-10-17 12:52 | 只看该作者
ahshmj 发表于 2013-10-17 07:38
我说的是你期望你的制作有什么样的效果。什么状况下响,什么时候停。
“BZ=0 ;(响)BZ=1(不响) ( BZ=!BZ ...

嗯,是这样的。老师要我们先设计一个程序使得蜂鸣器会叫。然后添加到按键的程序里使得在按下按键后,蜂鸣器“滴”声。#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit we1=P2^7;
sbit we2=P2^6;
sbit we3=P2^5;
sbit we4=P2^4;
sbit key=P3^5;
sbit stop=P3^4;
sbit BZ=P2^3;
uchar buffer[4]={0x00,0x00,0x00,0x00};
uchar SEG[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar xsd[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
uint x=0000,y;
void initial(void)
{
TMOD=0x00;
TH1=0xf0;
TL1=0x0c;
IE=0X00;
TR1=1;
}
T0_init()
{
TMOD=0x01;
TL0=0xf0;
TH0=0xd8;
TR0=1;
IE=0x82;
EA=1;
}
void delay(uint t)
{
uint i,j;
for(i=0;i<t;i++)
   {
    for(j=0;j<121;j++);
        {;}
   }
}
COUN()                                
{
  int a,b,c,d;
  a=x/1000;
  buffer[0]=SEG[a];
  y=x%1000;
  b=y/100;
  buffer[1]=xsd;
  y=y%100;
  c=y/10;
  buffer[2]=SEG[c];
  d=y%10;
  buffer[3]=SEG[d];
}
T0_INT() interrupt 1
{
TH0=0xd8;
TL0=0xf0;
if (x==9999){x++;x=0;}
  x++;
}

void main(void)                               
{
initial();
   {
    while(!TF1);
        TF1=0;
    BZ=!BZ;
        }
we1=we2=we3=we4=0;
P0=0xc0;
if(key==0)
{
  delay(100);
  {
   if(key==0)
   {
     int x=0;
     T0_init();
         
     while(1)
     {
         if(stop==0) TR0=0;
         {
      COUN();
      we1=0;
      P0=buffer[0];
      delay(1);
      we1=1;
      we2=0;
      P0=buffer[1];
      delay(1);
      we2=1;
      we3=0;
      P0=buffer[2];
      delay(1);
      we3=1;
      we4=0;
      P0=buffer[3];
      delay(1);
      we4=1;
      }
          }
    }
  }
}
}可是这个程序存在问题,不晓得如何改
回复

使用道具 举报

11#
ID:7485 发表于 2013-10-17 17:26 | 只看该作者
可以给你提一个思路:
你现在已经能使蜂鸣器发声了?
那就用另一个定时器Time1进行定时,(可以像做电子钟一样,计秒),或中断n次以后使TR0取反即可。间断的发出声音。间隔时间你自己定。
回复

使用道具 举报

12#
ID:39015 发表于 2013-11-11 00:03 | 只看该作者
你那个while(!TR1),改while(TR1),时间到了才往下走,不知对不对,高手回答,
#include<reg51.h>
#define uint unsigned int
sbit BZ=P2^3;
void initial(void)
{
TMOD=0x00;
TH1=0xf0;
TL1=0x0c;
EA=1;
TR1=1;
}
void main (void)
{
  initial();
    while(TR1)
     {  
      TF1=0;
        BZ=!BZ;
        }
  }         
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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