沈阳航空航天大学
课 程 设 计 报 告
课程设计名称:单片机系统综合课程设计 课程设计题目:简易计算器的设计与实现院(系):专 业:班 级:学 号:姓 名:指导教师:完成日期:
--
--
目 录
第1章
总体设计方案 ................................................................................................. 1
1.1 设计内容 .............................................................................................................. 1
1.2 设计原理 .............................................................................................................. 1 1.3 设计思路 .............................................................................................................. 2 1.4 实验环境 .............................................................................................................. 2 第2章 详细设计方案 .................................................................................................... 3 2.1 硬件电路设计 ...................................................................................................... 3 2.2 主程序设计 .......................................................................................................... 7 2.2 功能模块的设计与实现 ...................................................................................... 8 第3章 结果测试及分析 ............................................................................................... 11 3.1 结果测试 ............................................................................................................. 11 3.2 结果分析 ............................................................................................................. 11 参考文献 ........................................................................................................................ 12 附 录1 元件清单 ........................................................................................................ 13 附 录2 总电路图 ........................................................................................................ 13 附 录3 程序代码 ........................................................................................................ 14
--
--
第1章 总体设计方案
1.1 设计内容
本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计算
器的键盘输入,进行加、减、乘、除1位无符号数字的简单四则运算,并在6位8段数码管上显示相应的结果。
设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的8751单片机,输入采用4×4矩阵键盘。显示采用6位8段共阳极数码管动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,最终选用汇编语言进行编程,并用protel99se涉及硬件电路。
1.2 设计原理
在该课程设计中,主要用到一个8751芯片和串接的共阳数码管,和一组阵列式
键盘。作为该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。
1) 提出方案
以8751为核心,和数码管以及键盘用实验箱上已有的器件实现计算器的功能。
2) 总体方案实现
(1)要解决键值得读入。先向键盘的全部列线送低电平,在检测键盘的行线,如果有一行为低电平,说明可能有按键按下,则程序转入抖动检测---就是延时10ms再读键盘的行线,如读得的数据与第一次的相同,说明真的有按键按下,程序转入确认哪一键按下的程序,该程序是依次向键盘的列线送低电平,然后读键盘的行线,如果读的值与第一次相同就停止读,此时就会的到键盘的行码与列码
--
--
查表可的键值。并且将键值送入缓冲区。
(2)计算。从缓冲区中取出数据按照括号配匹算法解决符号优先级问题,如果有键值为“F”则清空缓冲区跳至开始处,否则调用汇编指令进行计算,结果送入缓冲区。
(3)显示。从缓冲区中取出数据查找段码表,将段码送入段码管。
1.3 设计思路
采用汇编语言程序设计的方法结合硬件电路设计方法,利用Lab6000实验箱上已有芯片来实现计算器的各项功能。
1.4 实验环境
硬件环境:Lab6000实验箱,PC机。 软件环境:WAVE应用软件。
--
--
第2章 详细设计方案
2.1 硬件电路设计
1)单片机8751
P0口作为存储器地址线的低8位,p2口作为地址线的高8位,采用定时器0作为键盘抖动时的10ms延时,采用外部设备与存储器统一编制方式。如图2.1所示。
图2.1 单片机8751图
2)8段共阳极数码管
图为八段共阳极数码管的引脚图,从左到右数码管的段码分别为a,b,c,d,e,f,g和小数点dp,高电平时点亮,这八位分别74LS374的Q0~Q7接,作为数码管的
--
--
段码锁存器,其CPU访问地址位09004。下边为位选端和阳极端,6个位选端分别与另一片74LS374的Q0~Q5,与此同时为了体现总线的复用性和硬件电路的简单性这6位位选线作为键盘的列线,CPU访问地址为09002H。如图2.2所示。
图2.2
共阳极8段数码管图
3)键盘
键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。通用计算机使用的标准键盘就是编码键盘。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。但大多数智能仪器和电子产品的按键数目都不太多(20个以内),为了降低成本和简化电路通常采用非编码键盘。非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。本课题需要的是16个按键,故选择用非编码键盘。键盘的行线与一片74LS245相连接作为键盘的扫描码,其CPU访问地址09001H。如图2.3所示。
--
--
图2.3
简易计算器数据输入键盘图
4)74LS374
74LS374是地址锁存器,一片用来锁存键盘,数码管的地址,另一片用来锁存数码管的段码。如图2.4所示。
图2.4 74LS374图
--
--
5)74LS245
74LS245用来读取键盘的行码A0-A3分别与键盘的行线相连接;B0-B7分别与数据总线相连接。如图2.5所示。
图2.5 74LS245图
6)UNL2003A
UNL2003A相当于7个非门IN输入OUT输出,其中IN端接键盘的列线,OUT端接数码管。如图2.6所示。
--
--
图2.6 ULN2003A图
2.2 主程序设计
主程序模块是边检测边显示的模块,一旦有按键按下(无论是按键抖动还是真的有按键按下)就转入键值读取模块,如果没有按键按下或是已经从键值读取模块返回,就继续从一个以30H为首地址的缓冲区中取出数据并转换成数码管的段码显示出来。主模块是一个死循环函数没有结束直至人为终止。主程序流程图如图2.7所示。
--
--
开始检测从缓冲区中读数据否查表取段码显示有键按下是结束
图2.7 主程序流程图
2.2 功能模块的设计与实现
1)键值读取模块。
键只读取模块是,当主模块中有按键时,才被调用的。其功能是首先延时10ms已消除键盘抖动,继续读写,若读得的数据与主模块中的键值一样则真的有按键按下,若是“F”键则清空缓冲区若是“E”键则调用计算模块,否则将键值写入
--
--
缓冲区返回主函数。流程图如2.8所示。
开始延时10ms有键按下是读取键值延时10ms按键放开否E键是否否F键调用计算函数是缓冲区加一将键值存入清空缓冲区结束
图2.8 键值读取模块图
--
--
2)计算模块
计算模块是从缓冲区中取得数据并且压栈,如遇到“*”或是“/”就出栈同时进行乘除运算;至到遇到等号为止,再从栈中取得数据进行加减运算。并将计算的结果送入缓冲区中。具体流程图如图2.9所示。
开始否从缓冲区中取数取完是计算结果写入缓冲区结束
图2.9 计算模块图 --
--
第3章 结果测试及分析
3.1 结果测试
计算器实现了0 –F内的加减乘除法运算,并将表达式以及结果显示在六位八段数码管上,其中A键 为加号,B键为减号,C键为乘号D键为除号,F键为清零,还可以实现表达式的运算,例如1+2*3/4-5=-2.75的表达式。
3.2 结果分析
键值的读取是本次课程设计最关键的一部分,因为只有从键盘取得数据才能进行计算和显示,否则该题目无法继续进行下去,按键的读取逻辑方面并不是很难,但是边读取边显示就显得不那么简单了,所以存在一个延时问题。延时得当则读取和显示可完美结合。
计算也是一个很关键部分,本来想做一个任意位数的任意数学表达式的计算器可是由于时间限制,只能完成了计算任意数学表达式计算器。显示模块比较简单实现起来也比较容易。
--
--
参考文献
[1]王爱英.计算机组成与设计 [M]. 北京:教育出版社,2003
[2]杨素行.微型计算机系统原理及应用 [M]. 北京:清华大学出版社,1996 [3]张雪兰.汇编语言程序设计 [M]. 北京:清华大学出版社,2006
[4]龚尚福.微机原理与接口技术 [M]. 西安:西安电子科技大学出版社,2003 [5]王中民.微型计算机原理 [M]. 西安:西安电子科技大学出版社,2003 [6]沈美明,温冬婵.IBM-PC汇编语言程序设计[M]. 北京:清华大学出版社,2001
--
--
附 录1 元件清单
名称 数量(个) 型号 备注 电阻 6 8段数码管 6 DPY 开关 24 BUTTON 单片机 1 8751 与非门 3 电源 3 电容 3 30pf(2个),10uf(1个) 晶振 1 74LS系列ULN2003A CRYSTAL 74LS138,74LS245,74LS373(2) 74LS374 芯片 5 附 录2 总电路图
--
123456B0B1B2B3B4B5B6B7B0B1B2B3B4B5B6B7B0B1B2B3B4B5B6B7B0B1B2B3B4B5B6B7B0B1B2B3B4B5B6B7B0B1B2B3B4B5B6B71234567812345678123456781234567812345678DabcdefghA0A1A2abcdefghaabcdefghaabcdefgha12345678abcdefghaabcdefgh256912151619aaU274LS373fbgQ0Q1Q2Q3Q4Q5Q6Q7fgL6bfgL5bfgL4bfgL3bfbgL2cecececeL1OELED0D1D2D3D4D5D6D7edchdhdhdhdec 3478131417181010101010U1VCC12345678P10P11P12P13P14P15P16P17P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P272122232425262728B0B1B2B3B4B5B6B710113029INT1INT0T1T0EA/VPX1X2RESETRDWR8051RXDTXDALE/PPSEN39383736353433321312151431C1191830pfC291716U13CRYSTALD111hdh161514131211CAN10RESETCOUT 1OUT 2OUT 3OUT 4OUT 5OUT 6OUT 7R610K22ufC3CLAMPU5ULN2003A(16)附 录3 程序代码
99999IN 7COMMON9IN 1IN 2IN 3IN 4IN 5113478131417181CLK1D2D3D4D5D6D7D8DOE1Q2Q3Q4Q5Q6Q7Q8Q74LS374(20)78U715141312111097Y0Y1Y2Y3Y4Y5Y6Y7ABC123B0B1B2B3B4B5B6B7E1E2E345674LS138U8AA213274LS00U6347813141718D0D1D2D3D4D5D6D7Q0Q1Q2Q3Q4Q5Q6Q7VCC256912151619U41817161514131211B0B1B2B3B4B5B6B7A0A1A2A3A4A5A6A7EDIR2345678919174LS245456--STEP9+TRACE256912151619B0B1B2B3B4B5B6B7--
10912345IN 6U36730pf8VCCBR1B10KMONR210K123*HERENEXTR310K0CLEAR=/EXECLASTR4VCC10KR5A10KU11A213WR74LS02U12A213RD74LS0212A01A11U9A3274LS00U10A3274LS00B0B1B2B3B4B5B6B7ATitle111OECLK74LS374345SizeBDate:File:NumberRevision15-Jul-2014Sheet of E:\\单片机\\单片机课设\\硬件电路图\\计算器.DDdbrawn By:6--
--
ORG 0000H
LJMP MAIN ORG 000BH LJMP INT
ORG 00FFH MAIN:
MOV R7,#30H MOV R6,#00H CALL RESET JMP MAIN RESET:
MOV A,R7 MOV R0,A MOV R1,#01H MOV A,#06H SUBB A,R6 JB PSW.7,MAX MOV A,R6 XRL A,#00H JZ CC MOV A,R6 MOV R3,A JMP LOOP5 MAX: MOV R3,#06H LOOP5:
MOV A,@R0 MOV R5,A
--
--
CALL CHACKTABLE CALL DISPLAY MOV A,R1 RL A MOV R1,A DEC R0 DJNZ R3,LOOP5 CC:
MOV DPTR,#09004H MOV A,#00H MOVX @DPTR,A MOV R1,#00H CALL READ XRL A,#0FH JZ RESET CALL CHACK JMP RESET RET CHACK:
CALL DELAY MOVX A,@DPTR MOV R2,A xrl A,R0 JZ HAVE AJMP CHACK HAVE: MOV R1,#0FBH LOOP:
--
--
CALL READ xrl A,R2 JZ EQUAL MOV A,R1 RL A MOV R1,A AJMP LOOP EQUAL: CALL DELAY CALL DELAY LOOP2:
MOVX A,@DPTR XRL A,#0FH JZ LOOP3 JMP LOOP2 LOOP3:
CALL CHACKTAB CALL CHACKTABLE CALL RESOLVE RET CHACKTAB:
MOV DPTR,#TAB MOV A,#00H MOV R5,#00H LOOP4: RL A MOV R4,A
MOVC A,@A+DPTR
--
--
XRL A,R1 JNZ NEXT MOV A,R4 INC A
MOVC A,@A+DPTR XRL A,R0 JNZ NEXT AJMP ENDD NEXT: INC R5 MOV A,R5 SJMP LOOP4 ENDD: RET CHACKTABLE:
MOV DPTR,#TABLE MOV A,R5
MOVC A,@A+DPTR MOV R4,A RET DISPLAY:
MOV DPTR,#09002H MOV A,R1 MOVX @DPTR,A MOV DPTR,#09004H MOV A,R4 MOVX @DPTR,A MOV R2,#0FFH
--
--
DJNZ R2,$ RET READ:
MOV DPTR,#09002H MOV A,R1 MOVX @DPTR,A MOV DPTR,#09001H MOVX A,@DPTR MOV R0,A RET RESOLVE:
INC R7 MOV A,R7 MOV R0,A MOV A,R5 INC R6 MOV @R0,A MOV A,R5 XRL A,#0FH JZ CLEAR MOV A,R5 XRL A,#0EH JZ M JMP MM M:
LCALL JISUANG MM:
RET
--
--
CLEAR:
LJMP MAIN DELAY:
MOV TH0,#3CH MOV TL0,#0B0H MOV TMOD,#01H SETB EA SETB ET0 SETB TR0 JB TR0,$ JMP RRR INT: CLR TR0 RETI RRR:
RET TAB:
DW 0DF0EH,0DF0DH,0EF0DH,0F70DH,0DF0BH,0EF0BH,0F70BH DW 0DF07H,0EF07H,0F707H,0FB07H,0FB0BH,0FB0DH,0FB0EH DW 0F70EH,0EF0EH TABLE:
DB 3FH,06H, 5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H, 7CH,39H,5EH,79H,71H JISUANG:
MOV R0,#31H MOV R1,#50H CHENGCHU:
MOV A,@R0
--
--
XRL A,#0CH JZ CHENG MOV A,@R0 XRL A,#0DH JZ CHENG MOV A,@R0 XRL A,#0EH JZ OVER MOV A,@R0 MOV @R1,A INC R0 INC R1
JMP CHENGCHUCHENG: MOV A,@R0 MOV R3,A DEC R1 MOV A,@R1 MOV R2,A INC R0 MOV A,@R0 INC R0 MOV R4,A CALL MATH MOV A,R5 MOV @R1,A INC R1 MOV A,R5 MOV @R1,A
--
--
JMP CHENGCHU CHU: MATH:
MOV A,R3 XRL A,#0AH JZ ADDD MOV A,R3 XRL A,#0BH JZ SUBBB MOV A,R3 XRL A,#0CH JZ MULL JMP OVER ADDD:
MOV A,R2 ADD A,R4 MOV R5,A JMP RETT SUBBB:
MOV A,R2 SUBB A,R4 MOV R5,A JMP RETT MULL:
MOV A,R2 MOV B,R4 MUL AB MOV R5,A
--
--
RETT: RET OVER:
INC R0 MOV A,#0EH MOV @R1,A MOV R1,#50H LOOP8:
MOV A,@R1 XRL A,#0EH JZ ENDD1
INC R1 MOV A,@R1 XRL A,#0EH JZ ENDD1 DEC R1 MOV A,@R1 MOV R2,A INC R1 MOV A,@R1 MOV R3,A INC R1 MOV A,@R1 MOV R4,A CALL MATH MOV A,R5 MOV @R1,A JMP LOOP8
--
--
ENDD1:
DEC R1 MOV A,@R1 MOV @R0,A INC R7 INC R6 RET END
--
--
课程设计总结: 通过这次课程设计,我进一步加深了对单片机的了解。并进一步熟练了对WAVE和Proteus软件的操作。在编写程序的过程中,遇到了很多问题,例如键值的读入问题,数码管的动态显示问题。经过几天的努力,在老师同学们的帮助下终于完成了本次课程设任务。通过这次的设计,进一步了解了单片微型计算机及应用原理,收获很大,对软件编程、排错调试、查阅资料等方面得到较全面的锻炼和提高。 同时通过本次课程设计的学习,掌握了51系列单片机和其工作环境,可以进行一些简单的编程,我还深深的体会到设计课的重要性和目的性所在。为了完成课程设计的任务,在网络上找到了许多相关的资料,大大扩充自己的知识面,使许多以前想解决却无法解决的困难迎刃而解。将书本上的理论知识和实际有机地结合起来,从理论中得出结论。锻炼了实际分析问题和解决问题的能力,提高了适应实际的能力,为今后的学习和实践打下了良好的基础。此次课设还巩固和综合运用所学过的原理知识,从而提高自己的实际动手能力和独立思考的能力。 指导教师评语: 指导教师(签字): 年 月 日 课程设计成绩
--
因篇幅问题不能全部显示,请点此查看更多更全内容