最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

单片机课程设计—简易计算器

来源:动视网 责编:小OO 时间:2025-10-08 00:17:28
文档

单片机课程设计—简易计算器

物理与电气工程学院课程设计报告设计名称:简易计算器院部:物理与电气工程学院专业班级:12级电信三班*******080212092刘慧080212096吴阳慧080212101*******完成时间:2014年6月8日评阅意见:评阅教师日期摘要单片机课程设计是单片机原理课程的实践性环节。是在我们学习了《单片机原理》等课程的基础上进行的综合性训练,我们组这次训练的课题是基于单片机简易计算器,能够进行多位简单的加减运算,同时它能支持2位整数运算。它主要由STCC52单片机、数码管,键盘等模块组
推荐度:
导读物理与电气工程学院课程设计报告设计名称:简易计算器院部:物理与电气工程学院专业班级:12级电信三班*******080212092刘慧080212096吴阳慧080212101*******完成时间:2014年6月8日评阅意见:评阅教师日期摘要单片机课程设计是单片机原理课程的实践性环节。是在我们学习了《单片机原理》等课程的基础上进行的综合性训练,我们组这次训练的课题是基于单片机简易计算器,能够进行多位简单的加减运算,同时它能支持2位整数运算。它主要由STCC52单片机、数码管,键盘等模块组
物理与电气工程学院课程设计报告

设计名称:简易计算器                 

院    部:物理与电气工程学院         

专业班级:12级电信三班                

*******       080212092     

          刘慧         080212096     

          吴阳慧       080212101     

*******                     

完成时间:2014年6月8日             

评阅意见:

               评阅教师                日期               

            

                     摘  要

单片机课程设计是单片机原理课程的实践性环节。是在我们学习了《单片机原理》等课程的基础上进行的综合性训练,我们组这次训练的课题是基于单片机简易计算器,能够进行多位简单的加减运算,同时它能支持2位整数运算。它主要由STCC52单片机、数码管,键盘等模块组成。本计算器是将键盘输入信息经处理通过缓存,送入数码管显示,键盘采用行列式,数码管采用动态扫描方式,计算功能通过软件实现,用汇编语言对单片机可编程芯片进行编程,实现对计算器的设计。

关键词:单片机;计算器;汇编语言;键盘;数码管

 

一.课程设计的目的和要求 

1.1课程设计的目的 

单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。本次设计是设计一个简易计算器,能够进行多位简单的加减运算,同时它能支持2位整数运算。它主要由STCC52单片机、数码管,键盘等模块组成。本计算器是将键盘输入信息经处理通过缓存,送入数码管显示,键盘采用行列式,数码管采用动态扫描方式,计算功能通过软件实现,用汇编语言对单片机可编

芯片进行编程,实现对计算器的设计。 

1.2课程设计要求

1 4*4键盘输入,数码管显示。

2 完成两位整数的加减

3 由于键盘只有16个按键,安排如下:  

   +---------------+

   |0 | 1 | 2 | 3 |

   | 4| 5 | 6 | 7 |

   | 8| 9 |+ | - | 

   |=| c|  |  |

   +---------------+

二、方案的论证和比较:

 2.1 按键电路设计 

方案一:计算器输入数字和其他功能按键要用到很多按键,如果采用按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。 

方案二:矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。  

2.2  4*4键盘扫描电路(扫描式,反转式) 

   方案一扫描法:对键盘上的某一行送低电平,其他行为高电平,然后读取列值。若列值中有一位是低,则表明该行与低电平对应列的键被按下;否则,扫描下一行。

   方案二:反转法:先将所有行扫描线输出低电平,读列值。若列值有一位是低,则表明有键按下,读列值;然后所有列扫描线输出低电平,再读行值。根据读到的值组合就可以查表得到的键码。此设计中我们用反转法。

三.课程设计简述及整体方框图

 3.1  方案

  按照设计要求,提出方案 。此方案首先通过键盘得到数据,并通过程序对数据进行处理,最后通过数码管显示出来。结构框图如图1

                            图(1)

3.2、硬件电路设计

简易数字计算器系统硬件设计主要包括:键盘电路,显示电路以及其他辅助电路。下面分别进行设计。

3.2.1主控电路设计

STCC52具有如下特点:40个引脚(引脚图如图2所示),4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。 此外STCC52RC设计和配置了振荡频率可为0Hz可通过软件设置省电模式。空闲模式下,CPU暂停工作,外中断系统可继续工作,掉电模式决结振荡器而保存RAM的数据,停止芯片其它功能盤至外中断激活戶硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。 

