微机原理 售货机报告.docx
- 文档编号:17161112
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:27
- 大小:22.62KB
微机原理 售货机报告.docx
《微机原理 售货机报告.docx》由会员分享,可在线阅读,更多相关《微机原理 售货机报告.docx(27页珍藏版)》请在冰点文库上搜索。
微机原理售货机报告
广东工业大学课程设计任务书
一、课程设计的内容
1.编程使四位LED同时显示AB96。
(要求将数据A、B、9、6存入数据段,取出后经XLAT译码后,才显示出来)
2.在1的基础上编程实现89AB与12FE在数码管上的切换显示,间隔3秒。
A
B
F
4
0
6
C
D
3.将8个键按实验室要求定义键值,按任意键在显示器上显示对应键值,要求显示值能够左移。
4.实现:
a).当K0=1时,键入货品、价钱、SET,设置某个货品的价格,可至少连续设置三个价钱;(设可乐为10.59元,薯片9.87元,话梅5.63元)
b).当K0=0时,键入一个货品名、购买的个数,按SET得到总价,再键入另一个货品名、购买的个数,按SET即得合总价,可计得至少三种货品并计得合总价。
二、课程设计的要求与数据
(1)巩固和加深对《微机原理》课程内容的认识和理解,提高应用水平。
(2)掌握汇编语言程序的编制方法。
(3)熟悉键盘控制和七段数码管的使用
三、课程设计应完成的工作
完成线路的接线,编写四个程序并输入电脑中,把程序加载到学习机当中,运行程序验证结果。
四、课程设计进程安排
序号
设计各阶段内容
地点
起止日期
1
了解键盘的工作原理,编写显示程序
微机实验室
12月19日
2
定义键盘数字和显示数字
微机实验室
12月20日
3
设计实现自动售货机的功能
微机实验室
12月20日
五、应收集的资料及主要参考文献
1许立锌等编.微型计算机原理及应用.北京:
机械工业出版社,2003
2.许立梓等编《微型计算机原理及应用》
--习题解答、实验指导及课程设计.
北京:
机械工业出版社,2003
发出任务书日期:
年月日指导教师签名:
计划完成日期:
年月日基层教学单位责任人签章:
主管院长签章:
一、编程使四位LED同时显示AB96。
(要求将数据A、B、9、6存入数据段,取出后经XLAT译码后,才显示出来)
程序如下:
STACKSEGMENTSTACK
DW64DUP(?
)
STACKENDS
DATASEGMENT
ORG1000H
DAT1DB0AH,0BH,09H,06H;显示AB96
ORG1100H
TABLDB3FH,06H,5BH,4FH
DB66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH
DB79H,71H;七段共阴数码管从0到F的数值表
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAL,90H
OUT63H,AL;方式控制选择字,端口A工作方式0,输入,B方式0输出,C输出
MAIN:
MOVSI,OFFSETDAT1
CALLDISP
JMPMAIN
DISP:
PUSHSI
PUSHCX
PUSHBX
MOVCL,0EFH
A1:
MOVAL,CL;送位选信号
OUT62H,AL;选通第一个数码管
MOVAL,[SI]
MOVBX,OFFSETTABL
XLAT;换码指令
OUT61H,AL
CALLDALLY1;调用延时子程序
ROLCL,1
INCSI
TESTCL,01H
PUSHAX
MOVAL,00H
OUT61H,AL
POPAX
JNEA1
POPBX
POPCX
POPSI
RET
DALLY1:
PUSHCX;延时子程序
MOVCX,002FH
A3:
LOOPA3
POPCX
RET
CODEENDS
ENDSTART
结果验证:
按电路框图接好电路后,输入程序,汇编、连接、加载程序后,运行程序,数码管上显示AB96,程序达到设计要求。
二、在1的基础上编程实现89AB与12FE在数码管上的切换显示,间隔3秒。
程序如下:
STACKSEGMENTSTACK
DW64DUP(?
)
STACKENDS
DATASEGMENT
ORG1000H
DAT1DB08H,08H,0AH,0BH;显示89AB
DAT2DB01H,02H,0FH,0EH;显示12FE
ORG1100H
TABLDB3FH,06H,5BH,4FH,66H
DB6DH,7DH,07H,7FH,6FH
DB77H,7CH,39H,5EH,79H,71H;七段共阴数码管从0到F的数值表
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAL,90H
OUT63H,AL;方式控制选择字,端口A工作方式0,输入,B方式0输出,C输出
MAIN:
MOVSI,OFFSETDAT1
CALLDALLY3S;显示3S的89AB
MOVSI,OFFSETDAT2
CALLDALLY3S;显示3S的12FE
JMPMAIN
DISP:
PUSHSI
PUSHCX
PUSHBX
MOVCL,0EFH
A1:
MOVAL,CL;送位选信号
OUT62H,AL;选通第一个数码管
MOVAL,[SI]
MOVBX,OFFSETTABL
XLAT;换码指令
OUT61H,AL
CALLDALLY1;调用延时子程序
ROLCL,1
INCSI
TESTCL,01H
PUSHAX
MOVAL,00H
OUT61H,AL
POPAX
JNEA1
POPBX
POPCX
POPSI
RET
DALLY1:
PUSHCX;延时子程序
MOVCX,002FH
A3:
LOOPA3
POPCX
RET
DALLY3S:
;延时3S函数
PUSHCX
MOVCX,03FFH
DALL1:
PUSHCX
MOVCX,0006H
DALL2:
CALLDISP;调用显示函数
LOOPDALL2
POPCX
LOOPDALL1
POPCX
RET
CODEENDS
ENDSTART
结果验证:
按电路框图接好电路后,输入程序,汇编、连接、加载程序后,运行程序,数码管上显示89AB,3S后,数码管显示12FE,再过3S后又显示89AB,交替显示。
程序达到设计要求。
A
B
F
4
0
6
C
D
三、将8个键按实验室要求定义键值,按任意键在显示器上显示对应键值,要求显示值能够左移。
程序如下:
STACKSEGMENTSTACK
DW64DUP(?
)
STACKENDS
DATASEGMENT
ORG1000H
DAT1DB00H,00H,00H,00H;用于显示的数据缓冲区
ORG1500H
TABLDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;共阴级数码管正接
DB7FH,6FH,77H,7CH
DB39H,5EH,79H,71H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAL,90H;A口工作方式0输入,B、C口工作方式0输出
OUT63H,AL
MOVSI,OFFSETDAT1;开机后显示0000
CALLDISP;调用显示函数
STT:
MOVAL,00H;键盘扫描程序
OUT62H,AL;先把PC口都输出低电平
NEXT:
INAL,60H;检测PA口
ANDAL,0C0H
CMPAL,0C0H;看PA6、PA7是否保持着高电平
JNZKEYABC;要是没有,说明可能有键按下了,跳去KEYABC确认一下
CALLDISP;显示SI所指数据区的东西
JMPSTT;跳回STT继续扫描有没有按键按下
KEYABC:
CALLTIME;键盘消抖动函数
INAL,60H;检测PA口
ANDAL,0C0H
CMPAL,0C0H;确认是不是真的有按键按下
JNZKEY_0;确定有按键按下了,跳到KEY_0开始检测是哪个按键
JMPSTT;返回STT,扫描键盘
;------------------
KEYTESTMACROPORTVALUE,X,Y,Z,J;宏定义,键盘扫描程序
MOVAL,PORTVALUE
OUT62H,AL
INAL,60H
TESTAL,80H
JNZJ
CALLX
JMPSTTK;放开按键检测函数
J:
TESTAL,40H
JNZZ
CALLY
JMPSTTK
ENDM
;-------------------
KEY_0:
KEYTEST0EFH,KEY0,KEY1,KEY_2,JJ0
KEY_2:
KEYTEST0DFH,KEY2,KEY3,KEY_4,JJ1
KEY_4:
KEYTEST0BFH,KEY4,KEY5,KEY_6,JJ2
KEY_6:
KEYTEST7FH,KEY6,KEY7,KEY_H,JJ3
KEY_H:
JMPSTTK
;+++++++以下为按键处理程序++++++
SHOWMACROVAR;宏定义,显示VAR
CALLLP1
MOVAL,VAR
MOV[SI],AL;
CALLDISP;显示数字
RET
ENDM
;-----------------
KEY0:
SHOW00H;键值0
KEY1:
SHOW0AH;键值A
KEY2:
SHOW06H;键值6
KEY3:
SHOW0BH;键值B
KEY4:
SHOW0CH;键值C
KEY5:
SHOW0FH;键值F
KEY6:
SHOW0DH;键值D
KEY7:
SHOW04H;键值4
;+++++++++++++++++++++
LP1:
MOVCX,0003H;数据移位保存子程序(前进三位)
MOVSI,OFFSETDAT1;SI指向显示代码缓冲区首址
LP2:
MOVAL,[SI+1];显示代码移位
MOV[SI],AL;显示数字移位
INCSI
LOOPLP2
RET;移位返回
;++++++++++++++++++++++++++++++++
TIME:
PUSHAX;按键消抖用的函数
PUSHCX
MOVCX,0040H
TIME1:
MOVAX,0010H
TIME2:
DECAX
JNZTIME2
LOOPTIME1
POPCX
POPAX
RET
STTK:
CALLDISP;检测按键是否已经放开的函数
MOVAL,00H
OUT04H,AL
INAL,00H
ANDAL,0C0H
CMPAL,0C0H
JNZSTTK
JMPSTT
;================================
DISP:
PUSHSI
PUSHCX
PUSHBX
MOVCL,0EFH
MOVSI,OFFSETDAT1
A1:
MOVAL,CL;送位选信号
OUT62H,AL;选通第一个数码管
MOVAL,[SI]
MOVBX,OFFSETTABL
XLAT;换码指令
OUT61H,AL
CALLDALLAY1;调用延时子程序
ROLCL,1
INCSI
TESTCL,01H
PUSHAX
MOVAL,00H
OUT61H,AL
POPAX
JNEA1
POPBX
POPCX
POPSI
RET
;================================
DALLAY1:
PUSHCX
MOVCX,0060H
DALL1:
LOOPDALL1
POPCX
RET
;================================
CODEENDS
ENDSTART
结果验证:
按电路框图接好电路后,输入程序,汇编、连接、加载程序后,运行程序,一开始数码管显示0000,按动键盘之后,数码管显示对应的键值,左移显示。
程序达到设计要求。
四、实现:
a).当K0=1时,键入货品、价钱、SET,设置某个货品的价格,可至少连续设置三个价钱;(设可乐为10.59元,薯片9.87元,话梅5.63元)
薯片
话梅
可乐
十
SET
分
角
元
b).当K0=0时,键入一个货品名、购买的个数,按SET得到总价,再键入另一个货品名、购买的个数,按SET即得合总价,可计得至少三种货品并计得合总价。
系统设计说明:
当开关K0=1时,八个按键所代表的功能如图所示:
显示时,用AAAA代表薯片,BBBB代表话梅,CCCC代表可乐,只有先选择了货品之后,即按了“薯片”、“话梅”、“可乐”之一后,按动“十”、“元”、“角”、“分”才能对单价进行修改,修改其中一种单价后,按“SET”即可存储单价。
价钱的显示为“十”“元”“.”“角”“分”,每一位只能是0到9。
薯片
话梅
可乐
—
SET
清零
个数
—
当开关K0=0时,八个按键所代表的功能如图所示:
显示时,用AAAA代表薯片,BBBB代表话梅,CCCC代表可乐,先选择其中一种货品后,按“个数”键,再按“SET”后即可得到一种货品的总价,再选择另一种货品和购买个
数后,按“SET”可得到合总价。
按“清零”可以清掉合总价和购买个数。
最右边的两个键不实现任何功能。
程序如下:
STACKSEGMENTSTACK
DW64DUP(?
)
STACKENDS
DATASEGMENT
ORG1000H
DAT1DB00H,00H,00H,00H;用于显示的数据缓冲区
ORG1020H
SHUPIANDB0AH,0AH,0AH,0AH;AAAA表示薯片,用于数码管显示
HUAMEIDB0BH,0BH,0BH,0BH;BBBB表示话梅,用于数码管显示
KELEDB0CH,0CH,0CH,0CH;CCCC表示可乐,用于数码管显示
ORG1200H
PRICE_SHUDB4DUP(?
);薯片的单价存放区
PRICE_HUADB4DUP(?
);话梅的单价存放区
PRICE_KEDB4DUP(?
);可乐的单价存放区
GESHUDB4DUP(?
);购买单种货品数量的存放区
ORG1300H
ZONGJIADB4DUP(?
);购买单种物品的总价钱的存放区
HEZONGJIADB4DUP(?
);购买几种物品的总价钱的存放区
ORG1500H
TABLDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;共阴级数码管正接
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAL,90H;A口工作方式0输入,B、C口工作方式0输出
OUT63H,AL
MOVDL,00H;显示小数点的标志位,00不需要小数点01需要显示小数点
MOVDH,00H;选择何种物品的标志位,01薯片02话梅03可乐00还没选择
MOVSI,OFFSETDAT1;开机后显示0000
CALLDISP;调用显示函数
STT:
MOVAL,00H;键盘扫描程序
OUT62H,AL;先把PC口都输出低电平
NEXT:
INAL,60H;检测PA口
ANDAL,0C0H
CMPAL,0C0H;看PA6、PA7是否保持着高电平
JNZKEYABC;要是没有,说明可能有键按下了,跳去KEYABC确认一下
CALLDISP;显示SI所指数据区的东西
JMPSTT;跳回STT继续扫描有没有按键按下
KEYABC:
CALLTIME;键盘消抖动函数
INAL,60H;检测PA口
ANDAL,0C0H
CMPAL,0C0H;确认是不是真的有按键按下
JNZKEY_0;确定有按键按下了,跳到KEY_0开始检测是哪个按键
JMPSTT;返回STT,扫描键盘
KEYTESTMACROPORTVALUE,X,Y,Z,J;宏定义,键盘扫描程序
MOVAL,PORTVALUE
OUT62H,AL
INAL,60H
TESTAL,80H
JNZJ
CALLX
JMPSTTK;放开按键检测函数
J:
TESTAL,40H
JNZZ
CALLY
JMPSTTK
ENDM
KEY_0:
KEYTEST0EFH,KEY0,KEY1,KEY_2,JJ0
KEY_2:
KEYTEST0DFH,KEY2,KEY3,KEY_4,JJ1
KEY_4:
KEYTEST0BFH,KEY4,KEY5,KEY_6,JJ2
KEY_6:
KEYTEST7FH,KEY6,KEY7,KEY_H,JJ3
KEY_H:
JMPSTTK
;++++++++++++++++++++++++++++++以下为按键处理程序+++++++++++++++++++++
KEY0:
INAL,60H;此为SET键,实现设置单价和算价钱功能
TESTAL,02H;检测PA1所接拨动开关K0的电平,为低电平则掉到售货部分处理
JZK0A_SALE
CMPDH,00H;检测是否有选择何种货品了
JZK0A;若还没选择,结束掉此按键处理程序,若已选了,进入下面处理
MOVDL,01H;允许显示小数点
CALLCUNCHU;调用存入某种物品单价的函数
MOVSI,OFFSETDAT1;显示该单价
JMPK0A;结束此处理程序
K0A_SALE:
MOVDL,01H;小数点可以显示
CALLCOUNT;计算价钱的函数
MOVSI,OFFSETHEZONGJIA;显示合起来的总价钱
K0A:
RET;结束
;-------------------------------------------------------
QING0MACROWEIZHI;宏定义,实现清空形式参数WEIZHI数据区的内容
PUSHSI
PUSHAX
MOVSI,OFFSETWEIZHI
MOVAL,00H
IRPCXX,0123
MOV[SI+XX],AL
ENDM
POPAX
POPSI
ENDM
;------------------------------------------------------
ZIJIAMACROJUMP1,JUMP2,JUMP3,X;宏定义
INAL,60H
TESTAL,02H;检测PA1所接拨动开关K0的电平,为低电平则掉到售货部分处理
JZJUMP1
CMPDH,00H;检测是否已经选择了其中一种货品
JZJUMP2;K2A;若还没选择,按了也白搭,直接退出按键处理程序
MOVDL,01H;可以显示小数点
MOVSI,OFFSETDAT1
MOVAL,[SI+X];设置单价的某一位,按一下自加1
INCAL
CMPAL,0AH;看是否大于10了
JBJUMP3
MOVAL,00H;保证设置分时不能超过9,超过9又从0开始加
JUMP3:
MOV[SI+X],AL
JMPJUMP2;设完就退出按键处理程序
ENDM
;-------------------------------------------------------
KEY1:
;此为货品选择键,选择薯片
MOVDL,00H;不允许显示小数点
MOVDH,01H;标志已经选择薯片了
QING0DAT1
QING0GESHU
MOVSI,OFFSETSHUPIAN;显示AAAA代表选择了薯片
RET;结束
;-------------------------------------------------------
KEY2:
;此为设置分键和清0键,实现设置单价的分位和购买时的清零
ZIJIAK2A_SALE,K2A,XIAOYU0,3
K2A_SALE:
;清零把个数、单种物品总价,多种物品总价,选择物品标志DH都清零
QING0ZONGJIA
QING0HEZONGJIA
QING0GESHU
MOVDH,00H;清掉选择,重设为没选择任何货品
K2A:
RET;退出按键处理程序
;----------------------------------------------
KEY3:
;此为选择货品键,选择话梅
MOVDL,00H;不允许显示小数点
MOVDH,02H;表示已经选择了货品话梅
QING0DAT1
QING0GESHU
MOVSI,OFFSETHUAMEI;在数码管显示BBBB代表话梅
RET;退出按键处理程序
;------------------------------------------
KEY4:
;此为设置单价的角与设置购买单种物品的个数
ZIJIAK4A_SALE,K2A,XIAOYU1,2
K4A_SALE:
CMPDH,00H;看是否选择某种物品了
JEK4A;没有就直接结束
MOVDL,00H;不显示小数点
MOVSI,OFFSETGESHU;设置个数,个数不超过9个,超9就又从0自加1
MOVAL,[SI+3]
INCAL
CMPAL,0AH
JBK4A0
MOVAL,00H
K4A0:
MOV[SI+3],AL
K4A:
RET;退出按键处理程序
;--------------------------------------------
KEY5:
;此为选择键,选择可乐的
MOVDL,00H;不显示小数点
MOVDH,03H;表示已经选择物品可乐
QING0GESHU
QING0DAT1
MOVSI,OFFSETKELE;数码管显示CCCC表示选择了可乐
RET
;------------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机原理 售货机报告 微机 原理 售货 报告