基于avr单片机的电子琴设计内容摘要:
00}, {0,0} }。 ////// abcdefg void music_data_sing(void) { sound(music_data[i][0])。 //输出音符 // PORTA=seg7_data(i%16)。 delay_ms(music_data[i][1])。 //节拍延时 TCCR1A = 0x00。 //奏完一个音符停止 PORTD|=15。 if(!music_data[++i][1]) //准备一下个音符 { i=0。 play=0。 pause=1。 input=0。 if((++list)5) {list=0。 }。 } } /************************************ * 端口初始化函数 * ************************************/ void port_init(void) { DDRD|=0xa0。 //D5 口配置为输出,驱动蜂鸣器 PORTD|=0x0f。 DDRB=0xf0。 PORTB=0X0F。 DDRA=0xff。 Seg7_Led_Init()。 MCUCR=0x00。 GICR = 0x40。 SEI()。 } /********************************* name: list_deal()。 function: deal with many songs of the machine **********************************/ extern void list_deal(void) { switch(list) { case 0: butterfly_lovers_sing()。 break。 case 1: moscow_night_sing()。 break。 case 2: Sdu_Song_sing()。 break。 case 3: super_mario_sing()。 break。 case 4: kaqiusha_sing()。 break。 case 5: music_data_sing()。 break。 } } /********************************* name: key_deal()。 function: deal with states of the machine **********************************/ extern void key_deal(void) { if(state==0)//播放状态 { while(playamp。 amp。 pause) { list_deal()。 /* sound(music_data[i][0])。 //输出音符 delay_ms(music_data[i][1])。 //节拍延时 TCCR1A = 0x00。 //奏完一个音符停止 PORTD|=15。 if(!music_data[i++][1]) { i=0。 } *///调试用 } //播放选择的音乐 } //播放 mode else { while(playamp。 amp。 pauseamp。 amp。 (~input)) { sound(Mode_Data[MUSIC_DATA[i][0]])。 //输出音符 PORTA=seg7_data(i%16)。 delay_ms(400)。 //节拍延时 TCCR1A = 0x00。 //奏完一个音符停止 PORTD|=15。 if(!MUSIC_DATA[++i][1]) //准备一下个音符 { i=0。 play=0。 pause=1。 input=0。 } }//播放选择的音乐 }//输入 mode } /************************************** handle keyin。 PROBLEMS: **************************************/ pragma interrupt_handler int0_isr:2 void int0_isr(void) { TCCR1A = 0x00。 //关计时器 减少干扰,只有再打开才会响 GICR amp。 = ~0x40。 //关中断 key=key_scan()。 //external interupt on INT0 if(key) { if(!state)//播放状态 { Seg7_Bit0_En()。 switch(key) { case PAUSE:{pause=0。 break。 }。 case PLAY:{play=1。 pause=1。 break。 }。 case STOP:{play=0。 i=0。 break。 }。 case RST:{if(~play) {state=1。 input=1。 break。 }。 i=0,play=0,pause=1。 break。 }。 case ADVANCE: if(play==1) {if((i+2)length) break。 else i+=2。 break。 }。 if(!play) {if(++list5)list=0。 break。 }。 case BACK: if(play==1) {if(i2){i=0。 break。 }else i=2。 break。 }。 if(!play) {if(list0)list=5。 break。 }。 default :break。 }。 Seg7_Data_Port=seg7_data(i)。 } else if(state) { if((key=8)amp。 amp。 input) { add(key)。 MUSIC_DATA[i++][0]=key。 MUSIC_DATA[i1][1]=400。 sound(Mode_Data[key])。 delay_ms(200)。 TCCR1A = 0。 //奏完一个音符停止 PORTD|=15。 }。 //音乐数据 if(key8) { switch(key) { case PAUSE:{pause=0。 break。 }。 case PLAY: if(~input) //不是输入模式 {play=1。 pause=1。 break。 } /* if(i!=0) //输入模式 {MUSIC_DATA[i][0]=0。 MUSIC_DATA[i][1]=0。 //clear i=0,play=1,pause=1。 }。 input=0。 break。 */ case DEL: if(input) {del(i4?MUSIC_DATA[i5][0]:16)。 if(i0) i。 }。 break。 case OVER: if(input)//输入模式 {MUSIC_DATA[i][0]=0。 MUSIC_DATA[i][1]=0。 //clear play=0。 i=0,input=0,pause=1。 break。 }。 case STOP: if(~input){play=0,pause=1,i=0。 }。 break。 //输入模式 case RST: if(input) {i=0,pause=1,play=0。 break。 }。 //如果正在输入, if(~inputamp。 amp。 ~playamp。 amp。 pause)////没有输入 {i=0,pause=1。 state=0。 break。 } if(~inputamp。 amp。 ~pause) //没有输入且暂停 切换模式 {input=1,i=0,play=0,pause=1。 break。 }//则 case STOP:{play=0。 i=0。 break。 }。 重新输入 case ADVANCE:if(inputamp。 ~pause) {MUSIC_DATA[i1][1]+=200。 show(MUSIC_DATA[i1][1])。基于avr单片机的电子琴设计
相关推荐
次护理教育的招生数量比例将达到 50%、 30%、 20%的结构目标。 根据卫生部、教育部《护理、药学和医学相关类高等教育改革和发展目标规划》要求,近五年内 ,招生总数每年 将 递增 15%。 可见,发展护理高职教育势在必行。 现代护理是整体护理指导下“以病人为中心”的护理服务,我国护理高职人才的培养主要体现在专科技能、自学能力、协调沟通能力三个方面。 我们输送给社会的人才不仅应该具备一流的技
( 5)编程思想及程序框图 先从输入端(第 1级)开始,逐级进行,共进行 M 级运算。 在进行第 L级运算时,依次求出 B=2 1L 个不同的旋转因子,每求出一个旋转因子,就计算完它对应的所有 2 LM个蝶形。 这样,我们可用三重循环程序实现 DITFFT 运算,程序框图如上图 所示, 顺 序 倒 序 十进制数 二进制数 二进制数 十进制数 0 000 000 0 1 001 100 4 2
人注册 登记 •直接到所在地海关(隶属海关)办理注册登记,无需办理许可程序,直接颁发《收发货人注册登记证书》 提交材料 注册登记资料:登记备案表、企业章程、营业执照等资料。 提交材料后,海关审核,符合条件的核发 “中华人民共和国进出口货物收发货人报关注册登记证书 ”(简称 “收发货人登记证书 ”) •注册地海关给报关企业核发的是 “报关企业登记证书 ” •注册地海关给收发货人核发的是
转动时,缺口进入凹槽时,红外线可以通过,缺口离开凹槽红外线被阻挡。 由此可见,测距轮每转一周,红外光接收管均能接收到一个脉冲信号经过整形器后送入计数器或直接送入单片机中。 为实现可逆记数功 能,我们在测距仪中并列放置了两个槽型光电耦合器,遮光盘先后通过凹槽可产生两个脉冲信号。 根据两个脉冲信号发生的先后顺序与两个光电耦合器的位置关系,即可计算出玩具车的行驶方向(前进或后退)。
,各位数码管的段选线相应并联在一起,由一个 8位的 I/O 口控制;各位的位选线(共阴极或共阳极)由另外的 I/O 口控制。 以动态方式显示时,各数码管分时轮流 选通。 要使其稳定显示,必须采用扫 描方式,即在某一时刻只选通一位数码管,并送出相应的段码。 依此规律循环,即可使各位数码管显示将要显示的字符,虽然这些字符是在不同的时刻分别显示的,但由于人眼存在视觉暂留效应
0mm 圆角。 12 本工程屋面材料防水,专业性强,为保证质量,我们请专业人 员作防水层。 原材料在使用前经化验合格后才能使用,不合格材料严禁使用。 1水、暖、电安装工程 ⑴ 管道安装应选用合格的产品,并按设计放线,坡度值及坡向应符合图纸和规范要求。 ⑵ 水、暖安装前做单项试压,完毕后做通、闭水后试验和打压试验,卫生间闭水试验不少于 24 小时。 ⑶ 电预埋管路宜沿最近线路敷设,应尽量减少弯曲