就拿三个灯来说吧
#include"reg52h"
#include"intrinsh"
sbit led1=P2^0;
sbit led2=P2^1;
sbit led3=P2^2;//led灯
sbit ring=P2^3;//蜂鸣器
void Delay1000ms() //@110592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 43;
j = 6;
k = 203;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main(){
led1=0;led2=0;led3=0;//初始化为零
//下面开始
goto B:
A:while(1){;}//跑完一遍程序后执行死循环
B:
led1=1;Delay1000ms();led1=0;
led2=1;Delay1000ms();led2=0;
led3=1;Delay1000ms();led3=0;//流水灯
ring=1;Delay1000ms();ring=0;
ring=1;Delay1000ms();ring=0;
ring=1;Delay1000ms();ring=0;//蜂鸣
goto A;//跳转到死循环执行
}
sbit buzzer=p37;
上面的p37你在其他地方宏定义了吗?
没有就改为P3^7
其他的除非是用中文全角输入有错,不然应该没问题了……
再有问题就应该是keil软件问题,再装一次,就好了
如果是蜂鸣器的话,那么加一个电平信号就可以发声了。\x0d\FMQ EQU P10\x0d\ORG 0000H\x0d\LJMP MAIN\x0d\ORG 0030H\x0d\MAIN:\x0d\CPL FMQ\x0d\LCALL DELAY\x0d\SJMP MAIN\x0d\DELAY:\x0d\MOV R2,#200\x0d\DLY:\x0d\MOV R3,#250\x0d\DJNZ R3,$\x0d\DJNZ R2,DLY\x0d\RET\x0d\END
让蜂鸣器发出两种不同的声调很容易,只要给蜂鸣器的控制信号发送不同频率的脉冲就可以实现了,以下以延时方式来做。#include#defineucharunsignedchar#defineuintunsignedintsbitSPK=P1^0;sbitK1=P1^7;//发声函数voidAlarm(uchart){uchari,j;for(i=0;i<200;i++){SPK=~SPK;for(j=0;j
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。我们开发板上常用的蜂鸣器就是常常说的交流蜂鸣器或直流蜂鸣器(自激式蜂鸣器)。 直流蜂鸣器是给一定的驱动直流电压就会响。而交流蜂鸣器是需要给蜂鸣器一个脉冲才会响。常见的有PWM波控制蜂鸣器的频率。脉冲就是高低电平的切换,如下图:一个方波脉冲
我们用单片机的IO口实现一种这样高低电平的方波,驱动蜂鸣器发音。我们板子上配的就是交流蜂鸣器。
接下来我们看一下蜂鸣器的硬件电路:
蜂鸣器通过三极管驱动。我们利用杜邦线将蜂鸣器的一端J8连接到板子上P15管脚上。
示例程序:
#include "reg52h"
#include "intrinsh"
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit beep = P1^5;
void delay(uint16 i)
{
while(i--);
}
void main()
{
while(1)
{
beep = ~beep;
delay(10);
}
}
该程序实现蜂鸣器的响和停,程序较为简单,可以在此基础上进行扩展。
请确认你这蜂鸣器的类型:
1,如果是有源的,那么检查电路,或者单独测试 BUZZ=0 时,会不会响。假如会响,那么就是你上面一段程序没有运行到 BUZZ=0处,继续检查;如果不会响,说明控制蜂鸣器的电路有问题;
2,如果是无源的,需要发送方波才会响,类似 BUZZ=0 ;BUZZ=1 ;BUZZ=0 ;BUZZ=1 ;BUZZ=0 ;BUZZ=1 ;
你这里没有说清楚,所以具体还是靠你自己查了,这里只能给个参考。
简易蜂鸣器程序:
#include<reg52h>
#define uchar unsigned char
#define uint unsigned int
sbit P36=P3^6;//我的系统板蜂鸣器口定义
sbit k1=P1^4; //按钮1
sbit k2=P1^5; //按钮2
void Delay(uint num)//延时函数
{uchar i,j;
for(i=0;i<255;i--)
{for(j=0;j>0;j++)}
}
main()
{
while(1)
{
if(k1==0)
{P36=0;//蜂鸣器响
Delay();
P36=1;//蜂鸣器停
Dalay();
key_time();
}
}
}
以上就是关于51单片机编程:先循环一遍流水灯,然后熄灭后蜂鸣器响三下停止全部的内容,包括:51单片机编程:先循环一遍流水灯,然后熄灭后蜂鸣器响三下停止、keil编程问题、单片机用汇编语言怎么写一个蜂鸣器程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)