标题: 电子琴51单片机开发 [打印本页]
作者: wxx89706 时间: 2019-12-23 19:24
标题: 电子琴51单片机开发
#include<REG52.H>
sbit speaker=P3^1; //无源蜂鸣器
#define KeyPort P1 //按键
//////////////////////////////////////////////
unsigned char timer0h,timer0l,time; //timer0h,timer0l为定时器T1的高低位初值,time为对应的节拍时间
unsigned char key_num;
signed int fre; //对应频率数据表的地址
void delay(unsigned char t); //延时子函数,控制发音的时间长度
void delayms(unsigned int t); //普通延时子程序,可用于按键消抖
// 频率-半周期数据表 高八位 共保存了四个八度的28个频率数据
unsigned char code FREQH[]={
0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音1234567
0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC, //1,2,3,4,5,6,7,i
0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音 234567
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音 1234567
// 频率-半周期数据表 低八位
unsigned char code FREQL[]={
0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音1234567
0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i
0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音 234567
0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音 1234567
sbit smg=P3^0;
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管字符码0-9
unsigned char High,Low; //定时器预装值的高8位和低8位
void display(unsigned char n) //显示函数
{
smg=0; //选中1位
P2=table[n]; //P0口输出数字码,显示十位数
delayms(5); //延时5ms
}
/* 按键处理 */
void KEY()
{
switch(KeyPort) //对按键进行处理
{
case 0xfe:key_num= 1;display(1);break; //分别对应不用的音调
case 0xfd:key_num= 2;display(2);break;
case 0xfb:key_num= 3;display(3);break;
case 0xf7:key_num= 4;display(4);break;
case 0xef:key_num= 5;display(5);break;
case 0xdf:key_num= 6;display(6);break;
case 0xbf:key_num= 7;display(7);break;
case 0x7f:key_num= 8;display(8);break;
default:key_num= 0;break;
}
if(key_num==0)
{
TR1=0;
}
else
{
TR1=1;
High=FREQH[key_num+6]; //从数据表中读出频率数值,实际上是定时的时间长度
Low=FREQL[key_num+6];
}
}
/* 主函数 */
void main(void)
{
TMOD=0x11; //T0 T1 均在工作方式1
ET1=1; //T1开中断
EA=1; //开总中断
while(1)
{
KEY(); //按键处理函数
}
}
void delayms(unsigned int t) //MS延时子程序
{
unsigned int i,j;
for(i=0;i<t;i++)
{
for(j=0;j<123;j++)
;
}
}
/* 定时器T1中断子程序 */
void Timer1_isr(void) interrupt 3
{
speaker=!speaker; //输出方波, 发音
TH1=High;
TL1=Low;
}
/* end */
-
3_7N1B6F7JYRFD(9CC{ZLX2.png
(198.8 KB, 下载次数: 47)
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |