【Proteus】蜂鸣器播放音乐

按键按一次,蜂鸣器响一次 ,LCD1602同步。

复制代码
#include <REGX52.H>
#include <INTRINS.H>

unsigned int keynum;
sbit RS=P3^0; //**
sbit RW=P3^1;  //**
sbit E=P3^2; //**
sbit buzzer=P1^5;
void delay(unsigned int n)//1ms  
{
  unsigned char a,b,c,m;
	for(m=n;m>0;m--)
    for(c=1;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}
unsigned char key()
{
	unsigned char keynumber=0;
	if(P1_0==0)
	{
		delay(20);
		while(P1_0==0);
		delay(20);
		keynumber=1;
	}
	if(P1_1==0)
	{
		delay(10);
		while(P1_1==0);
		delay(10);
		keynumber=2;
	}
	if(P1_2==0)
	{
		delay(10);
		while(P1_2==0);
		delay(10);
		keynumber=3;
	}
	if(P1_3==0)
	{
		delay(20);
		while(P1_3==0);
		delay(20);
		keynumber=4;
	}
	return keynumber;
}
void writedat(unsigned char dat)
{
	RS=1;
	RW=0;
	E=0;
	P2=dat;
	delay(10);	  //看情况要不要延时
	E=1;
	E=0;
}
void writecom(unsigned char com)
{
	RS=0;
	RW=0;
	E=0;
	P2=com;
	delay(10);
	E=1;
	E=0;
}
void initlcd()
{
	writecom(0x38);
	writecom(0x0c);
	writecom(0x06);
	writecom(0x01);
}
void LCD_SetCursor(unsigned char Line,unsigned char Column)
{
	if(Line==1)
	{
		writecom(0x80|(Column-1));
	}
	else if(Line==2)
	{
		writecom(0x80|(Column-1+0x40));
	}
}
int LCD_Pow(int X,int Y)
{
	unsigned char i;
	int Result=1;
	for(i=0;i<Y;i++)
	{
		Result*=X;
	}
	return Result;
}
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{
	unsigned char i;
	LCD_SetCursor(Line,Column);
	for(i=Length;i>0;i--)
	{
		writedat(Number/LCD_Pow(10,i-1)%10+'0');
	}
}
void buzzer_time(unsigned int ms)
{
	unsigned int i;
	for(i=0;i<ms;i++)
	{
		buzzer=!buzzer;
		delay(1);			   //每隔1ms翻转一次,周期为2ms,频率500hz
	}	
}
void main()
{
	initlcd();
	while(1)
	{
		keynum=key();
		if(keynum)
		{
			buzzer_time(500);
			LCD_ShowNum(1,1,keynum,1);	
		}	
	}
}

《小星星》乐谱

复制代码
#include <REGX52.H>
#include <INTRINS.H>
unsigned int freqtable[]={63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,65058,65085,65110,65134, 65157,65178,65198,65217,65235,65252,65268,65283,};
unsigned char music[]={
12,4,
12,4,
19,4,
19,4,
21,4,
21,4,
19,4+4,
17,4,
17,4,
16,4,
16,4,
14,4,
14,4,
12,4+4,
};
unsigned char freqselect,musicselect;
unsigned int keynum;
sbit RS=P3^0; //**
sbit RW=P3^1;  //**
sbit E=P3^2; //**
sbit buzzer=P1^5;
void delay(unsigned int t)
{
	unsigned int i=0,j=0;
	for(i=0;i<t;i++)
	
	{
		for(j=0;j<120;j++);
	}
}

void main()
{
	buzzer=0;
	inittimer();
	//initlcd();
	while(1)
	{
		freqselect=music[musicselect];
		musicselect++;
		delay(125*music[musicselect]);
		musicselect++;
		TR0=0;
		delay(5);
		TR0=1;

	}
}
void time0() interrupt 1//定时器0中断函数
{
	TH0=freqtable[freqselect]/256; //初值=65536-1000=64536=FC18H,定时1ms
	TL0=freqtable[freqselect]%256;
	buzzer=!buzzer;///1ms翻转一次,相当于一个周期为2ms,频率500hz
}
相关推荐
点灯小铭1 小时前
基于单片机的多模式自动洗衣机设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计
La Pulga2 小时前
【STM32】RTC实时时钟
c语言·stm32·单片机·嵌入式硬件·mcu·实时音视频
m0_555762902 小时前
STM32产品程序测试完整指南
stm32·单片机·嵌入式硬件
普中科技2 小时前
【普中Hi3861开发攻略--基于鸿蒙OS】-- 第 26 章 WIFI实验-AP 建立网络
单片机·嵌入式硬件·wifi·liteos·hi3861·普中科技
普中科技3 小时前
【普中Hi3861开发攻略--基于鸿蒙OS】-- 第 24 章 OLED液晶显示实验
单片机·嵌入式硬件·oled·liteos·hi3861·普中科技
冻结的鱼3 小时前
STM32H5 的 PB14 引脚被意外拉低的问题解析
stm32·单片机·嵌入式硬件
小莞尔4 小时前
【51单片机】【protues仿真】基于51单片机彩灯控制器系统
单片机·嵌入式硬件
文火冰糖的硅基工坊4 小时前
[嵌入式系统-146]:五次工业革命对应的机器人形态的演进、主要功能的演进以及操作系统的演进
前端·网络·人工智能·嵌入式硬件·机器人
老六哥_AI助理指南4 小时前
为什么AI会改变单片机的未来?
人工智能·单片机·嵌入式硬件
点灯小铭4 小时前
基于单片机的智能家居多参数环境监测与联动报警系统设计
单片机·mongodb·毕业设计·智能家居·课程设计·期末大作业