沈阳航空航天大学课程设计报告课程设计名称:单片机系统综合课程设计课程设计题目:简易计算器的设计与实现院(系):专业:班级:学号:姓名:指导教师:完成日期:沈阳航空航天大学课程设计报告目录第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 总电路图 (14)附录3 程序代码 (15)第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机。
软件环境:WA VE应用软件。
第2章详细设计方案2.1 硬件电路设计1)单片机8751P0口作为存储器地址线的低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)74LS37474LS374是地址锁存器,一片用来锁存键盘,数码管的地址,另一片用来锁存数码管的段码。
如图2.4所示。
图2.4 74LS374图5)74LS24574LS245用来读取键盘的行码A0-A3分别与键盘的行线相连接;B0-B7分别与数据总线相连接。
如图2.5所示。
图2.5 74LS245图6)UNL2003AUNL2003A相当于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读取键值有键按下是结束开始F 键E 键延时10ms按键放开否清空缓冲区是调用计算函数是缓冲区加一将键值存入否否2)计算模块计算模块是从缓冲区中取得数据并且压栈,如遇到“*”或是“/”就出栈同时进行乘除运算;至到遇到等号为止,再从栈中取得数据进行加减运算。
并将计算的结果送入缓冲区中。
具体流程图如图2.9所示。
开始结束从缓冲区中取数计算取完结果写入缓冲区是否图2.8 键值读取模块图图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元件清单名称数量(个)型号备注电阻 68段数码管 6 DPY开关24 BUTTON单片机 1 8751与非门 3电源 3电容 3 30pf(2个),10uf(1个) 晶振 1 CRYSTAL芯片 5 74LS系列ULN2003A74LS138,74LS245,74LS373(2)74LS374附 录2 总电路图123456A BCD654321D C BA TitleN umber R evisio nSize BD ate:15-Ju l-2014Sh eet of File:E:\单片机\单片机课设\硬件电路图\计算器.D db D raw n B y:7410852C LEA R 963=+--*/D 03Q 02D 14Q 15D 27Q 26D 38Q 39D 413Q 412D 514Q 515D 617Q 616D 718Q 719O E 1C LK 11U 674LS37412345678a b c d e f g h a b c de f gh910L612345678a b c d e f g h ab c de f g h910L512345678a b c d e f g h ab c de f g h910L412345678a b c d e f g h ab c de f g h910L312345678a b c d e f g h a b c d e f g h 910L212345678a b c d e f g habcd e f gh910L1IN 11IN 22IN 33IN 44IN 55IN 66IN 77C OMMO N8C LA MP9O UT 710O UT 611O UT 512O UT 413O UT 314O UT 215O UT 116U 5U LN 2003A (16)MO NN EX TLA STTR A CEST EP H ER E EX EC R 1R 210K R 310K R 410KV CCA 02A 13A 24A 35A 46A 57A 68A 79B 018B 117B 216B 315B 414B 513B 612B 711E 19D IR1U 474LS245O E1C LK 111D 32D 43D 74D 85D 136D 147D 178D 181Q 22Q 53Q 64Q 95Q 126Q 157Q 168Q19U 374LS374(20)EA /VP31X 119X 218R ESE T9R D 17W R 16INT 012INT 113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PS EN29A LE/P 30TX D 11R XD 10U 18051A 1B 2C3E14E25E36Y 015Y 114Y 213Y 312Y 411Y 510Y 69Y 77U 774LS138123U 8A 74LS00123U 9A74LS00123U 10A74LS00123U 11A 74LS02123U 12A 74LS02D 03Q 02D 14Q 15D 27Q 26D 38Q 39D 413Q 412D 514Q 515D 617Q 616D 718Q 719O E 1LE11U 274LS373V CCU 13C RY ST ALR ESE TA NC 322uf C 130pf C 230pfR 610K V CCR 510KV CC B 0B 1B 2B 3B 4B 5B 6B 7B 0B 1B 2B 3B 4B 5B 6B 7B 0B 1B 2B 3B 4B 5B 6B 7B 0B 1B 2B 3B 4B 5B 6B 7B 0B 1B 2B 3B 4B 5B 6B 7B 0B 1B 2B 3B 4B 5B 6B 7B 0B 1B 2B 3B 4B 5B 6B 7B 0B 1B 2B 3B 4B 5B 6B 7B 0B 1B 2B 3B 4B 5B 6B 7B 0B 1B 2B 3B 4B 5B 6B 7A 2A 1A 0A 0A 1A 2W R R D 10K附录3 程序代码ORG 0000HLJMP MAINORG 000BHLJMP INTORG 00FFHMAIN:MOV R7,#30HMOV R6,#00HCALL RESETJMP MAINRESET:MOV A,R7MOV R0,AMOV R1,#01HMOV A,#06HSUBB A,R6JB PSW.7,MAXMOV A,R6XRL A,#00HJZ CCMOV A,R6MOV R3,AJMP LOOP5MAX:MOV R3,#06HLOOP5:MOV A,@R0MOV R5,ACALL CHACKTABLECALL DISPLAYMOV A,R1RL AMOV R1,ADEC R0DJNZ R3,LOOP5 CC:MOV DPTR,#09004HMOV A,#00HMOVX @DPTR,AMOV R1,#00HCALL READXRL A,#0FHJZ RESETCALL CHACKJMP RESETRETCHACK:CALL DELAYMOVX A,@DPTRMOV R2,Axrl A,R0JZ HA VEAJMP CHACKHA VE:MOV R1,#0FBH LOOP:CALL READxrl A,R2JZ EQUALMOV A,R1RL AMOV R1,AAJMP LOOPEQUAL:CALL DELAYCALL DELAY LOOP2:MOVX A,@DPTRXRL A,#0FHJZ LOOP3JMP LOOP2LOOP3:CALL CHACKTABCALL CHACKTABLECALL RESOLVERETCHACKTAB:MOV DPTR,#TABMOV A,#00HMOV R5,#00HLOOP4:RL AMOV R4,AMOVC A,@A+DPTRXRL A,R1JNZ NEXTMOV A,R4INC AMOVC A,@A+DPTRXRL A,R0JNZ NEXTAJMP ENDDNEXT:INC R5MOV A,R5SJMP LOOP4ENDD:RETCHACKTABLE:MOV DPTR,#TABLEMOV A,R5MOVC A,@A+DPTRMOV R4,ARETDISPLAY:MOV DPTR,#09002HMOV A,R1MOVX @DPTR,AMOV DPTR,#09004HMOV A,R4MOVX @DPTR,AMOV R2,#0FFHDJNZ R2,$RETREAD:MOV DPTR,#09002HMOV A,R1MOVX @DPTR,AMOV DPTR,#09001HMOVX A,@DPTRMOV R0,ARETRESOLVE:INC R7MOV A,R7MOV R0,AMOV A,R5INC R6MOV @R0,AMOV A,R5XRL A,#0FHJZ CLEARMOV A,R5XRL A,#0EHJZ MJMP MMM:LCALL JISUANG MM:RETCLEAR:LJMP MAINDELAY:MOV TH0,#3CHMOV TL0,#0B0HMOV TMOD,#01HSETB EASETB ET0SETB TR0JB TR0,$JMP RRRINT:CLR TR0RETIRRR:RETTAB:DW 0DF0EH,0DF0DH,0EF0DH,0F70DH,0DF0BH,0EF0BH,0F70BH DW 0DF07H,0EF07H,0F707H,0FB07H,0FB0BH,0FB0DH,0FB0EH DW 0F70EH,0EF0EHTABLE:DB 3FH,06H, 5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H, 7CH,39H,5EH,79H,71HJISUANG:MOV R0,#31HMOV R1,#50HCHENGCHU:MOV A,@R0XRL A,#0CHJZ CHENGMOV A,@R0XRL A,#0DHJZ CHENGMOV A,@R0XRL A,#0EHJZ OVERMOV A,@R0MOV @R1,AINC R0INC R1JMP CHENGCHUCHENG:MOV A,@R0MOV R3,ADEC R1MOV A,@R1MOV R2,AINC R0MOV A,@R0INC R0MOV R4,ACALL MATHMOV A,R5MOV @R1,AINC R1MOV A,R5MOV @R1,AJMP CHENGCHU CHU:MATH:MOV A,R3XRL A,#0AHJZ ADDDMOV A,R3XRL A,#0BHJZ SUBBBMOV A,R3XRL A,#0CHJZ MULLJMP OVER ADDD:MOV A,R2ADD A,R4MOV R5,AJMP RETT SUBBB:MOV A,R2SUBB A,R4MOV R5,AJMP RETT MULL:MOV A,R2MOV B,R4MUL ABMOV R5,ARETT:RETOVER:INC R0MOV A,#0EHMOV @R1,AMOV R1,#50H LOOP8:MOV A,@R1XRL A,#0EHJZ ENDD1INC R1MOV A,@R1XRL A,#0EHJZ ENDD1DEC R1MOV A,@R1MOV R2,AINC R1MOV A,@R1MOV R3,AINC R1MOV A,@R1MOV R4,ACALL MATHMOV A,R5MOV @R1,AJMP LOOP8 ENDD1:DEC R1MOV A,@R1MOV @R0,AINC R7INC R6RETEND沈阳航空航天大学课程设计报告课程设计总结:通过这次课程设计,我进一步加深了对单片机的了解。