STCC52芯片引脚图如图(2)所示。

         

   

               图(2)STCC52芯片引脚图

3.2.2键盘电路设计

    计算器所需按键有:

    数字键:’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’

    功能键:‘+’,‘-’,‘=’‘c’(清零)  

共计16个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行和四列的8个公共端分别接P3.0~P3.7,这样扫描P3口就可以完成对矩阵键盘的扫描,通过对16个按键进行编码,从而得到键盘的口地址,对比P3口的扫描结果和各按键的地址,我们就可以得到是哪个键按下,从而完成键盘扫描的功能。

3.2.3数码管显示电路

                              

     图3  LED数码管

为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段。

       图4  LED数码管显示原理图

3.3软件设计简述

 3.3.1键盘扫描子程序设计

    要进行数据的计算就必须先进行数据的输入,也就必须确定按键输入的数值是什么,这就需要对键盘进行扫描,从而确定究竟是哪个键按下。

对于键盘的扫描,这里采用行列扫描的方法来完成对键盘的扫描。原理就是先确定按键在哪一行,接着再确定是哪一列,这样就可以知道是哪个按键被按下了。我是将P3口作为按键扫描口的,比如,先使行线输出全“0”,读列线,再使列线输出全为“0”,读行线。两次结果再相与,则得到一个值为键值。同理,每个按键都会有一个对应的十六进制值,我把它们列出来进行一一对应就行了,下面是扫描按键图。

                               

                      图5    扫描按键图

键扫程序的过程为:开始时,先判断是否有键闭合,无键闭合时,返回继续判断,有键闭合时,先去抖动,然后确定是否有键按下,若无键按下,则返回继续判断是否有键闭合,若有键按下,则判断键号,然后释放,若释放按键完毕,则返回,若没有释放按键,则返回继续释放。其流程图如图(6)所示。

  

                        

                        图(6)键扫程序流程图

3.3.2数码管显示电路

    采用2位数码管对计算数据和结果的显示,这里选取共阳数码管,利用NPN三极管对数码管进行驱动,为了节省I/O资源,采取动态显示的方法来显示计算数据及结果,动态扫描。

  为了实现数码管的动态显示,P0口输出显示值,通过P0口的二进制代码送到数码管进行显示。

P2口用来作为位选端,控制哪几位数码管进行显示。比如当P2.3为高电平时,其他位全给0,具体的在软件中会有说明。此时就将扫描的数据送给指定数码管显示。其流程图如图(7)所示。

  图(7)数码管显示流程图

3.3.3运算子程序设计

算术运算程序的过程为:先判断输入的运算符是+、-、=中的哪一个,若是+或-,则要判断运算结果是否溢出,溢出则显示错误信息,没溢出就显示运算结果,若是=,则直接显示运算结果。其流程图如图8所示。

    Y

    

N

     图8 算术运算程序设计流程图

3.4程序主框图

                    图9 系统工作总流程

四.仿真软件图

            

五.系统功能测试与整体指标

5.1 软件调试步骤

    1)打开软件后,在Project菜单中选择New Project命令,打开一个新项目。保存此项目,输入工程文件名后,并保存工程文件的目录。

2)为项目文件选择一个目标器件,即选择8051的类型。在Data base 列表框中选择“ATML C52”,确定。

3)上述设置好后,创建源程序文件并输入程序代码。输入好代码后点击“文件/保存”。

4)把源文件添加到项目中,用鼠标指在目标工作区的目标1,点击右键在弹出的菜单中选择添加文件到源代码组,在弹出的添加文件框中,选择需要添加到项目中的文件。

5)开始编译,对项目文件进行编译。若没有错误后进行硬件调试。

5.2 程序调试步骤

程序调试应一个模块一个模块地进行,首先单独调试各功能子程序,检查程序是否能够实现预期的功能,接口电路的控制是否正常等;最后逐步将各子程序连接起来进行总调试。故调试步骤如下:

  1)矩阵4*4键盘的调试

键盘程序是整个程序的基础,我们必须保证其正确。调试方法:先把程序下载到单片机,让数码管显示,在有键按下时显示的是否为设定的值。

2)数码管程序调试

     正确的显示数值是整个程序的关键。调试方法:先把程序下载到单片机,让数码管显示,是否正确的显示数值。

5.3 测试结果

