《基于51单片机(bluesky开发板)的电子琴程序(共3页).docx》由会员分享,可在线阅读,更多相关《基于51单片机(bluesky开发板)的电子琴程序(共3页).docx(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上#include#include/包含LCD1602的显示函数等#include/包含键值扫描函数,输出key_num#define FSCLK/晶振频率sbit BEEP=P14; /蜂鸣器输出脚unsignedintfre16 =100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600;/存好预定的频率值,可以设定任意想要的频率/* 函数功能 :延时函数,函数名Delay_ms()* 函数说明 :利用软件延时,占用CPU,经调试最小单位大约为1ms* 入口参数 :time:需要延时
2、的时间,单位ms* 出口参数 :无*/void Delay_ms(unsigned int time)unsigned int i,j;for(i = 0;i time;i +)for(j = 0;j 930;j +);/* 函数功能 :定时翻转跟蜂鸣器相连的引脚的电平,输出一定频率的脉冲信号* 函数说明 :定时器0中断服务函数* 入口参数 :无* 出口参数 :无*/void time0() interrupt 1/使用定时器0的工作方式2,定时器中断服务程序TH0 = (65536-FSCLK/(12*frepiano)/256; /每次中断,重新配置定时器的高8位TL0 = (65536-
3、FSCLK/(12*frepiano)%256; /每次中断,程序配置定时器的低8位BEEP=!BEEP;/然后取反音乐输出,输出一个反电平/短时间内多次取反则输出一定频率的脉冲/* 函数功能 :主函数* 入口参数 :无* 出口参数 :无*/void main() unsigned char piano=0,key=0;/初始值LCD_1602_Init(); /液晶显示前进行初始化TMOD = 0X01; /定时器使能 TH0 = (65536-FSCLK/(12*fre0)/256; /配置定时器的高8位TL0 = (65536-FSCLK/(12*fre0)%256; /配置定时器的低8
4、位ET0 = 1; /允许定时器0中断EA = 1; /打开总中断Write_1602_String(Welcome,0X80); /开机显示欢迎语:WelcomeWrite_1602_String(By ,0X80+0x40);/显示作者:Delay_ms(5000);/延时5s后开始进入正式程序LCD_1602_Init();/液晶屏初始化Write_1602_String(Happy Play,0X80); /显示开始使用:Happy Playwhile(1)/在这段函数中,不断扫描键值,每当键值不等于0时,说明有键被按下,/此时开始播放对应的音阶。key=Key_Scan();/不断扫
5、描键值if(key!=0)/若键值不等于0,说明有按键被按下LCD_1602_Init();/初始化LCD屏Write_1602_String(You had played,0X80);/显示所按下的键Write_1602_String(Key:,0X80+0x40);if(key10) Write_1602_Data(0x30+key);/当键值为个位数,显示按键值 piano=key;/频率调整为键值对应的频率 TR0=1;/启动定时器 Delay_ms(500); /每按键一次,蜂鸣器响一次,每次响0.5s TR0=0;/关闭定时器else/同上Write_1602_Data(0x31);/键值为两位数,先显示1,再显示按键值Write_1602_Data(0x30+key-10); piano=key; TR0=1; Delay_ms(500); TR0=0;专心-专注-专业