logo资料库

单片机 电子琴设计 八个音调 三首歌 歌词显示.doc

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
系统功能说明: 1、通过八个按键是否按下发出相应的 1234567i 这 8 个音调 2、实验中可以播放三首歌曲,通过开关控制 3、播放歌曲时,液晶屏显示播放歌曲号及歌词
附录 1:晶振为 12M 的音乐频率表 音符 频率(Hz) 简谱码(T值) 低1DO 262 #1DO# 277 低2RE 294 #2RE# 311 低3M 330 低4FA 349 #4FA# 370 低5SO 392 #5SO# 415 低6LA 440 #6 466 低7SI 494 中1DO 523 #1DO# 554 中2RE 587 #2RE# 622 中3M 659 中4FA 698 #4FA# 740 中5SO 784 #5SO# 831 中6LA 880 #6 932 中7SI 988 高1DO 1046 #1DO# 1109 高2RE 1175 #2RE# 1245 高3M 1318 高4FA 1397 #4FA# 1480 高5SO 1568 #5SO# 1661 高6LA 1760 #6 1865 高7SI 1967 休止符用TH0=FFH ,TL0=FFH表示 63628 63731 63835 63928 64021 64103 64185 64260 64331 64400 64463 64524 64580 64633 64684 64732 64777 64820 64860 64898 64934 64968 64994 65030 65058 65085 65110 65134 65157 65178 65198 65217 65235 65252 65268 65283 TH0=F7H TH0=F8H TH0=F9H TH0=F9H TH0=FAH TH0=FAH TH0=FAH TH0=FBH TH0=FBH TH0=FBH TH0=FBH TH0=FCH TH0=FCH TH0=FCH TH0=FCH TH0=FCH TH0=FDH TH0=FDH TH0=FDH TH0=FDH TH0=FDH TH0=FDH TH0=FDH TH0=FEH TH0=FEH TH0=FEH TH0=FEH TH0=FEH TH0=FEH TH0=FEH TH0=FEH TH0=FEH TH0=FEH TH0=FEH TH0=FEH TH0=FFH TL0=24H TL0=F3H TL0=5BH TL0=B8H TL0=15H TL0=67H TL0=B9H TL0=04H TL0=4BH TL0=90H TL0=CFH TL0=0CH TL0=44H TL0=79H TL0=ACH TL0=DCH TL0=09H TL0=34H TL0=5CH TL0=82H TL0=A6H TL0=C8H TL0=E2H TL0=06H TL0=22H TL0=3DH TL0=56H TL0=6EH TL0=85H TL0=9AH TL0=AEH TL0=C1H TL0=D3H TL0=E4H TL0=F4H TL0=03H 附录 2:LCD 相关资料 两行液晶显示的地址:(均为十六位计数) 0 1 2 3 4 5 6 7 8 9 A B C D E F
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 命令格式要求,设置地址指针的时候第 8 位为 1,后边为地址,即 AC0~AC6,就是对应上表 的地址。 附录 3:实验程序: RS BIT P2.0 ;定义液晶显示端口标号 RW BIT P2.1 E BIT P2.2 ;******************************************** ;T0 两个暂存变量 T0TH EQU 24H T0TL EQU 23H ORG 0000H LJMP INITION ORG 000BH LJMP T0INT ORG 0100H ;******************************************** ;*************************液晶初始化****************** INITION: MOV SP,#70H MOV P0,#01H ;清屏 CALL ENABLE MOV P0,#38H ;8 位,2 行显示 CALL ENABLE MOV P0,#0CH ;屏显 on,关光标 CALL ENABLE MOV P0,#06H ;计数地址加 1,自动右移 CALL ENABLE ;****************************************** ;开机提示 ;****************************************** MOV P0,#80H CALL ENABLE MOV DPTR,#TABLE0 CALL WRITE1 MOV P0,#00010000B CALL ENABLE MOV P0,#00010000B CALL ENABLE CALL DEL0 LJMP MAIN ;*********************************************写指令 ;写数据的第一行 ;光标左移两位
;查表程序,从表头到表尾 ENABLE: CLR RS CLR RW SETB E CALL DEL0 CLR E RET ;**********************************************写数据 WRITE1: MOV R1,#00H A1: MOV A,R1 MOVC A,@A+DPTR CALL WRITE2 INC R1 CJNE A,#00H,A1 RET WRITE2: MOV P0,A SETB RS CLR RW SETB E CALL DEL0 CLR E RET DEL0:MOV R4,#020H C0:MOV R5,#020H C1: DJNZ R5,C1 ;未到字符串末尾继续 ;直接将数据写入液晶屏 DJNZ R4,C0 RET ;****************************************** TABLE0:DB 'WELCOM HERE',00H ;*************************内存初始化****************** INITIAL: MOV R3,#08H MOV R0,#30H M1: MOV @R0,#00H INC R0 DJNZ R3,M1 RET ;*************************选择按键播放八个音调****************** MAIN: MOV SP,#80H ;初始化堆栈 MOV TMOD,#11H ;定时器 0 工作方式 0,定时器 1 工作方式 0
SETB EA SETB ET0 SETB ET1 START: SETB P3.7 CLR TR0 SCAN: ;计数器 0 允许 ;计数器 1 允许 ;关蜂鸣器 ;定时器不允许 ;键盘扫描 MOV A,P1 CJNE A,#0FFH,SU_KEY ;判断键盘按下,跳到 SU_KEY,若未按,继续 扫描 NOP LJMP SCAN SU_KEY: SU_KEY1: JB P1.0,SU_KEY2 MOV DPH,#0FCH MOV DPL,#44H SJMP PLAY SU_KEY2: JB P1.1,SU_KEY3 MOV DPH,#0FCH MOV DPL,#0ACH SJMP PLAY SU_KEY3: JB P1.2,SU_KEY4 MOV DPH,#0FDH MOV DPL,#09H SJMP PLAY SU_KEY4: JB P1.3,SU_KEY5 MOV DPH,#0FDH MOV DPL,#34H SJMP PLAY SU_KEY5: JB P1.4,SU_KEY6 MOV DPH,#0FDH MOV DPL,#82H SJMP PLAY SU_KEY6: JB P1.5,SU_KEY7 MOV DPH,#0FDH MOV DPL,#0C8H SJMP PLAY SU_KEY7: ;如果不是第 1 个键按下,转 ;如果不是第 2 个键按下,转 ;如果不是第 3 个键按下,转 ;如果不是第 4 个键按下,转 ;如果不是第 5 个键按下,转 ;如果不是第 6 个键按下,转 JB P1.6,SU_KEY8 ;如果不是第 7 个键按下,转
MOV DPH,#0FEH MOV DPL,#06H SJMP PLAY SU_KEY8: ;如果不是第 8 个键按下,转 JB P1.7,KEY1 MOV DPH,#0FEH MOV DPL,#22H SJMP PLAY PLAY: ;存高位字符 ;存低位字符 MOV T0TH,DPH MOV T0TL,DPL MOV TH0,T0TH MOV TL0,T0TL SETB TR0 MOV R2,#01B DJNZ R2,PLAY LCALL DELAY SJMP JUDGE ;启动定时器 0 ;1/4 拍 JUDGE: JB P2.4,START ;按键未按下,则继续扫描,否则,开始放音乐 ;*************************选择按键播放音乐****************** KEY1: JB P2.5,KEY2 ;第一个键(P2.5)按下,放音音乐 1 MOV R2,#00H LCALL MODD MOV DPTR,#MU_TAB1 AJMP MUSIC ;歌曲号显示 KEY2: JB P2.6,KEY3 ;第二个键(P2.6)按下,放音乐 2 MOV R2,#01H LCALL MODD MOV DPTR,#MU_TAB2 AJMP MUSIC ;歌曲号显示 KEY3: JB P2.7, NEXT_2 ;第三个键(P2.7)按下,放音乐 3 MOV R2,#02H LCALL MODD MOV DPTR,#MU_TAB3 AJMP MUSIC NEXT_2: LJMP START MUSIC: MOV TMOD,#01H MOV IE,#82H MOV R7,#00H ;歌曲号显示 ;返回 ;允许 T0 中断
LOOP: CLR A MOVC A,@A+DPTR MOV R1,A INC DPTR PUSH DPH PUSH DPL GECI1: JB P2.5,GECI2 MOV DPTR,#GE1 AJMP GECI GECI2: JB P2.6,GECI3 MOV DPTR,#GE2 AJMP GECI GECI3: JB P2.7, TIAOCHU MOV DPTR,#GE3 AJMP GECI TIAOCHU:LJMP START GECI: ;查表取代码 ;定时器高八位存 R1 ;保护现场 ;第一个键(P2.5)按下,显示歌词 1 ;第二个键(P2.6)按下,显示歌词 2 ;第三个键(P2.7)按下,显示歌词 3 LCALL QINGCHU MOV P0,#0C0H CALL ENABLE XIANSHI1: MOV A,R7 MOVC A,@A+DPTR CALL WRITE2 INC R7 CJNE A,#00H,XIANSHI1 MOV P0,#00010000B CALL ENABLE MOV P0,#00010000B CALL ENABLE POP DPL POP DPH CLR A MOVC A,@A+DPTR MOV R0,A ORL A,R1 JZ NEXT0 MOV A,R0 ANL A,R1 ;显示的位置 ;查表取音乐汉语拼音显示 ;将光标左移一位 ;将光标左移一位 ;定时器低八位存 R0 ;相或结果全 0 为休止符
CJNE A,#0FFH,NEXT ;相与结果为 0FFH 表示乐曲结束 MOV P0,#01H CALL ENABLE LJMP INITION NEXT: MOV T0TH,R1 MOV TH0,T0TH MOV T0TL,R0 MOV TL0,T0TL SETB TR0 SJMP NEXT1 NEXT0: CLR TR0 NEXT1: CLR A INC DPTR MOVC A,@A+DPTR MOV R2,A LOOP1: ACALL D200 DJNZ R2,LOOP1 INC DPTR AJMP LOOP D200: MOV R3,#81H D200B: MOV A,#0FFH D200A: DEC A JNZ D200A DEC R3 CJNE R3,#00H,D200B RET QINGCHU:MOV A,#00100000B MOV P0,#0C0H LCALL ENABLE LCALL WRITE2 MOV A,#00100000B MOV P0,#0C1H LCALL ENABLE LCALL WRITE2 MOV A,#00100000B MOV P0,#0C2H LCALL ENABLE LCALL WRITE2 MOV A,#00100000B MOV P0,#0C3H LCALL ENABLE LCALL WRITE2 ;清屏 ;从头开始演奏 ;装定时初值 ;启动定时器 ;关闭定时器 ;查延时常数 ;控制延时次数 ;延时程序 ;将第二行的第一位置 0 ;将第二行的第二位置 0 ;将第二行的第三位置 0 ;将第二行的第四位置 0
分享到:
收藏