sbit BEEP=P1^5//sbit是位定义的意思,即使用beep来代表单片P1端口的第5个IO口
void beep()//蜂鸣器子函数,方便调用,
{
unsigned char i , j//设置无符号字符型变量i;和J
for (i=0i<100i++)//定义一个for循环,每次完整地执行for里面的所有语句,i就自增1,直到i=10
{ //当i=100是,for循环就结束
BEEP=!BEEP//BEEP取反//蜂鸣器发生原理,进行电平取反,散蔽滚冲余原来为高电平,下一次执行就变成低电平
for (j = 0 j<200 j++)//需要产生方波这个是延时程序
}
BEEP=1//关闭蜂鸣器蜂鸣器电平不并段发生变化的时候,蜂鸣器无法发声。
}
蜂鸣器一直响很容易实现,无源蜂鸣竖吵者器给电平就可以控制发声了,程序如余薯下:
FMQ EQU P3.2ORG 0000H
LJMP 碰袭MAIN
ORG 0030H
MAIN:
MOV A,#0FEH
CLR FMQ
LOOP:
MOV P1,A
RL A
LCALL DELAY
SJMP LOOP
DELAY:
MOV R2,#200
DLY:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DLY
RET
END
#include<reg51.h>#define uchar unsigned char
sbit k1=P1^0
sbit k2=P1^1
sbit k3=P1^2
sbit k4=P1^3
sbit fmq=P1^7
uchar cnt,sec
vodi t0isr() interrupt 1
{
TH0=(65536-50000)/256
TL0=(65536-50000)%256
cnt++
if(cnt>=20)
{
cnt=0
sec--
if(sec==0)
{
TR0=0
fmq=1
}
}
}
main()
{
TMOD=0x01
TH0=(65536-50000)/256
TL0=(65536-50000)%256
ET0=1
EA=1
while(1)
{
if(k1==0)
{
sec=1
cnt=0
TR0=1
while(k1==0)
fmq=0
}
if(k2==0)
{
sec=2
cnt=0
TR0=1
while(k1==0)
fmq=0
}
if(k3==0)
{
sec=3
cnt=0
念搜返 TR0=1
while(k3==0)
fmq=0
}
if(k4==0)
{
sec=4
cnt=0
仔饥TR0=1
while(k1==0)
fmq=0
}
漏凯}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)