本文主要是介绍基于51单片机的嗡鸣器7发出七阶音符,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一.功能介绍
基于51单片机的嗡鸣器7发出七阶音符
使用数码管显示目前所播放的音符 矩阵键盘1-7切换音符 13键播放下一个音符
独立按键链接外部中断1 控制播放的开启与暂停
二.使用平台
使用普中A5开发板 (其他开发板可能需要调整接线位置或者是修改程序的引脚)
三.原理图
四.下载链接
程序下载链接 提取码8848
开发板原理图下载链接 提取码8848
五.程序
注意:
因为程序包含文件较多 所以我不再全部列举有需要的可以点击上方链接下载
1.主函数
#include <REGX52.H>
#include "Delay.h"
#include "MatrixKey.h"
#include "Timer0.h"
#include "zhongduan.h"unsigned char KeyNum;
unsigned int Password,Count;typedef unsigned int u16;
typedef unsigned char u8;#define SMG_A_DP_PORT P0 sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay_10us(u16 ten_us)
{while(ten_us--);
}void smg_display(int num,int duan)
{u8 i=0;// for(i=0;i<8;i++)
// {switch(duan)//λѡ{case 0: LSC=1;LSB=1;LSA=1;break;case 1: LSC=1;LSB=1;LSA=0;break;case 2: LSC=1;LSB=0;LSA=1;break;case 3: LSC=1;LSB=0;LSA=0;break;case 4: LSC=0;LSB=1;LSA=1;break;case 5: LSC=0;LSB=1;LSA=0;break;case 6: LSC=0;LSB=0;LSA=1;break;case 7: LSC=0;LSB=0;LSA=0;break;}SMG_A_DP_PORT=gsmg_code[num];//´«ËͶÎÑ¡Êý¾Ýdelay_10us(100);//ÑÓʱһ¶Îʱ¼ä£¬µÈ´ýÏÔʾÎȶ¨SMG_A_DP_PORT=0x00;//ÏûÒô
// }
}void main()
{int erro=0;Timer0_Init();//定时器初始化initEx0() ;//中断初始化while(1){KeyNum=MatrixKey();if(KeyNum){if(KeyNum<=6) //{if(Count<6) //如果输入次数小于6{Count++; //计次加一i_yindiao=KeyNum%10;;if(Count==6){Count=0;}}}if(KeyNum==10){i_yindiao=0;}
// if(KeyNum==13) {i_yindiao++;if(i_yindiao>6){i_yindiao=0;}}}if(erro==0){smg_display(i_yindiao,4);//显示音调}}
}
2.中断函数
#include <REGX52.H>
#include "Delay.h"/*** @brief 矩阵键盘读取按键键码* @param 无* @retval KeyNumber 按下按键的键码值如果按键按下不放,程序会停留在此函数,松手的一瞬间,返回按键键码,没有按键按下时,返回0*/
unsigned char MatrixKey()
{unsigned char KeyNumber=0;P1=0xFF;P1_3=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}P1=0xFF;P1_2=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}P1=0xFF;P1_1=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}P1=0xFF;P1_0=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}return KeyNumber;
}
这篇关于基于51单片机的嗡鸣器7发出七阶音符的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!