很简单的
#include<reg52h>
#define uchar unsigned char
#define uint unsigned int
sbit fengmingqi=P0^0; //声明IO口
void delay(uint x)//延时子函数
{
uint i,j;
for(i=x;i>0;i--)
for(j=50;j>0;j--);
}
void main(void)
{
while(1) //循环
{
fengmingqi=1; //p00口高电平,蜂鸣器发声
delay(500); //延时
fengmingqi=0; //p00口低电平,蜂鸣器不发声
delay(500); //延时
}
}
#include<reg51h>
#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;
}
}
}
时间运行到整点时间时,闹钟响,几点钟就响几声(每声 持续响 2 秒,每两声之间时间间隔 2 秒)
独立按键设置时间。
整点报时,1点蜂鸣器响1下,2点蜂鸣器响2下,同理其他点。
;假设P25控制蜂鸣器,低电平响。
;启动入口
ORG 0000H ;复位启动
LJMP START ;
ORG 000BH ;T0中断
LJMP T0INT ;
ORG 0100H ;
LJMP START ;
;
;主控程序
START: MOV SP,#80H ;初始堆栈值
MOV TMOD,#01H ;定时器0工作于方式1
MOV TH0,#03CH ;定时器0定时时间=50mS
MOV TL0,#0B0H ;
CLR P25 ;蜂鸣器响
MOV YSJS,#200 ;20050mS=10000mS
SETB TR0 ;定时器0启动,开始定时
JMP $ ;死循环
;
;定时器0中断服务程序
T0INT: DJNZ YSJS,QT0 ;不到1秒跳转
SETB P25 ;关闭蜂鸣器
CLR TR0 ;
;
QT0: MOV TH0,#03CH ;定时器0定时时间=50mS
MOV TL0,#0B0H ;
RETI ;
;
YSJS EQU 30H ;
END ;
如果是蜂鸣器的话,那么加一个电平信号就可以发声了。\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<reg51h>
#include<intrinsh>
#define uchar unsigned char
uchar pwm,ctl=5;
sbit fmq=P1^0;
bit flag;
void delay(uchar a)
{
uchar i;
while(a--)for(i=0;i<120;i++);
}
void t0isr() interrupt 1
{
pwm++;
if(pwm<=ctl)P0=0xff;
else P0=0x00;
if(pwm==100)
{
pwm=0;
ctl++;
}
if(ctl==100)flag=1;
}
main()
{
uchar i,led;
TMOD=0x02;
TH0=236;
TL0=236;
ET0=1;
EA=1;
while(1)
{
led=0xfe;
for(i=0;i<8;i++)
{
P0=led;
led=led<<1;
delay(200);
}
led=0xff;
delay(200);
led=0x7f;
for(i=0;i<8;i++)
{
P0=led;
led=led>>1;
delay(200);
}
TR0=1;
flag=1;
while(flag);
TR0=0;
}
}
以上就是关于51单片机,编写延时程序,控制蜂鸣器发声;全部的内容,包括:51单片机,编写延时程序,控制蜂鸣器发声;、求汇编语言或c语言编写无源蜂鸣器程序!、单片机整点报时几点响几下等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)