单片机80c51汇编语言控制蜂鸣器‘嘟’一长三短程序

单片机80c51汇编语言控制蜂鸣器‘嘟’一长三短程序,第1张

单片机80c51汇编语言控制蜂鸣器‘嘟’一长三短程序

你这是实物开发板上的蜂鸣器吧,是有源的蜂鸣器程序很好写。蜂鸣器所接的单片机引脚输出有效控制电平,让蜂鸣器发声。那声音长短就调用延时子程序来控制,延时到,声音停,过一会再响,延时长,声音长,延时短,声音短。

显示格式为“时时分分”。由分位闪动来做秒计数表示。

一旦时间到则发出声响。

程序执行后工作指示灯LED闪动,表示程序开始执行,显示器显示“0000”,按下 *** 作键K1~K4动作如下:

(1) K1—设置现在的时间。

(2) K2—显示闹钟设置的时间。

(3) K3—设置闹铃的时间。

(4) K4—闹铃ON/OFF的状态设置,设置为ON时连续三次发出“哗”的一声,设置为OFF发出“哗”的一声。

设置当前时间或闹铃时间如下。

(1) K1—时调整。

(2) K2—分调整。

(3) K3—设置完成。

(4) K4—闹铃时间到时,发出一阵声响,按下本键可以停止声响。

如果是蜂鸣器的话,那么加一个电平信号就可以发声了。\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\r\n#include\r\n//本例采用89C52,晶振为110592MHZ\r\n//关于如何编制音乐代码,其实十分简单,各位可以看以下代码\r\n//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;\r\n//所以拿出谱子,试探编吧!\r\nsbitBeep=P1^5;\r\n\r\nunsignedcharn=0;//n为节拍常数变量\r\nunsignedcharcodemusic_tab[]={\r\n0x18,0x30,0x1C,0x10,//格式为:频率常数,节拍常数,频率常数,节拍常数,\r\n0x20,0x40,0x1C,0x10,\r\n0x18,0x10,0x20,0x10,\r\n0x1C,0x10,0x18,0x40,\r\n0x1C,0x20,0x20,0x20,\r\n0x1C,0x20,0x18,0x20,\r\n0x20,0x80,0xFF,0x20,\r\n0x30,0x1C,0x10,0x18,\r\n0x20,0x15,0x20,0x1C,\r\n0x20,0x20,0x20,0x26,\r\n0x40,0x20,0x20,0x2B,\r\n0x20,0x26,0x20,0x20,\r\n0x20,0x30,0x80,0xFF,\r\n0x20,0x20,0x1C,0x10,\r\n0x18,0x10,0x20,0x20,\r\n0x26,0x20,0x2B,0x20,\r\n0x30,0x20,0x2B,0x40,\r\n0x20,0x20,0x1C,0x10,\r\n0x18,0x10,0x20,0x20,\r\n0x26,0x20,0x2B,0x20,\r\n0x30,0x20,0x2B,0x40,\r\n0x20,0x30,0x1C,0x10,\r\n0x18,0x20,0x15,0x20,\r\n0x1C,0x20,0x20,0x20,\r\n0x26,0x40,0x20,0x20,\r\n0x2B,0x20,0x26,0x20,\r\n0x20,0x20,0x30,0x80,\r\n0x20,0x30,0x1C,0x10,\r\n0x20,0x10,0x1C,0x10,\r\n0x20,0x20,0x26,0x20,\r\n0x2B,0x20,0x30,0x20,\r\n0x2B,0x40,0x20,0x15,\r\n0x1F,0x05,0x20,0x10,\r\n0x1C,0x10,0x20,0x20,\r\n0x26,0x20,0x2B,0x20,\r\n0x30,0x20,0x2B,0x40,\r\n0x20,0x30,0x1C,0x10,\r\n0x18,0x20,0x15,0x20,\r\n0x1C,0x20,0x20,0x20,\r\n0x26,0x40,0x20,0x20,\r\n0x2B,0x20,0x26,0x20,\r\n0x20,0x20,0x30,0x30,\r\n0x20,0x30,0x1C,0x10,\r\n0x18,0x40,0x1C,0x20,\r\n0x20,0x20,0x26,0x40,\r\n0x13,0x60,0x18,0x20,\r\n0x15,0x40,0x13,0x40,\r\n0x18,0x80,0x00\r\n};\r\n\r\nvoidint0()interrupt1//采用中断0控制节拍\r\n{TH0=0xd8;\r\nTL0=0xef;\r\nn--;\r\n}\r\n\r\nvoiddelay(unsignedcharm)//控制频率延时\r\n{\r\nunsignedi=3m;\r\nwhile(--i);\r\n}\r\n\r\nvoiddelayms(unsignedchara)//豪秒延时子程序\r\n{\r\nwhile(--a);//采用while(--a)不要采用while(a--);各位可编译一下看看汇编结果就知道了!\r\n}\r\n\r\nvoidmain()\r\n{unsignedcharp,m;//m为频率常数变量\r\nunsignedchari=0;\r\nTMOD&=0x0f;\r\nTMOD|=0x01;\r\nTH0=0xd8;TL0=0xef;\r\nIE=0x82;\r\nplay:\r\nwhile(1)\r\n{\r\na:p=music_tab[i];\r\nif(p==0x00){i=0,delayms(1000);gotoplay;}//如果碰到结束符,延时1秒,回到开始再来一遍\r\nelseif(p==0xff){i=i+1;delayms(100),TR0=0;gotoa;}//若碰到休止符,延时100ms,继续取下一音符\r\nelse{m=music_tab[i++],n=music_tab[i++];}//取频率常数和节拍常数\r\nTR0=1;//开定时器1\r\nwhile(n!=0)Beep=~Beep,delay(m);//等待节拍完成,通过P1口输出音频(可多声道哦!)\r\nTR0=0;//关定时器1\r\n}\r\n}\r\n\r\n你参考这个吧

