利用单片机驱动蜂鸣器发声:
C语言源程序:
#include<reg52.h> //包含52单片机的头文件
#inlcude<intrins.h> //该头文件包含了各种移位函数
//_crol_ 字符循环左移
//_cror_ 字符循环右移
//_irol_ 整数循环左移
//_iror_ 整数循环右移
//_lrol_ 长整数循环左移
//_lror_ 长整数循环右移
//_nop_ 空操作8051 NOP 指令
//_testbit_ 测试并清零位8051 JBC 指令
#define uint unsigned int //定义uint为无符号整型
#define uchar unsigned char //定义uchar为无符号字符型
uchar temp,num,num1; //定义temp,num,num1为三个无符号字符变量
sbit beep=P3^4; //定义蜂鸣器所在的端口位
void delay(uint); //延时函数原型声明
void main() //主函数
{
temp=0xfe; //对应二进制11111110 赋值给P1可点亮第一个发光二极管
while(1) //主循环
{
for(num1=0;num1<3;num1++) //子循环循环三次
{
for(num=0;num<8;num++) //子循环循环8次
{
P1=temp; //将temp赋值给P1点亮发光二极管
beep=0; //蜂鸣器发声
delay(100); //延时
temp=_crol_(temp,1);//将temp字符变量中的值左移一位
P1=0xff; //熄灭所有发光二级管
beep=1; //蜂鸣器停止发声
delay(100);延时
}
}
for(num1=0;num1<3;num1++) //子循环循环三次
{
for(num=0;num<8;num++) //子循环循环8次
{
P1=temp; //将temp赋值给P1点亮发光二极管
beep=0; //蜂鸣器发声
delay(100); //延时
temp=_cror_(temp,1);//将temp字符变量中的值右移一位
P1=0xff; //熄灭所有发光二级管
beep=1; //蜂鸣器停止发声
delay(100);延时
}
}
}
}
void delay(uint a) //延时函数
{
uint x,y; //定义无符号变量X,Y
for(x=a;x>0;x--) //外循环将x的值循环减1 直到小于0
for(y=100;y>0;y--); //内循环将y的值循环减1 直到小于0
}
//程序效果 发光二极管依次从左到右闪亮 每闪亮一次 蜂鸣器发声 循环3次 然后倒过来再次循环闪亮 每闪亮一次 蜂鸣器发声
|