#define uchar unsigned char
#define uint unsigned int
sbit SPK=P1^0
sbit K1=P1^7
//发声函数,注意这里是用扬声器做陵哗,纯行不能用普通的蜂汪肆鸣器
void Alarm(uchar t)
{
uchari,j
for(i=0i<200i++)
{
SPK=~SPK
for(j=0j<tj++)//由参数t行成不同的频率产生不同的声音
}
}
voidmain()
{
SPK=0
while(1)
{
if(K1==1)
{
Alarm(90)
Alarm(120)
}
}
}
下驱动蜂鸣器的编程示例,供参考A.第一种,普通IO高低电平驱动法
运行环境: S3F9454,Fosc= 3.2MHz无分频
P2.0为蜂鸣输出端口
本例输出频率为4KHZ,即每250US一个周期,高低电平时间分老搭别为125US
BEEP:
LD BTCON,#10100011B 看门狗禁用
DI
PUSH R5
PUSH R6
首先配置P2.0为普通推挽输出端口
AND P2CONL,#0FEH
OR P2CONL,#02H
LD R6,#0FAH R6设置慧腊输出方波个数,本例为250个(计时62.5MS)
ONE_BEEP:
LD R5,#27H R5为频率发生计时器,本例为近似125US(4KHZ)
XOR P2,#01H
_LOOP:
DEC R5
JR NZ,_LOOP
DEC R6
JR NZ,ONE_BEEP
LD BTCON,#02H 恢复看门狗运行
EI
POP R6
POP R5
RET
-----------------------------------------------------------
B.利用P2.0配置为T0定时器匹配输出方式产生
注: 该方式可用于侍碧拿带多位数码显示扫描的软件中,可有效避免因蜂鸣器
输出而造成的数码显示抖动闪烁
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)