实例测试:将写入程序的单片机插入实验板插座内,程序正确的有0~9数值的显示和正常的四则运算以及判断错误、溢出。

六、总结与思考及致谢

电子设计正在当今社会发挥越来越重要的作用,其采用的软硬件结合技术也逐渐成熟,该模拟系统正是采用软硬相结合的方法实现的。我的题目是简易计算器的设计,对于我们这些实践中的新手来说,这是一次考验。怎样才能找到课堂所学与实际应用的最佳结合点?怎样让自己的业余更接近专业?怎样让自己的计划更具有序性,而不会忙无一用?这都是我们所要考虑和努力的。

通过这次课程设计,最大的一点体会是单片机学的不够扎实,不会的很多啊,当然这次的课程设计做计算器程序用的是汇编,我们互相学习,到处找资料看,问同学,所以我们的软件主程序才能编译成功,系统才能调试出结果。很感谢那些热心教导我的同学和指导我的老师。在其中,很明显我们的计算器处理数据及显示存在太大的局限性,我觉得主要还是我对程序中的运算模块理解不深,这点仍需大大加强。

在此次课程设计中,首先我要感谢王陈宁老师和郭乐老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。

其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商的难题。同时也感谢学院为我提供良好的做课程设计的环境。

最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学!

附录主程序:

   YJ EQU 50H    ;结果放

   YJ1 EQU 51H    ;中间结果存放

   GONG EQU 52H    ;功能键存放

ORG 0000H

LJMP START

ORG 0100H                        

START:MOV R3,#0   ;初始化显示为空

      MOV GONG,#0;功能键清空

      MOV 34H,#00H

      MOV 33H,#00H

LOOP1:LCALL DISP   ;调显示子序

LOOP2:LCALL TKEY;判断有无按键

      JZ LOOP2

      LCALL KEY;读键

      INC R3  ;KEY返回,按键次数自加1

      CJNE A,#0,NEXT1  ;判断是否为数字键

      LJMP E1           ;转数字键处理

NEXT1:CJNE A,#1,NEXT2

       LJMP E1

NEXT2:CJNE A,#2,NEXT3

       LJMP E1

NEXT3:CJNE A,#3,NEXT4

       LJMP E1

NEXT4:CJNE A,#4,NEXT5

       LJMP E1

NEXT5:CJNE A,#5,NEXT6

       LJMP E1

NEXT6:CJNE A,#6,NEXT7

       LJMP E1

NEXT7:CJNE A,#7,NEXT8

       LJMP E1

NEXT8:CJNE A,#8,NEXT9

       LJMP E1

NEXT9:CJNE A,#9,NEXT10

       LJMP E1

NEXT10:CJNE A,#10,NEXT11   ;判断是否为功能键

        LJMP E2       ;转功能键处理

NEXT11:CJNE A,#11,NEXT12

        LJMP E2

NEXT12:CJNE A,#12,NEXT13

        LJMP E2

NEXT13:LJMP E3             ;判断是否为清除键

E1:CJNE R3,#1,N1    ;判断第几次按键

   LJMP E11         ;为第一个数字

N1:CJNE R3,#2,N2    ;

   LJMP E12            ;为第二个数字

N2:LJMP E3            ;第三个数字转溢出

E11: MOV R4,A     ;输入值暂存R4

    MOV 34H,A     ;输入值送显示缓存

    MOV 33H,#00H

    LJMP LOOP1     ;等待再次输入

E12:MOV R7,A          ;个位数暂存R7

    MOV B,#10

    MOV A,R4

    MUL AB          ;十位数

    ADD A,R7

    MOV R4,A      ;输入值存R4

    MOV 33H,34H      ;输入值送显示缓存

    MOV 34H,R7

    LJMP LOOP1

E3: MOV R3,#0       ; 按键次数清0

    MOV R4,#0       ; 输入值清0

    MOV YJ,#0       ; 计算结果清0

    MOV GONG,#0       ; 功能键设为0

    MOV 34H,#00H   ; 显示清空

    MOV 33H,#00H

    LJMP LOOP1

E2:MOV 34H,#00H

   MOV 33H,#00H

    MOV R0,GONG  ;与上次功能键交换

    MOV GONG,A

    MOV A,R0

    CJNE A,#10,N21  ;判断功能键

    LJMP JIA        ;“+”

N21:CJNE A,#11,N22  

    LJMP JIAN       ;“-”

