智能化电子表课程设计说明书Word文档下载推荐.docx
- 文档编号:18962562
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:22
- 大小:118.83KB
智能化电子表课程设计说明书Word文档下载推荐.docx
《智能化电子表课程设计说明书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《智能化电子表课程设计说明书Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
XD2
XD1
XD0
系
XA3
D7
D6
D5
D4
D3
D28254
D1单元
D0
A1
A2
WR
RD
CS
OUT0
CLK0
XA2
XIOW
XIOR
IOY0
IOY1
INTR
CLK
统
总
线
五.电子表软件代码
;
***************根据CHECK配置信息修改下列符号值*******************
IOY0EQU0e000H;
片选IOY0对应的端口始地址
IOY1EQU0e040H
*****************************************************************
MY8255_AEQUIOY0+00H*4;
8255的A口地址
MY8255_BEQUIOY0+01H*4;
8255的B口地址
MY8255_CEQUIOY0+02H*4;
8255的C口地址
MY8255_MODEEQUIOY0+03H*4;
8255的控制寄存器地址
MY8254_COUNT0EQUIOY1+00H*4;
8254计数器0端口地址
MY8254_COUNT1EQUIOY1+01H*4;
8254计数器1端口地址
MY8254_COUNT2EQUIOY1+02H*4;
8254计数器2端口地址
MY8254_MODEEQUIOY1+03H*4;
8254控制寄存器端口地址
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DATASEGMENT
DTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H,77H,7CH,39H
5EH,79H,71H;
键值表,0~F对应的7段数码管的段位值
TIMETABLEDB0,0,0,0
STARTKEYDB3;
启动键
STOPKEYDB1;
停止键
CLEARKEYDB2;
清0键
SETTMADDKEYDB8;
设置十位分钟加
SETMADDKEYDB9;
设置个位分钟加
SETTSADDKEYDB0AH;
设置十位秒加
SETSADDKEYDB0BH;
设置个位秒加
SETTMSUBKEYDB0CH;
设置十位分钟减
SETMSUBKEYDB0DH;
设置个位分钟减
SETTSSUBKEYDB0EH;
设置十位秒减
SETSSUBKEYDB0FH;
设置个位秒减
STATUSDB0;
8254out端口状态键
ISRUNINGDB0
WTHOUSANDDB0
WSECDB0
WMSECDB0
TENSECDB0
SECDB0
MINTDB0
TENMINTDB0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVDX,MY8254_MODE;
MOVDX,MY8255_MODE;
BEGIN:
CALLDIS;
显示刷新
CALLCLEAR;
清屏
CALLCCSCAN;
扫描按键
JZNOKEYDOWN;
有键按下则跳置GETKEY1
JMPGETKEY1
NOKEYDOWN:
MOVAH,1;
判断PC键盘是否有按键按下
INT16H
JZKEYSCANEND;
无按键则跳回继续循环,有则退出
JMPQUIT
KEYSCANEND:
CMPISRUNING,1
JNEBEGIN
TIMESTART:
MOVAL,11100010B;
设置回读命令
MOVDX,MY8254_MODE
OUTDX,AL
MOVDX,MY8254_COUNT0;
读0端口状态控制字
INAL,DX
CMPSTATUS,1
JNENOTSTATUS
TESTAL,80H
JZCHANGEWMSEC
JMPBEGIN
NOTSTATUS:
JNZCHANGEWMSEC
CHANGEWMSEC:
JZCHANGESTATUS
MOVSTATUS,1
JMPHASCHANGE
CHANGESTATUS:
MOVSTATUS,0
HASCHANGE:
INCWMSEC
CMPWMSEC,0AH;
百分秒到10,十分秒加1
JNECHANGESEC
MOVWMSEC,0
INCWSEC
CMPWSEC,0AH;
十分秒秒到10,个位秒加1
MOVWSEC,0
INCSEC
CMPSEC,0AH;
个位秒秒到10,十位秒加1
MOVSEC,0
INCTENSEC
CMPTENSEC,06H;
十位秒到6,清零
MOVTENSEC,0
INCMINT
CMPMINT,0AH;
分钟个位到10,十位加1
JNZCHANGESEC
MOVMINT,0
INCTENMINT
CMPTENMINT,06H;
十位分到6,清零
MOVTENMINT,0
CHANGESEC:
MOVSI,0
存储时间
MOVAL,TENMINT;
十位分
MOVTIMETABLE[SI],AL
INCSI
MOVAL,MINT;
个位分
MOVAL,TENSEC;
十位秒
MOVAL,SEC;
个位秒
MOVTIMETABLE[SI],0
QUIT:
MOVAX,4C00H;
返回到DOS
INT21H
GETKEY1:
CALLDIS;
CALLDALLY
CALLDALLY
再次扫描按键
JNZGETKEY2;
有键按下则跳置GETKEY2
JMPBEGIN;
否则跳回开始继续循环
GETKEY2:
MOVCH,0FEH
MOVCL,00H;
设置当前检测的是第几列
COLUM:
MOVAL,CH;
选取一列,将X1~X4中一个置0
MOVDX,MY8255_A
MOVDX,MY8255_C;
读Y1~Y4,用于判断是哪一行按键闭合
INAL,DX
L1:
TESTAL,01H;
是否为第1行
JNZL2;
不是则继续判断
设置第1行第1列的对应的键值
JMPKCODE
L2:
TESTAL,02H;
是否为第2行
JNZL3;
不是则继续判断
MOVAL,04H;
设置第2行第1列的对应的键值
L3:
TESTAL,04H;
是否为第3行
JNZL4;
MOVAL,08H;
设置第3行第1列的对应的键值
L4:
TESTAL,08H;
是否为第4行
JNZkk;
MOVAL,0CH;
设置第4行第1列的对应的键值
MYNEXT:
PUSHAX
KON:
扫描按键,判断按键是否弹起
JNZKON;
未弹起则继续循环等待弹起
POPAX
KCODE:
ADDAL,CL;
将第1列的值加上当前列数,确定按键值
CMPAL,STARTKEY;
判断是否为开始键
JNESTOPKEYTAG
CMPISRUNING,0
JNESTARTISRUNING
MOVISRUNING,1
STARTISRUNING:
JMPTIMESTART
STOPKEYTAG:
;
判断是否为停止键
CMPAL,STOPKEY
JNECLEARKEYTAG
MOVISRUNING,0
JMPSTARTISRUNING
CLEARKEYTAG:
判断是否为清零键
CMPAL,CLEARKEY
JNZSETTMADDTAG
CALLCLEARCLOCK
JMPKERR
KK:
JMPNEXT
SETTMADDTAG:
判断是否为十位分钟加设置键
CMPAL,SETTMADDKEY
JNZSETMADDTAG
CALLSETTMADD
SETMADDTAG:
判断是否为个位分钟加设置键
CMPAL,SETMADDKEY
JNZSETTSADDTAG
CALLSETMADD
SETTSADDTAG:
判断是否为十位秒加设置键
CMPAL,SETTSADDKEY
JNZSETSADDTAG
CALLSETTSADD
SETSADDTAG:
判断是否为个位秒加设置键
CMPAL,SETSADDKEY
JNZSETTMSUBTAG
CALLSETSADD
SETTMSUBTAG:
判断是否为十位分钟减设置键
CMPAL,SETTMSUBKEY
JNZSETMSUBTAG
CALLSETTMSUB
SETMSUBTAG:
判断是否为个位分钟减设置键
CMPAL,SETMSUBKEY
JNZSETTSSUBTAG
CALLSETMSUB
SETTSSUBTAG:
判断是否为十位秒减设置键
CMPAL,SETSSUBKEY
JNZSETSSUBTAG
CALLSETTSSUB
SETSSUBTAG:
判断是否为个位秒减设置键
JNZKERR
CALLSETSSUB
NEXT:
INCCL;
当前检测的列数递增
MOVAL,CH
检测是否扫描到第4列
JZKERR;
是则跳回到开始处
ROLAL,1;
没检测到第4列则准备检测下一列
MOVCH,AL
JMPCOLUM
KERR:
JMPBEGIN
CCSCANPROCNEAR;
扫描是否有按键闭合子程序
MOVAL,1H
MOVDX,MY8255_A;
将4列全选通,X1~X4置0
MOVDX,MY8255_C
INAL,DX;
读Y1~Y4
NOTAL
ANDAL,0FH;
取出Y1~Y4的反值
RET
CCSCANENDP
CLEARPROCNEAR;
清除数码管显示子程序
MOVDX,MY8255_B;
段位置0即可清除数码管显示
MOVAL,00H
RET
CLEARENDP
DISPROCNEAR;
显示键值子程序
PUSHAX;
以缓冲区存放的键值为键值表偏移找到键值并显示
MOVSI,OFFSETTIMETABLE
MOVCX,SI
ADDCX,1
ADDSI,5
MOVDL,0DFH
MOVAL,DL
AGAIN:
PUSHDX
OUTDX,AL;
设置X1~X4,选通一个数码管
MOVAL,[SI];
取出缓冲区中存放键值
MOVBX,OFFSETDTABLE
ANDAX,00FFH
ADDBX,AX
MOVBL,[BX]
CMPSI,CX
JNECOMER
ORBL,80H
COMER:
MOVAL,BL;
将键值作为偏移和键值基地址相加得到相应的键值
MOVDX,MY8255_B
写入数码管A~Dp
DECSI;
取下一个键值
POPDX
判断是否显示完?
JZOUT1;
显示完,返回
RORAL,1
MOVDL,AL
JMPAGAIN;
未显示完,跳回继续
OUT1:
POPAX
DISENDP
DALLYPROCNEAR;
软件延时子程序
PUSHCX
MOVCX,00FFH
D1:
MOVAX,00FFH
D2:
DECAX
JNZD2
LOOPD1
POPCX
RET
DALLYENDP
设置十位分钟加子程序
SETTMADDPROCNEAR
ADDTENMINT,1
MOVAL,TENMINT
RET
SETTMADDENDP
设置个位分钟加子程序
SETMADDPROCNEAR
ADDMINT,1
MOVAL,MINT
MOVSI,1
SETMADDENDP
设置十位秒加子程序
SETTSADDPROCNEAR
ADDTENSEC,1
MOVAL,TENSEC
MOVSI,2
SETTSADDENDP
设置个位秒加子程序
SETSADDPROCNEAR
ADDSEC,1
MOVAL,SEC
MOVSI,3
SETSADDENDP
设置十位分钟减子程序
SETTMSUBPROCNEAR
SUBTENMINT,1
SETTMSUBENDP
设置个位分钟减子程序
SETMSUBPROCNEAR
SUBMINT,1
SETMSUBENDP
设置十位秒减子程序
SETTSSUBPROCNEAR
SUBTENSEC,1
SETTSSUBENDP
设置个位秒减子程序
SETSSUBPROCNEAR
SUBSEC,1
SETSSUBENDP
电子表复位子程序
CLEARCLOCKPROCNEAR
MOVTENMINT,0
MOVMINT,0
MOVTENSEC,0
MOVSEC,0
CLEARCLOCKENDP
CODEENDS
ENDSTART
五、心得体会
在设计刚开始时,我们只是知道要用8254完成计数,用8255与数码管单元完成显示功能,但是具体怎么实现的还不是很清楚。
在接下来的一小段时间里,我们觉得无从下手,但通过自己耐心搜集资料,向老师和同学请教,慢慢理出了头绪,也有了自己的设计思想和设计框架,并有了一定的实现方法。
对于设计题目来说,并非那么得复杂,但要设计者将所学转换成相应的实际应用却并非一件容易的事情。
本设计题目的设计思想是简单的,只需要使用8254完成计数,用8255与数码管单元完成显示功能,并通过自己的理解附加一些功能片段来完成电子表的人性化功能设计,如电子表的校准、电子表的开始、停止、清零等功能。
在课程设计过程中,我深刻地体会到:
《微机原理与接口技术》这门课程对于我们的要求不仅限于对书本知识的理解,更重要的是对书本知识的运用。
除此之外,我们应该在学习过程中充分发挥自己的想象力和创新意识,将对书本知识的理解与我们的创新意识相结合,设计出实用且功能良好的实物。
通过本次课程设计,也提高了我们的编程能力、协作能力和创新能力,为以后的学习打下了良好的基础。
参考文献
[1]郭兰英祥模,《微机原理与接口技术》清华大学
[2]荣祥,《微型计算机原理》,中国电力
[3]会敏晋惠,《微型计算机原理及接口技术应用》,科学
评语
评语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能化 电子表 课程设计 说明书