44矩阵键盘检测程序(新手用),本程序用于检测44矩阵按键,先检测是否有按

键按下,如果有按键按下,由P1口读出相应的编码值,由P0经两片74HC573输出给

8位数码管,P2^0位选,P2^1段选,P1接44矩阵按键

#include <reg52h>

#include<intrinsh> //头文件

#define uchar unsigned char //宏定义

#define uint unsigned int

sbit du=P2^1; //段选位

sbit we=P2^0; //位选位

uchar code duanma[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delay(xms) //延时函数

{

uchar i,j;

for(xms=i,i>0;i--;)

for(j=11;j>0;j--);

}

void main() //主函数

{

we=1; //位选开

P0=0; //8位数码管全部显示

we=0; //位选关

du=1; //段选开

P1=0x00; //初始化,8位数码管无显示

while(1)

{

uchar a,b;

P1=0xf0;

a=P1;

if(a!=0xf0)

{

delay(5); //去抖动

b=P1;

if(a==b)

{

a=0xfe;

do

{

P1=a;

if(a!=P1)

{

switch(P1)

{

case 0x7e:{P0=duanma[0];break;} //编码检测,第一个键按下显示0,第16个按键按下显示F

case 0xbe:{P0=duanma[1];break;}

case 0xde:{P0=duanma[2];break;}

case 0xee:{P0=duanma[3];break;}

case 0x7d:{P0=duanma[4];break;}

case 0xbd:{P0=duanma[5];break;}

case 0xdd:{P0=duanma[6];break;}

case 0xed:{P0=duanma[7];break;}

case 0x7b:{P0=duanma[8];break;}

case 0xbb:{P0=duanma[9];break;}

case 0xdb:{P0=duanma[10];break;}

case 0xeb:{P0=duanma[11];break;}

case 0x77:{P0=duanma[12];break;}

case 0xb7:{P0=duanma[13];break;}

case 0xd7:{P0=duanma[14];break;}

case 0xe7:{P0=duanma[15];break;}

}

}

a=_crol_(a,1); //循环移位去检测按键

}while(a!=0xef);

}

}

}

}

ORG 0000H

STAR:

JB P10,$; p10作为开关 打开程序才能继续下去

CALL DI ;发音200ms

CALL NO_DI ;静音200ms

CALL DI

CALL NO_DI

CALL DI

CALL NO_DI

SJMP STAR;继续从头执行程序

;-------------------

DI:

MOV R1,#100 ;发音200ms

D2:

CLR P17

LCALL DEL ;约1ms

SETB P17;

LCALL DEL;设置蜂鸣声音的频率高低

DJNZ R1, D2

RET

;-------------------

NO_DI:

MOV R1,#100 ;静音200ms

ND2:

; CLR P17

LCALL DEL ;约1ms

SETB P17;

LCALL DEL;设置蜂鸣声音的频率高低

DJNZ R1, ND2

RET

;-------------------

DEL: ;约1ms

MOV R7,#5

DLY1:

MOV R6,#100

DJNZ R6,$

DJNZ R7,DLY1

RET

END

以上就是关于单片机80c51汇编语言控制蜂鸣器‘嘟’一长三短程序全部的内容,包括:单片机80c51汇编语言控制蜂鸣器‘嘟’一长三短程序、让51单片机闹钟响十秒怎样写程序、单片机用汇编语言怎么写一个蜂鸣器程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9308231.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存