音节数值表
/*********************************************************************************************
程序名: DoToy系列作品 MidTouch21电子琴程序 编写人: 杜洋 编写时间: 2009年6月3日 硬件支持: STC11L60XE 外部12MHZ晶振 电源3V 接口说明: 详见《DoToy_MidTouch21电路原理图》 修改日志: NO.1-20090603_17.54 完成电子琴21键的测试(20090603_1备) NO.2-20090604_01.29 改为第二次新板的硬件电路(20090604_2备) /********************************************************************************************* 说明: 用STC11Fxx单片机I/O接口的高阻态输入功能,扫描I/O接口电平。 手指将VCC线和I/O接口线半连接,产生高电平信号。 /*********************************************************************************************/
void INIT(void); #include <STC11Fxx.H> /*********************************************************************************************/ sbit SPEAKER = P1^0;//扬声器,低使能 sbit LED = P3^0;//LED正极,强推 sbit LED2 = P3^1;//LED负极 sbit KEY11 = P2^0; sbit KEY12 = P2^1; sbit KEY13 = P2^2; sbit KEY14 = P2^3; sbit KEY15 = P2^4; sbit KEY16 = P2^5; sbit KEY17 = P2^6; sbit KEY21 = P2^7; sbit KEY22 = P4^4; sbit KEY23 = P4^5; sbit KEY24 = P4^6; sbit KEY25 = P0^7; sbit KEY26 = P0^6; sbit KEY27 = P0^5; sbit KEY31 = P0^4; sbit KEY32 = P0^3; sbit KEY33 = P0^2; sbit KEY34 = P0^1; sbit KEY35 = P0^0; sbit KEY36 = P3^3; sbit KEY37 = P3^2; /*********************************************************************************************/ unsigned char MUSIC; unsigned char STH0,STL0; unsigned int code tab[]={ //音阶表 63628,63835,64021,64103,64260,64400,64524, //低音1-7 64580,64684,64777,64820,64898,64968,65030, //中音1-7 65058,65110,65157,65178,65217,65252,65283 //高音1-7 }; /*********************************************************************************************/ void delay1ms (unsigned int a){ // 1ms延时程序(12MHz 10倍于51单片机速度时) unsigned int i; while( --a != 0){ for(i = 0; i < 600; i++); } }/***************************************************************************************/ void INIT(void){//初始化程序 TMOD=0x11; ET0=1; ET1=1; EA=1; P0M1 = 0xff;//I/O接口工作方式 P0M0 = 0x00;//P0全为高阻输入 P1M1 = 0xfe;//P1.0为准双向,其他为高阻输入 P1M0 = 0x00; P2M1 = 0xff;//P2全为高阻输入 P2M0 = 0x00; P3M1 = 0xfc;//P3.0为强推,其他为标准双向 P3M0 = 0x01; P4M1 = 0xff;//P4全为高阻输入 P4M0 = 0x00; P4SW = 0xff; LED = 1; LED2 = 0; SPEAKER = 0; } /***************************************************************************************/ void main(void){ INIT(); //初始化 while(1){ if(KEY37 == 1){delay1ms(20);if(KEY37 == 1){MUSIC = 20;}} //高音B(37) if(KEY36 == 1){delay1ms(20);if(KEY36 == 1){MUSIC = 19;}} if(KEY35 == 1){delay1ms(20);if(KEY35 == 1){MUSIC = 18;}} if(KEY34 == 1){delay1ms(20);if(KEY34 == 1){MUSIC = 17;}} if(KEY33 == 1){delay1ms(20);if(KEY33 == 1){MUSIC = 16;}} if(KEY32 == 1){delay1ms(20);if(KEY32 == 1){MUSIC = 15;}} if(KEY31 == 1){delay1ms(20);if(KEY31 == 1){MUSIC = 14;}} //3 if(KEY27 == 1){delay1ms(20);if(KEY27 == 1){MUSIC = 13;}} if(KEY26 == 1){delay1ms(20);if(KEY26 == 1){MUSIC = 12;}} if(KEY25 == 1){delay1ms(20);if(KEY25 == 1){MUSIC = 11;}} if(KEY24 == 1){delay1ms(20);if(KEY24 == 1){MUSIC = 10;}} if(KEY23 == 1){delay1ms(20);if(KEY23 == 1){MUSIC = 9;}} if(KEY22 == 1){delay1ms(20);if(KEY22 == 1){MUSIC = 8;}} if(KEY21 == 1){delay1ms(20);if(KEY21 == 1){MUSIC = 7;}} //2 if(KEY17 == 1){delay1ms(20);if(KEY17 == 1){MUSIC = 6;}} if(KEY16 == 1){delay1ms(20);if(KEY16 == 1){MUSIC = 5;}} if(KEY15 == 1){delay1ms(20);if(KEY15 == 1){MUSIC = 4;}} if(KEY14 == 1){delay1ms(20);if(KEY14 == 1){MUSIC = 3;}} if(KEY13 == 1){delay1ms(20);if(KEY13 == 1){MUSIC = 2;}} if(KEY12 == 1){delay1ms(20);if(KEY12 == 1){MUSIC = 1;}} if(KEY11 == 1){delay1ms(20);if(KEY11 == 1){MUSIC = 0;}} //1 if(MUSIC != 0xff){ //如果有音阶数值(非0XFF时) STH0=tab[MUSIC]/256; //将音阶的频率值装入定时器T0 STL0=tab[MUSIC]%256; TR0=1; //启动定时器 MUSIC = 0xff; //清除寄存器 }else{ //否则 SPEAKER = 1; //关扬声器 LED = 1; TR0=0; //关定时器 } } } /***************************************************************************************/ void t0(void) interrupt 1 using 0{//定时器0产生音频 TH0=STH0; TL0=STL0; SPEAKER=~SPEAKER; //取反频率产生音调 LED = SPEAKER; //LED同频闪烁 } /***************************************************************************************/ /*************************************************************
* 杜洋工作室 www.DoYoung.net /*************************************************************/ |
|