微机实训报告售货机 广工Word下载.docx
《微机实训报告售货机 广工Word下载.docx》由会员分享,可在线阅读,更多相关《微机实训报告售货机 广工Word下载.docx(36页珍藏版)》请在冰点文库上搜索。
MOVAL,0F7H
MOVAL,[DI+2]
MOVAL,03H
MOV[DI+3],AL
MOVAL,0FBH
MOVAL,[DI+3]
JMPA1
DALLY:
PUSHAX
MOVAX,0100H
D2:
DECAX
JNED2
POPAX
RET
CODEENDS
ENDSTART
2.编程实现循环移动显示0,2,3…………E,F,并利用8259的IRQ7中断控制其循环与停止,停止时保持显示的四位值。
STACKSEGMENTSTACK
DATA1DB16DUP(?
TABLEDB37H,06H,5BH,4FH,66H
DB6DH,7DH,07H7FH,6FH,77H
DB7CH,39H,5EH,79H,71H
DATA2DB00H,00H,00H,00H
A_SETDB00H
ASSUMECS:
OUT63H,AL;
8255A初始化
PUSHDS
MOVAX,0000H;
中断初始化
LEAAX,IRQ7
MOVSI,003CH
MOV[SI],AX
MOVAX,CS
MOVSI,003EH
CLI
POPDS
MOVAL,13H
OUT20H,AL
MOVAL,08H
OUT21H,AL
MOVAL,09H
MOVAL,3DH
STI
;
---------------------------------------------------------------
MOVDL,00H;
清零
LEADI,DATA1
LEASI,DATA2
MAIN:
MOVCX,0100H
LP:
CALLDALA
CALLDISP;
显示数字
LOOPLP
CMPA_SET,0FFH
JZC1
CALLADD1
C1:
STI
JMPMAIN
DALA:
PUSHSI
PUSHDI
PUSHBX
PUSHCX
MOVAL,[SI]
MOVAL,[SI+1]
MOVAL,[SI+2]
MOVAL,[SI+3]
POPCX
POPBX
POPDI
POPSI
DISP:
PUSHSI
CALLDELAY
ADD1:
INCDL
ANDDL,0FH
PUSHDX
MOV[SI],DL
MOV[SI+1],DL
MOV[SI+2],DL
MOV[SI+3],DL
POPDX
DELAY:
PUSHCX
MOVCX,0060H
A1:
LOOPA1
IRQ7:
NOTA_SET
MOVAL,20H
IRET
3.编程使键盘为:
A
1
E
9
6
(1)按动A循环右移显示0,1,2,3,4,5,6,7
(2)按动E循环左移显示8,9,A,B,C,D,E,F
(3)按动其他能左移显示其值。
程序如下:
VAR1DB0DFH,0EFH,0F7H,0FBH
VAR2DB3FH,3FH,3FH,3FH,3FH
DB3FH,3FH,3FH,3FH,3FH
VAR3DB00H,00H,00H,00H,00H
DB00H,00H,00H,00H,00H
VAR4DB00H,00H,00H,00H,00H
VAR5DB0FBH,0F7H,0EFH,0DFH
TABLEDB37H,06H,5BH,4FH,66H,6DH
DB7DH,07H,7FH,6FH,77H,7CH
DB39H,5EH,79H,71H
MOVBX,0000H
STT:
MOVAL,00H
OUT61H,AL
NEXT:
INAL,60H
ANDAL,0CH
CMPAL,0CH
JNZKEYABC
CALLDISP
JMPSTT
KEYABC:
CALLTIME
INAL,60H
JNZKEY_0
KEY_0:
MOVAL,0F7H
INAL,60H
TESTAL,08H
JNZKEY_1
CALLKEYC
JMPSTTKKEY_1:
TESTAL,04H
JNZKEY_2
CALLKEY1
JMPSTTK
KEY_2:
MOVAL,0EFH
JNZKEY_3
CALLKEY3
KEY_3:
JNZKEY_4
CALLKEYE
KEY_4:
MOVAL,0DFH
JNZKEY_5
CALLKEYF
KEY_5:
JNZKEY_6
CALLKEY9
KEY_6:
MOVAL,0FBH
JNZKEY_7
CALLKEY6
KEY_7:
JNZKEY_H
CALLKEYA
KEY_H:
JMPSTTK
KEYA:
MOVDL,00H
KEYA1:
CALLLP1
MOVAL,DL
MOV[SI+4],AL
MOV[DI+4],AL
MOVCX,0080H
AA1:
CALLDISP1
LOOPAA1
TESTDL,08H
JNZKEYA
OUT60H,AL
INAL,62H
ANDAL,30H
CMPAL,30H
JZKEYA1
JMPSTT
KEY1:
CALLLP1
MOVAL,60H
CALLDISP
KEYE:
MOVDL,08H
KEYE1:
CC1:
LOOPCC1
TESTDL,10H
JNZKEYE
JZKEYE1
KEY9:
MOVAL,0F6H
KEY6:
MOVAL,0BEH
MOVAL,06H
KEYC:
MOVAL,9CH
MOVAL,0CH
KEY3:
MOVAL,0F2H
KEYF:
MOVAL,08EH
MOVAL,0FH
LP1:
MOVCX,0004H
LEASI,VAR2
LEADI,VAR3
LP2:
MOVAL,[SI+3]
DECSI
DECDI
LOOPLP2
LEASI,VAR1
LEADI,VAR2
MOVCX,0004H
DIR:
MOVAL,[SI]
CALLTIME
INCSI
INCDI
LOOPDIR
DISP1:
LEASI,VAR5
DIR1:
LOOPDIR1
TIME:
D2:
STTK:
CALLDISP
JNZSTTK
RET
4:
实现:
a).当k0=1时,键入货品、价钱、SET,设置某个货品的价格钱,可至少连续设置三个价钱:
(设可乐3.59元,薯片10.87元,话梅7.63元)
b).当k0=0时,键入一个货品名、购买的个数,按set得到总价,在键入另一个货品名、购买的个数,按SET即可得到和总价,可记得至少三种货品并计得和总价。
DATASEGMENT
ORG0100H
DATA1DB00H,00H,00H,00H;
数据缓冲区
ORG0120H
SHUPIANDB0AH,0AH,0AH,0AH;
AAAA表示薯片
HUAMEIDB0BH,0BH,0BH,0BH;
BBBB表示话梅,用于数码管显示
KELEDB0CH,0CH,0CH,0CH;
CCCC表示可乐,用于数码管显示
ORG0200H
P_SHUDB4DUP(?
);
薯片的单价存放区
P_HUADB4DUP(?
话梅的单价存放区
P_KELEDB4DUP(?
可乐的单价存放区
GESHUDB4DUP(?
购买单种货品数量的存放区
ORG0300H
ZONGJIADB4DUP(?
购买单种物品总价钱的存放区
HEZONGJIADB4DUP(?
购买几种物品总价钱的存放区
ORG0500H
TABLEDB37H,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
MOVAL,90H;
A口工作方式0输入,B、C口工作方式0输出
小数点标志位,00不需要小数点01需要显示小数点
MOVDH,00H;
选择物品标志位,01薯片02话梅03可乐00还没选择
MOVSI,OFFSETDATA1;
开机后显示0000
调用显示函数
MOVAL,00H;
键盘扫描程序
OUT61H,AL;
先把PB口都输出低电平
INAL,60H;
检测PA口
CMPAL,0CH;
看PA2、PA3是否保持着高电平
JNZKEYABC
CALLDISP;
显示SI所指数据区的东西
JMPSTT;
跳回STT继续扫描有没有按键按下
CALLTIME;
键盘消抖动函数
INAL,60H;
CMPAL,0CH;
确认是不是真的有按键按下
JNZKEY_0
返回STT,扫描键盘
CALLKEY0
JMPSTTK;
跳到放开按键检测函数
KEY_1:
CALLKEY2
CALLKEY4
CALLKEY5
CALLKEY7
+++++++++++++++++++++++++++++以下为按键处理程序+++++++++++++++++++++
KEY0:
;
此为选择键,选择可乐的
MOVDL,00H;
不显示小数点
MOVDH,03H;
表示已经选择物品可乐
MOVDI,OFFSETDAT1
MOVAH,00H
MOV[DI],AH
MOV[DI+1],AH
MOV[DI+2],AH
MOV[DI+3],AH
MOVSI,OFFSETGESHU
MOV[SI+3],AH
MOVSI,OFFSETKELE;
数码管显示CCCC表示选择了可乐
--------------------------------------------
;
单价角与设置购买单种物品的个数
TESTAL,40H;
检测PA6,为低电平则掉到售货部分处理
JEK4A_SALE
CMPDH,00H;
看是否已经选择货品了
JEK4A;
若还没选,直接退出
MOVDL,01H;
允许显示小数点
LEASI,DAT1;
“分”的处理,自加1,同时保证不超过9
INCAL
CMPAL,0AH
JBXIAOYU1
XIAOYU1:
MOV[SI+2],AL
JMPK4A
K4A_SALE:
CMPDH,00H;
看是否选择某种物品了
JEK4A;
没有就直接结束
MOVSI,OFFSETGESHU;
设置个数,个数不超过9个,超9就又从0自加1
JBK4A0
K4A0:
MOV[SI+3],AL
K4A:
RET;
退出按键处理程序
KEY2:
;
此为货品选择键,选择薯片
MOVDL,00H;
不允许显示小数点
MOVDH,01H;
标志已经选择薯片了
MOVDI,OFFSETDATA1
MOV[DI],AL;
清掉显示缓冲区
MOV[DI+1],AL;
MOV[DI+2],AL;
MOV[DI+3],AL;
MOV[SI+3],AL;
清掉购买个数
LEASI,SHUPIAN;
显示AAAA代表选择了薯片
RET;
结束
-------------------------------------------------------
分键和清0键
检测PA6,低电平则到售货部分处理
JZK2A_SALE
检测是否已经选择了其中一种货品
JZK2A;
若还没选择,直接退出按键处理程序
可以显示小数点
MOVSI,OFFSETDAT1
MOVAL,[SI+3];
“分”,按一下自加1,超过9又从0开始加
CMPAL,0AH;
看是否大于10了
JBXIAOYU0
MOVAL,00H;
保证设置分时不能超过9,超过9又从0开始加
XIAOYU0:
JMPK2A;
设完就退出按键处理程序
K2A_SALE:
;
MOV[SI],AH
MOVSI,OFFSETZONGJIA
MOV[SI+1],AH
MOV[SI+2],AH
MOVSI,OFFSETHEZONGJIA
MOVDH,00H;
清掉选择,重设为没选择任何货品
K2A:
------------------------------------