单片机课设Word文档下载推荐.docx
- 文档编号:17333544
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:34
- 大小:43.20KB
单片机课设Word文档下载推荐.docx
《单片机课设Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机课设Word文档下载推荐.docx(34页珍藏版)》请在冰豆网上搜索。
(5×
(6×
(7×
)。
将输入的数做加减运算。
由于按常规情况有多种可能,需要分情况讨论,最好想办法能不做讨论。
因此想出如下办法:
先判断输入数字的符号位,若为负数则先将符号位的“1”去掉(即减去
),然后取补再相加。
若做减法运算,则将被减数取补,之后相加。
判断结果,如果为正数则直接将结果存入两个字中;
如果为负数则先取补在加上符号位的“1”,。
同时输出溢出标志位,溢出则为1。
判断溢出标志位,若溢出则输出88888888,若不溢出则将得到的和再次做进制转化,使其输出为十进制。
(2)分块设计程序(按初始思路划分)
分块程序一:
输入数字部分
C8255EQU0C006H;
8255命令口地址
P8255AEQU0C000H;
8255PA口地址
P8255BEQU0C002H;
8255PB口地址
P8255CEQU0C004H;
8255PC口地址
;
---------------------------------------------------------------
AXEQU58H
ALEQU58H
AHEQU59H
BLEQU5AH
CXEQU5CH
DXEQU5EH
DLEQU5EH;
显示数值段形码
DHEQU5FH
EXEQU60H
ELEQU60H;
记录第一个数的总位数
EHEQU61H;
空闲
FXEQU62H
FLEQU62H
FHEQU63H
GXEQU64H;
记录第一个数的起始地址
GLEQU64H
KLEQU66H;
记录算术运算符
MXEQU68H
MLEQU68H
NXEQU6AH
NLEQU6AH
NHEQU6BH
PXEQU6CH
PLEQU6CH;
记录第二个数的总位数
PHEQU6DH;
RXEQU6EH
RLEQU6EH
RHEQU6FH
SXEQU74H;
记录第二个数的起始地址
SLEQU74H
TXEQU76H
TLEQU76H;
记录计算结果的总位数
THEQU77H;
CHREQU79H;
记录输入的键值
ZXEQU7AH
ZLEQU7AH
YLEQU7CH
扫描读取
ORG2080H
LDSP,#0FCH;
设置堆栈
LCALLDELAY;
延时
LDBAL,#82H;
PB口输入,PA,PC口输出
STBAL,C8255[0]
LDBAL,#09H;
使PC3置1
STBAL,P8255C
KB:
;
读第一个数
CLR30H;
清计数空间
CLR32H
CLR34H
CLR36H
CLR38H
CLR3AH
CLR3CH
CLR3EH
CLR40H
CLR42H
CLR44H
CLR46H
CLR48H
CLR4AH
CLR4CH
CLR4EH
CLR50H
CLR52H
CLR54H
CLR56H
LDCX,#38H
CLREX
LDGX,#38H
CLRTX
KB_DIS:
LCALLKSCAN;
扫描键是否闭合
LCALLRDKB;
读键子程序
CMPBCHR,#0AH;
如果键值大于A则读第二个数
JHMID
KB_NEXT:
LDBBL,3BH;
将输入的数据逐个移位,高位对应高位
SHLL3CH,#08H
SHLL38H,#08H
STBBL,3CH
STBCHR,[CX]
INCBEL;
第一个数总位数计数器加一
CLRBEH
LDTX,EX
LCALLTIME;
延时
LCALLDISP_R;
边读边显示
CMPBEL,#07H
JESIMP
SJMPKB_DIS
SIMP:
读入运算符号
LCALLKSCAN
LCALLRDKB
CMPBCHR,#0AH
JHMID
SJMPSIMP
---------------------------------------------------------------
MID:
LDBKL,CHR;
保存运算符号
KB1:
LDCX,#48H;
开始读入第二个数
CLRPX
LDGX,#48H
KB_DIS1:
LCALLKSCAN
LCALLRDKB
CMPBCHR,#0FH
JECMPE
CMPBCHR,#0AH
JHKB1
KB_NEXT1:
LDBBL,4BH
SHLL4CH,#08H
SHLL48H,#08H
STBBL,4CH
INCBPL
INCBPH
LDTX,PX
LCALLTIME
LCALLDISP_R
CMPBPL,#07H
JESIMP1
SJMPKB_DIS1
SIMP1:
只读入等于号F
SJMPSIMP1
计算部分
--------------------------------------------------------------
CMPE:
读入两个数及运算符F后转入运算程序
CLRBPH
LDGX,#3FH
LDSX,#4FH
CHANGE1:
CHANGE11:
ADDB50H,[GX]
SUBGX,#01H
CMPBEL,#04H
JEFINISH1
SUBBEL,#01H
MULU50H,#0AH
SJMPCHANGE11
FINISH1:
LD80H,50H
CHANGE2:
CHANGE22:
ADDB50H,[GX]
SUBGX,#01H
CMPBEL,#00H
JEFINISH2
SJMPCHANGE22
FINISH2:
LD82H,50H
CHANGE3:
CHANGE33:
ADDB50H,[SX]
SUBSX,#01H
CMPBPL,#04H
JEFINISH3
SUBBPL,#01H
SJMPCHANGE33
FINISH3:
LD84H,50H
CHANGE4:
CHANGE44:
ADDB50H,[SX]
SUBSX,#01H
CMPBPL,#00H
JEFINISH4
SJMPCHANGE44
FINISH4:
LD86H,50H
到这里结束,第一个数的前3位在80H里,后4位在82H里,第二个数的前3位在84H,后四位在86H里,符号存在KL里
DISP:
显示子程序
LDBDL,DL_DAT[NX]
LDBDH,TL;
小数点显示处理
CMPBDH,FL
JNEDISP2
ORBDL,#80H
DISP2:
STBDL,P8255A
RET
DISP_R:
CMPBTL,#00H;
JEEXIT1
LDBFL,TL
CLRNX
LDBFH,#08H
LDMX,GX
DISP1:
STBFH,P8255C
LDBNL,[MX]+
LCALLDISP
LCALLDELAY
ADDBFH,#20H
DJNZFL,DISP1
EXIT1:
RDKB:
LDBCHR,#1AH;
键盘扫描程序,键值存入CHR寄存器
STBCHR,P8255C[0]
NOP
NOP
LDBAL,P8255B[0]
NOTBAL
JENEXTLINE
SCALLTIME
JNEKEYVAL
NEXTLINE:
LDBCHR,#19H
JENOKEY
KEYVAL:
ANDBCHR,#01H
SHLBCHR,#03H
SHIFT:
SHRBAL,#01H
JCKBEXIT
INCBCHR
SJMPSHIFT
NOKEY:
SJMPRDKB
KBEXIT:
--------------------------------------------------------------
KSCAN:
判断键是否闭合
KSCAN1:
LDBAL,#18H
STBAL,P8255C[0]
JNEKSCAN
DELAY:
LDDX,#0FFH;
延时程序
DELAY1:
DECDX
JNEDELAY1
TIME:
LDDX,#0F00H
TIME1:
JNETIME1
DL_DAT:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;
0,1,2,3,4,5,6,7
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;
8,9,A,B,C,D,E,F
END
分块程序二:
加减运算部分
AXEQU20H
AHEQU21H
BXEQU22H
CXEQU24H
CHEQU25H
DXEQU26H
ELEQU28H
FLEQU29H
JLEQU30H
---------------------------
LDBJL,#0H
LDBFL,#0H
-------------------------
LDAX,#8001H
LDBX,#2H
LDCX,#8002H
LDDX,#3H
LDEL,#0H
JBCAH,7,ZH1
SUBBAH,#128
NEGAX
NEGBX;
------------------------判断AX正负,如果为负则变为其绝对值,然后求补
ZH1:
JBCCH,7,ZH2
SUBBCH,#128
NEGCX
NEGDX
-----------------------判断BX正负,如果为负则变为其绝对值,然后求补
ZH2:
JBCEL,0,JA
----------------------判断加减,如果为减法运算,则将被减数求补
JA:
ADDBX,DX
CMPBX,#9999
JLTJA2
SUBBX,#9999
LDBJL,#01H
---------------------低四位相加,如有进位则将JL赋值1
JA2:
ADDAX,CX
ADDAX,JL
---------------------高四位相加同时考虑进位
JBCAH,7,ZH3
NEGBX
ADDBAH,#128
---------------------结果为负则将结果求补然后符号位变为1
CMPAX,#33767
JLTZH
LDBFL,#1H
ZH3:
CMPAX,#999
JLTZH;
---------------------判断是否有溢出,如有溢出则将FL赋值1
ZH:
END
分块程序三:
结果输出部分
C8255EQU0C006H;
P8255AEQU0C000H;
P8255BEQU0C002H;
P8255CEQU0C004H;
AXEQU20H
ALEQU20H
BLEQU22H
CLEQU24H
DLEQU26H
EXEQU28H
EHEQU29H
FXEQU2AH
FLEQU2AH
FHEQU2BH
GXEQU2CH
GLEQU2CH
GHEQU2DH
HXEQU2EH
IXEQU30H
LXEQU36H
LLEQU36H
LHEQU37H
KXEQU38H
ORG2080H
MAIN:
LDAX,#0001H
LDBX,#0FFFFH
LDBFL,#00H
CMPFL,#00H
JENORMAL
INNOR:
LDBLL,#0E0H
LDBLH,#7FH
LOOP:
STBLH,P8255A
STBLL,P8255C[0]
SCALLDTMS;
............调用延时
CMPBLL,#00H
JEINNOR
SUBLL,#20H
SJMPLOOP
NORMAL:
JBSAH,7,FONE
LDLX,#00H
SJMPTHERE
FONE:
LDLX,#01H
THERE:
ANDBAH,#7FH
TRANS:
CLRCX
CLRDX
CLRFX
CLRGX
CLRHX
CLRIX
LP1:
CMPAX,#15H
JNCLP2
CMPBX,#16960
LP11:
SUBBX,#16960
SUBCAX,#15
INCCX
CMPAX,#15
JCLP11
LP2:
CMPAX,#01
JNCLP3
CMPBX,#34464
LP22:
SUBBX,#34464
SUBCAX,#01
INCDX
JCLP22
LP3:
CMPBX,#10000
JNCLP4
LP33:
SUBBX,#10000
INCEX
JCLP33
LP4:
CMPBX,#1000
JNCLP5
LP44:
SUBBX,#1000
INCFX
JCLP44
LP5:
CMPBX,#100
JNCLP6
LP55:
SUBBX,#100
INCGX
JCLP55
LP6:
CMPBX,#10
JNCLPP
LP66:
SUBBX,#10
INCHX
JCLP66
LPP:
STBX,IX
STLX,BX
LP8:
LDKX,#22H;
..............BH低位地址
LP9:
LDAX,[KX]+
LDBLH,DSEG[AX]
JELP8
SUBBLL,#20H
SJMPLP9
DTMS:
LDBAL,#06H
DT1:
LDFX,#0080H
DT2:
DECFX
JNEDT2
DJNZAL,DT1
RET
DSEG:
DB3FH,06H,5BH,4FH,66H
DB6DH,7DH,07H,7FH,6FH
(3)程序后续修改
由于刚开始时程序第一部分设计失误(未考虑到负数的输入),故导致后续程序与其无法衔接,只能进行非负数之间的加减法。
之后小组人员协力将程序第一部分做了修改,使其满足要求。
另外,在程序的存储单元分配方面以及各部分的衔接处做了一些小的修改,最终使程序能正确显示和或差的结果在-9999999~+9999999范围内的整数进行加减运算的结果,并且如果结果超出范
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机