N22:CJNE A,#0,N23

    LJMP FIRST      ;首次按功能键即A=#0

N23:LJMP DENG       ;“=”

N4:LJMP E3

FIRST:MOV YJ,R4        ;输入值送结果

      MOV R3,#0        ;按键次数清0

      LJMP DISP1    ;结果处理

JIA:MOV A,YJ        ;上次结果送累加器

    ADD A,R4        ;上次结果加输入值

    JB CY,N4        ;溢出

    MOV YJ,A        ;存本次结果

    MOV R3,#0        ;按键次数清0             

    LJMP DISP1

JIAN:MOV A,YJ    ;上次结果送累加器

    SUBB A,R4        ;上次结果减输入值

    JB CY,N4        ;负数溢出

    MOV YJ,A        

    MOV R3,#0    ;按键次数清零                 

    LJMP DISP1

DENG:MOV R3,#0;

     LJMP DISP1

DISP1: MOV B,#10

       MOV A,YJ      ;结果送累加器

       DIV AB       ;结果除10

       MOV YJ1,A   ;暂存商

       MOV A,B     ;取个位数

       MOV 34H,A   ;个位数送显示缓存

       MOV A,YJ1

       JZ DISP11;结果是否为一位数

       MOV 33H,A   ;十位数送显示缓存

DISP11:LJMP LOOP1

DISP: MOV R0,#34H;待显缓冲个位地址

DIR1: MOV DPTR,#LEDCA

      MOV A,@R0

      MOVC A,@A+DPTR

      MOV P0,A

      CJNE R0,#34H,DIR2

      SETB P2.0

      LCALL DELAY10MS

      CLR P2.0

      DEC R0

      SJMP DIR1

DIR2:SETB P2.1

     LCALL DELAY10MS

     CLR P2.1

     RET

TKEY:ACALL DISP

        MOV P3,#0FH;读入键状态

        MOV A,P3

        CPL A

        ANL A,#0FH;高四位不用

        RET

   KEY:  MOV R6,#10

         ACALL DELAY10MS

         MOV P3,#0FH

         MOV A,P3

         CJNE A,#0FH,K2

         LJMP LOOP1

      K2:MOV B,A

         MOV P3,#0EFH

         MOV A,P3

         CJNE A,#0EFH,KEY3

         MOV P3,#0DFH

         MOV A,P3

         CJNE A,#0DFH,KEY3

         MOV P3,#0BFH

         MOV A,P3

         CJNE A,#0BFH,KEY3

         MOV P3,#07FH

         MOV A,P3

         CJNE A,#07FH,KEY3

         LJMP LOOP1

    

    KEY3:ANL A,#0F0H

         ORL B,A

         MOV R1,#16

         MOV R2,#0

         MOV DPTR,#KTAB

    KEY4:MOV A,R2

         MOVC A,@A+DPTR

         CJNE A,B,KEY6

         MOV P3,#0FH

    KEY5:MOV A,P3

         CJNE A,#0FH,KEY5

         MOV R6,#10

         ACALL DELAY10MS

         MOV A,R2

         RET

    KEY6:INC R2

         DJNZ R1,KEY4

         AJMP LOOP1     

         

 

     DELAY10MS: MOV  R6,#10

            DL:MOV  R7,#250

               DJNZ R7,$

               DJNZ R6,DL

               RET

    

       KTAB:DB 0EEH,0DEH,0BEH,7EH

               DB 0EDH,0DDH,0BDH,7DH

               DB 0EBH,0DBH,0BBH,7BH

               DB 0E7H,0D7H,0B7H,77H                  

                                         //  按键键值表

     

         LEDCA:DB 0C0H,0F9H,0A4H,0B0H

               DB 99H,92H,82H,0F8H

               DB 80H,90H,88H,83H

               DB 0C6H,0A1H,86H,8EH           //共阳LED显示码表

               END

文档

单片机课程设计—简易计算器

物理与电气工程学院课程设计报告设计名称:简易计算器院部:物理与电气工程学院专业班级:12级电信三班*******080212092刘慧080212096吴阳慧080212101*******完成时间:2014年6月8日评阅意见:评阅教师日期摘要单片机课程设计是单片机原理课程的实践性环节。是在我们学习了《单片机原理》等课程的基础上进行的综合性训练,我们组这次训练的课题是基于单片机简易计算器,能够进行多位简单的加减运算,同时它能支持2位整数运算。它主要由STCC52单片机、数码管,键盘等模块组
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top