1、输出。输出的最大幅度要达到5V,最小幅度为0V。4、在输出波形的同时可以用数字按键输入波形的频率。频率的范围自己设定。二、电路原理分析(1)键值读取的方法:键值的得到可以用扫描法得到。各个键的键值:键名(行码)Y2 Y1 Y0(列码)RL7 RL6 RL5 RL4 RL3 RL2 RL1 RL011012345670111111181019ABCDEF.011,-+:REG读出的键值分别存在两个字节中,一字节行码,一字节列码。如果测出是第1和第2行的键按下,就调用数字键处理程序子程序。在数字键处理程序中,将列码向右位(用SAR指令),每移一次计数一次,移出的是0,就停止计数。这个计数值就是键值
2、,如0的行码中,最右边的一位就是0,所以计数值应是0。子程序返回键值。可以得到键上的数字。注意第2行的键值比第1行多了8,要记得加上。第3行的键,可以用来做功能键,如果测出是第3行键,可调用另一个功能键子程序,在子程序中可以采用跳跃表的方法转向各键的处理程序。可以先预留出各个功能键的分支,在分支的标号后面加一条RET指令,待需要时再加上相应的键处理子程序。(2)电路图 D/A转换模块电路连线情况: PA0-PA7 接到 RL0-RL7 八列键的列值。 PC0, PC1, PC2接到 Y0 Y2 Y3 三行键的行码。 PB0-PB7 接到 DL1-DL8,显示数/模转换的数值。三、 设计方案及分
3、析(1) 随机用键盘输入波形数据,通过AD转换把数值数字显示在数码管上显示出,并将数值保存在预先划定的内存空间,以便后面使用。功能键设置方面:当检测到键值为19时,数码管显示下一个保存值,为18时显示前一个数值,若是17则进行数模转换,在示波器上输出波形,当按下键17时从之前保存的数值取出更改输出波形的频率。(2)程序框图 主程序:键扫描:键盘扫描有键按下? 设置行号cl=0ffh判断该行有键按下?保存键值判断三行扫完?消抖初始化功能键:四、 源程序 data segmentdata1 db 1,2data2 db 30 dup(?)data3 db 0data endscode segmen
4、t assume cs:code porta equ 200h portb equ 201h portc equ 202h pctrl equ 203hstart: mov al,90h ;设置工作方式零,A端口输入,B,C端口输出 mov dx,pctrl out dx,al ;设置完成 mov ch,0 ;判断是第几次按键 mov si,0 ;si初始化 mov di,0 ;指针初始化key: mov dx,portc ; mov al,00h使所有行线为零 mov dx,porta ;通过A端口读入列值 in al,dx cmp al,0ffh ;判断有无按键按下 jz key ;没有,
5、则继续扫描判断 mov bx,0ffh dey: dec bx ;延时消抖 jnz dey in al,dx ;重新判断来确定有无按键按下 cmp al,0ffh jz key mov cl,0feh ;设置行号x0: mov dx,portc mov al,cl out dx,al扫描该行有无按键按下,有则将列值保存到al jnz x2x1: rol cl,1 ;判断三行是否扫描完,是,则保存键的位置;否,则继续扫描 jc x0 jmp keyx2: mov ah,cl ;保存行值到ah中 cmp ch,1 jz k0 ;若是第二次按键,则跳转,不是,则向下进行 inc ch ;ch自增1
6、call switch ;键值转换 cmp al,19 jz next ; cmp al,17 ;判断按下值是否为17 jz m1 ;是则进行跳转延续,进行数摸转换 cmp al,18 ;功能键显示替换前一个数值 jz back1 cmp al,16 ;输出频率按键 jz pl not al读出A口将键值保存起来 mov cl,4 rol al,cl ;将按键值左移4位 push ax ;将按键值压栈保护 freekey:按键释放处理 mov dx,porta jmp freekeym1: jmp sm1k0:归零 call switch cmp al,19 ;显示下一个数值键,比较按下键值是
7、否等于19是则跳转判断是否显示上一个数值 jz back jz sm1 ;频率按键 mov dl,al pop ax add al,dl ;键值组装 mov dx,portb ; out dx,al push bxsavedata:mov bx,offset data2 ;存入数据调用单元data2 not al mov bx+si,al inc si cmp si,30 ;指针超过则清零 jz si0 pop bx x3: jmp freekey ;二次按键释放处理si0: mov si,0 jmp x3back1: jmp back pl: mov bx,offset data2 dec
8、si mov al,bx+si mov data3,alnext: ;显示后一个值 push bx mov dx,portb pop bx call delay65back: push bx ;显示前一个值 jmp key sm1: mov bx,offset data2 mov al,bx+di call dac ;调用数摸转换子程序 call delay inc di cmp di,30 jz m2 jmp sm1 m2:switch proc near ;键值转化子程序 mov bl,-1s1: inc bl ror al,1 jc s1s2: ror ah,1 jnc s3 add b
9、l,8 jmp s2s3: mov al,bl ret switch endpdelay65 PROC NEAR ;延时650ms子程序 push cx mov cx,65500L: nop nop loop L pop cx ret delay65 ENDP delay proc near mov al,data3 delay1: dec al cmp al,0 jnz delay1 ret delay endp dac proc near mov dx,208h dac endpcode endsend start五、 总结1、 跳转指令无效。解决:由于跳转范围太远无法,需在适当位置加一中转点进行接力
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1