1、 STACK1 ENDS DATA SEGMENT DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H SINTAB DB 19H,1EH,22H,27H,2BH,2EH,31H,32H ;正弦函数表 DB 33H,32H,31H,2EH,2BH,27H,22H,1EH DB 19H,14H,0FH,0BH,07H,04H,02H,01H DB 00H,01H,02H,04H,07H,0BH,0FH,14H STR1 DB press 1 to output wave,0AH,0DH DB pres
2、s 2 to quit ,0AH,0DH, 0AH,0DH,0AH,0DH,$ SQRTAB DB 00H,00H,00H,00H,00H,00H,00H,00H DB 00H,00H,00H,00H,00H,00H,00H,00H DB 13H,13H,13H,13H,13H,13H,13H,13H STR2 DB press 1 to sin wave press 2 to recangle press 3 to square press 4 to triangle press 5 to return0 ,0AH,0DH ,0AH,0DH,0AH,0DH, STR3 DB press 1
3、to reduce fecency press 2 to increase fecency press 3 to reduce amplitude press 4 to increase amplitude SQU DB output squre wave now .,0AH,0DH, 0AH,0DH, TRI DB output triangle wave now . REC DB output recangle wave now . SIN DB output sin wave now . AMPL DB 3 FENC DB 3 TIAOFU DB ? TIAOPIN DB ? SQUAR
4、E DB ? KEYASS DB ? DATA ENDS ;键值表,0F对应的7段数码管的段位值 CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV SI,3000H ;建立缓冲区,存放要显示的键值 MOV AL,00H ;先初始化键值为0 MOV SI,AL MOV SI+1,AL MOV SI+2,AL MOV SI+3,AL MOV DI,3003H MOV DX,MY8255_MODE ;初始化8255工作方式 MOV AL,81H ;方式0,A口、B口输出,C口低4位输入 OUT DX,AL PRE
5、BEGIN: MOV AH,09H ; 显示第一个菜单 MOV DX,OFFSET STR1 INT 21H 把数码管清0 先初始化键值为0 BEGIN: CALL DIS ;显示刷新 CALL GETKEY1 ;在第一菜单下,等待按键的按下 MOV SI,OFFSET KEYASS MOV AL,SI CMP AL,1 ;按下第二个键就退出 JZ QUIT CMP AL,0 ;按下第一个键进入第二个菜单 JZ LBEGIN JMP BEGIN ;不是按下第一或二键就继续等待输入 LBEGIN:显示第二个标题 MOV DX,OFFSET STR2 LBEGIN4:第二个菜单等待输入 CMP A
6、L,4 ;第5个键退出 JZ LBEGIN1第一个键到sin(正弦)函数 JZ LBEGIN6第二个键到rec(锯齿)函数 JZ LBEGIN7 CMP AL,2 ;第三个键到squ(方波)函数 JZ LBEGIN2 CMP AL,3 ;第四个键到tri(三角波)函数 JZ LBEGIN5 JMP LBEGIN3 ; 其他键则跳到继续等待输入 LBEGIN2: CALL SQUREW JMP PREBEGIN LBEGIN5: CALL TRIANW LBEGIN6: CALL SINW LBEGIN7: CALL RECW JMP PREBEGIN ;执行完输出波形之后 回到第一个菜单 LB
7、EGIN3: JMP LBEGIN4 LBEGIN1: MOV AH,1 ;判断PC键盘是否有按键按下 INT 16H JZ PREBEGIN QUIT: MOV AX,4C00H ;返回到DOS ;上面是主程序 TRIANW PROC NEAR ;三角波的子程序 MOV AH,09H MOV DX,OFFSET TRI MOV DX,OFFSET STR3 INT 21H ;. MOV AL,FENC ;初始化显示管的值为3 MOV SI,3000H MOV AL,AMPL MOV SI,3001H TRIAN1: CALL AMPLFENC MOV AL,4 CMP SI,AL JZ TR
8、IAN4 CALL DIS TRILOOP11:输出三角波幅值 MOV BL,SI MOV SI,OFFSET TIAOFU MOV SI,BL MOV SI,OFFSET TIAOPIN TRILOOP:D/A转换起始值 TRIUP: PUSH AX MOV BL,TIAOFU MUL BL MOV DX,DA0832 ;启动D/A转换 POP AX MOV CL,TIAOPIN MOV CH,00H DALLYTRI1: CALL DALLY CALL CCSCAN JNZ TRIAN1 LOOP DALLYTRI1 INC AL CMP AL,33H JNE TRIUP TRIDOWN: MOV DX,DA0832 DALLYTRI2: LOOP DALLYTRI2 DEC AL CMP AL,00H JNE TRIDOWN JZ TRILOOP ;无按键则跳回继续循环,有则退出 TRIAN4: RET TRIANW ENDP RECW PROC NEAR ;锯齿波的子程序 MOV DX,OFFSET REC MOV DI,OFFSET FENC ;初始化显示管的值为5 MOV AL,DI MOV DI,OFFSET AMPL REC1: JZ REC4 RECLOOP11: RECUP: MOV CL,SI DALLYREC1: JNZ
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1