任意波形发生Word下载.docx

上传人:b****6 文档编号:21215974 上传时间:2023-01-28 格式:DOCX 页数:13 大小:166.56KB
下载 相关 举报
任意波形发生Word下载.docx_第1页
第1页 / 共13页
任意波形发生Word下载.docx_第2页
第2页 / 共13页
任意波形发生Word下载.docx_第3页
第3页 / 共13页
任意波形发生Word下载.docx_第4页
第4页 / 共13页
任意波形发生Word下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

任意波形发生Word下载.docx

《任意波形发生Word下载.docx》由会员分享,可在线阅读,更多相关《任意波形发生Word下载.docx(13页珍藏版)》请在冰豆网上搜索。

任意波形发生Word下载.docx

输出。

输出的最大幅度要达到5V,最小幅度为0V。

4、在输出波形的同时可以用数字按键输入波形的频率。

频率的范围自己设定。

二、电路原理分析

(1)键值读取的方法:

键值的得到可以用扫描法得到。

各个键的键值:

键名

(行码)

Y2Y1Y0

(列码)

RL7RL6RL5RL4RL3RL2RL1RL0

110

1

2

3

4

5

6

7

01111111

8

101

9

A

B

C

D

E

F

.

011

-

+

:

REG

读出的键值分别存在两个字节中,一字节行码,一字节列码。

如果测出是第1和第2行的键按下,就调用数字键处理程序子程序。

在数字键处理程序中,将列码向右位(用SAR指令),每移一次计数一次,移出的是0,就停止计数。

这个计数值就是键值,如0的行码中,最右边的一位就是0,所以计数值应是0。

子程序返回键值。

可以得到键上的数字。

注意第2行的键值比第1行多了8,要记得加上。

第3行的键,可以用来做功能键,如果测出是第3行键,可调用另一个功能键子程序,在子程序中可以采用跳跃表的方法转向各键的处理程序。

可以先预留出各个功能键的分支,在分支的标号后面加一条RET指令,待需要时再加上相应的键处理子程序。

(2)电路图

D/A转换模块电路

连线情况:

•PA0-PA7接到RL0-RL7八列键的列值。

•PC0,PC1,PC2接到Y0Y2Y3三行键的行码。

•PB0-PB7接到DL1-DL8,显示数/模转换的数值。

三、设计方案及分析

(1)随机用键盘输入波形数据,通过A\D转换把数值数字

显示在数码管上显示出,并将数值保存在预先划定的内存空间,以便后面使用。

功能键设置方面:

当检测到键值为19时,数码管显示下一个保存值,为18时显示前一个数值,若是17则进行数模转换,在示波器上输出波形,当按下键17时从之前保存的数值取出更改输出波形的频率。

(2)程序框图

主程序:

键扫描:

键盘扫描

有键按下?

设置行号cl=0ffh

判断该行有键按下?

保存键值

判断三行扫完?

消抖

初始化

功能键:

四、源程序

datasegment

data1db1,2

data2db30dup(?

data3db0

dataends

codesegment

assumecs:

code

portaequ200h

portbequ201h

portcequ202h

pctrlequ203h

start:

moval,90h;

设置工作方式零,A端口输入,B,C端口输出

movdx,pctrl

outdx,al;

设置完成

movch,0;

判断是第几次按键

movsi,0;

si初始化

movdi,0;

指针初始化

key:

movdx,portc;

moval,00h

使所有行线为零

movdx,porta;

通过A端口读入列值

inal,dx

cmpal,0ffh;

判断有无按键按下

jzkey;

没有,则继续扫描判断

movbx,0ffh

dey:

decbx;

延时消抖

jnzdey

inal,dx;

重新判断来确定有无按键按下

cmpal,0ffh

jzkey

movcl,0feh;

设置行号

x0:

movdx,portc

moval,cl

outdx,al

扫描该行有无按键按下,有则将列值保存到al

jnzx2

x1:

rolcl,1;

判断三行是否扫描完,是,则保存键的位置;

否,则继续扫描

jcx0

jmpkey

x2:

movah,cl;

保存行值到ah中

cmpch,1

jzk0;

若是第二次按键,则跳转,不是,则向下进行

incch;

ch自增1

callswitch;

键值转换

cmpal,19

jznext;

cmpal,17;

判断按下值是否为17

jzm1;

是则进行跳转延续,进行数摸转换

cmpal,18;

功能键显示替换前一个数值

jzback1

cmpal,16;

输出频率按键

jzpl

notal

读出A口将键值保存起来

movcl,4

rolal,cl;

将按键值左移4位

pushax;

将按键值压栈保护

freekey:

按键释放处理

movdx,porta

jmpfreekey

m1:

jmpsm1

k0:

归零

callswitch

cmpal,19;

显示下一个数值键,比较按下键值是否等于19

是则跳转

判断是否显示上一个数值

jzback

jzsm1;

频率按键

movdl,al

popax

addal,dl;

键值组装

movdx,portb;

outdx,al

pushbx

savedata:

movbx,offsetdata2;

存入数据调用单元data2

notal

mov[bx+si],al

incsi

cmpsi,30;

指针超过则清零

jzsi0

popbx

x3:

jmpfreekey;

二次按键释放处理

si0:

movsi,0

jmpx3

back1:

jmpback

pl:

movbx,offsetdata2

decsi

moval,[bx+si]

movdata3,al

next:

;

显示后一个值

pushbx

movdx,portb

popbx

calldelay65

back:

pushbx;

显示前一个值

jmpkey

sm1:

movbx,offsetdata2

moval,[bx+di]

calldac;

调用数摸转换子程序

calldelay

incdi

cmpdi,30

jzm2

jmpsm1

m2:

switchprocnear;

键值转化子程序

movbl,-1

s1:

incbl

roral,1

jcs1

s2:

rorah,1

jncs3

addbl,8

jmps2

s3:

moval,bl

ret

switchendp

delay65PROCNEAR;

延时650ms子程序

pushcx

movcx,65500

L:

nop

nop

loopL

popcx

ret

delay65ENDP

delayprocnear

moval,data3

delay1:

decal

cmpal,0

jnzdelay1

ret

delayendp

dacprocnear

movdx,208h

dacendp

codeends

endstart

五、总结

1、跳转指令无效。

解决:

由于跳转范围太远无法,需在适当位置加一中转点进行接力

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1