小型音乐喷泉控制主要部分程序Word格式文档下载.docx
- 文档编号:14197010
- 上传时间:2022-10-20
- 格式:DOCX
- 页数:13
- 大小:19.15KB
小型音乐喷泉控制主要部分程序Word格式文档下载.docx
《小型音乐喷泉控制主要部分程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《小型音乐喷泉控制主要部分程序Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
LCALLSTOP;
转向停止子程序
DO1:
CJNER6,#0AH,DO2;
不是启动现场采集键转向DO2
LCALLDIAN;
转向控制电磁阀子程序
LCALLLUMP;
转向控制灯光子程序
CIRCLE1:
LCALLSTART-AD;
转向采集数据子程序
LCALLCHULIKOU1;
转向数据处理并调速子程序
AJMPCIRCLE1
DO2:
LCALLLUMP;
CIRCLE2:
LCALLSTART-MU;
转向音乐程序(内含调速子程序)
AJMPCIRCLE2
求出键码子程序模块
INT0:
MOV32H,#00H
MOV33H,#00H
MOV34H,#00H
MOVSP,#70H
KEY-SUB:
MOVDPTR,#0EF00H;
初始化2#8155,PA口为基本输出口PB口为基本输出口,PC口输入口
MOVA,#1H
MOVX@DPTR,A
BEGIN:
NOP
LCALLDISPLAY;
显示数据
LCALLJUDGE;
全列置0扫描,判断有无键按下
JNZENTER1;
若有键按下,则继续
SJMPBEGIN;
若没有键按下,则返回,
ENTER1:
LCALLDELAY5;
调用延时子程序,防止抖动
LCALLJUDGE;
重新判断有无键按下
JNZENTER2;
若有键按下,则说明的确有
键按下
SJMPBEGIN;
没有键按下,则返回,继续检测
ENTER2:
MOVR2,#0FEH;
若有键按下,开始扫描列
MOVR1,#00H;
列号放在R1中,第一列的列号
定义为00H
NEXT-L:
MOVDPTR,#0EF01H;
PA口地址
MOVA,R2;
扫描码送A
MOVX@DPTR,A;
输出扫描码
INCDPTR
MOVXA,@DPTR;
读PB口的内容
JBACC.0,LINE1;
判断第一行有无键按下,为1
无键按下
MOVA,#00H;
行码送A
SJMPKEY-CODE;
再确定按键的键号
LINE1:
JBACC.1,LINE2;
判断第二行有无键按下
MOVA,#04H;
LINE2:
JBACC.2,LINE3;
判断第三行有无键按下
MOVA,#8H;
LINE3:
JBACC.3,NEXT;
判断第四行有无键按下
MOVA,#0CH;
KEY-CODE:
ADDA,R1;
行号加列号得出键码
PUSHACC;
键码入栈保护
WAIT-REL:
LCALLJUDGE;
检验键是否松开
JNZWAIT-REL;
等待键断开
POPACC;
键码出栈
MOVR6,A;
保护键码
D:
CJNER6,#00H,D0001;
是数字键输出显示,不是数字键
返回主程序
LCALLDISPLAY
D0001:
CJNER6,#01H,D0002;
D0002:
CJNER6,#02H,D0003;
D0003:
CJNER6,#03H,D0004;
D0004:
CJNER6,#04H,D0005;
D0005:
CJNER6,#05H,D0006;
D0006:
CJNER6,#06H,D0007;
D0007:
CJNER6,#07H,D0008;
LCALLDISPLAY
D0008:
CJNER6,#08H,D0009;
D0009:
CJNER6,#09H,KEY-NO
NEXT:
INCR1;
扫描下一列
MOVA,R2;
JNBACC.3,KEY-NO;
四列扫描完还没有键按下的话,
认为是干扰信号,程序返回
RLA
MOVR2,A
SJMPNEXT-L
JUDGE:
MOVA,#00H;
MOVX@DPTR,A
INCDPTR
MOVXA,@DPTR;
读PB口数据
CPLA;
无键按下结果为零
ANLA,#0FH;
屏蔽高位
RET
KEY-NO:
RETI
显示子程序模块
DISPLAY:
MOV33H,32H;
递推显示
MOV32H,31H
MOV31H,30H
MOVR3,#33H
NO-DIS:
MOVA,@R3
MOVCA,@A+DPTR
MOVSBUF,A
CLRTI
JNBTI,$
DECR3
CJNER3,#30H,NO-DIS;
转向继续显示
RET
DELAY5:
MOV20H,#1FH;
延时子程序
DL2:
MOV21H,#0FFH
DL1:
DJNZ21H,DL1
DJNZ20H,DL2
LEDTABLE:
;
LED字型码表
DB3FH,06H,5BH,4FH,66H,
DB6DH,7DH,07H,7FH,6FH
END
控制电磁阀子程序模块
DIAN:
MOVA,31H;
求出花型数据
ADDA,32H
ADDCA,33H
MOV34H,A;
保存起来
MOVDPTR,#0F700H;
指向1#8155命令口
MOVA,#3H;
设置命令字
INCDPTR;
指向1#PA口
MOVA,34H
MOVX@DPTR,A;
高电平口使电磁阀有电
INCDPTR;
指向1#PB口
MOVA,R7
采集数据子程序
START-AD:
MOVDPTR,#7FFFH;
使DPTR指向MAXll8的端口地址,如图为7FFFH
MOVR5,00H;
R5指向某一通道,指向1N0
MOVA,R5
MOVX@DPTR,A;
启动R5所指通道
WEND:
JBP1.0,WEND;
判是否转换完毕
读取转换结果
MOVR0,A;
把结果保存入R0
MOV36H,A;
把结果暂存入36H
RET
灯光控制子程序
LUMP:
初始化2#8155,PA口为基本输出口
PB口为基本输出口,PC口输入口
MOVA,#1H
INCDPTR
指向2#8155PC口
MOVA,#01H
停止节电子程序
STOP:
……
JBP3.2,$;
在INT0变低前原地等待,有中断键按下,返回主程序
音乐程序模块
START-MU:
ORG00H;
主程序起始地址
JMPSTART;
跳至主程序
ORG0BH;
TIMER0中断起始地址
JMPTIM0;
跳至TIMER0中断子程序
START:
MOVTMOD,#01H;
设TIMER0在MODE1
MOVIE,#82H;
中断使能
START0:
MOV30H,#00H;
取简谱码指针
NEXT:
MOVA,30H;
简谱码指针载入A
MOVDPTR,#TABLE;
至TABLE取简谱码
MOVCA,@A+DPTR
MOVR2,A;
取到的简谱码暂存于R2
JZEND0;
是否取到00(结束码)?
ANLA,#0FH;
不是,则取低4位(节拍码)
MOV90H,A;
为调速保存数据
MOVR5,A;
将节拍码存入R5
MOVA,R2;
将取到的简谱码再载入A
SWAPA;
高低4位交换
取低4位(音符码)
MOV90H,A;
保存音符码,为调速做准备
JNZSING;
取到的音符码是否为0?
CLRTR0;
是,则不发音
JMPD1;
跳至D1
SING:
DECA;
取到的音符码减1(不含0)
MOV22H,A;
存入(22H)
RLA;
乘2
MOVDPTR,#TABLE1;
至TABLE1取相对的
高位字节计数值
MOVCA,@A+DPRT
MOVTH0,A;
取到的高位字节存入TH0
MOV21H,A;
取到的高位字节存入(21H)
MOVA,22H;
再载入取到的音符码
INCA;
加1
MOVCA,@A+DPRT;
低位字节计数值
MOVTL0,A;
取到的低位字节存入TL0
MOV20H,A;
取到的低位字节存入(20H)
SETBTB0;
启动TIMER0
D1:
CALLCHULIKOU;
调用以1/4拍为基本单位时间的调速子程序
INC30H;
取简谱码指针加1
JMPNEXT;
取下一个码
END0:
CLRTR0;
停止TIMER0
JMPSTART0;
重复循环
TIM0:
PUSHACC;
将A的值暂存于堆栈
PUSHPSW;
将PSW的值暂存于堆栈
MOVTL0,20H;
重设计数值
MOVTH0,21H
CPLP1.0;
将P1.0位反相
POPPSW;
至堆栈取回PSW的值
POPACC;
至堆栈取回A的值
RETI;
TABLE1:
DW64260,64400,65524,64580
DW64684,64777,64820,64898
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小型 音乐喷泉 控制 主要 部分 程序