找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6767|回复: 2
收起左侧

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

[复制链接]
ID:268836 发表于 2017-12-29 13:52 | 显示全部楼层 |阅读模式
单片机课程设计
题目:  简易计算器的设计






院 系:信息工程学院
班  级: 自动化1  
姓  名:黄浩
学  号:           2010550123   
指导教师                 


目录

1 设计说明.... 1
1.1 设计内容.... 1
1.2 设计要求.... 1
1.3设备及工作环境.... 1
2 硬件方案.... 1
2.1 设计思路.... 1
2.2 原理电路图.... 2
2.3 主要元件功能说明.... 2
2.4 硬件工作原理阐述.... 7
3 软件方案.... 8
3.1 分析论证.... 8
3.2 程序流程图.... 9
3.3 程序清单.... 10
4 调试过程及结果分析..... 16
5 设计总结..... 16
参考文献..... 16


1.设计说明
1.1设计内容
本次的设计是利用单片机设计简单的计算器,本设计利用单片机的I/O接口设计2×4键盘,8个键依次对应0~3、“+”、“-”、“=”和清除键。通过检测不同数字键、功能键的按下,可以进行小于255的数的加减乘除运算,并可连续运算。当键入值大于255时,将自动清零,可以重新输入。对应每一个数字键按下的同时,LED显示按下键的值,并显示最后的运算结果。
1.2设计要求
要求能实现小于255的数的加减运算,采用2×4键盘,8个键依次对应0~3、“+”、“-”、“=”和清除键。根据输入键的按下实现不同的功能,最终结果通过LED显示。
1.3设备及工作环境
8051单片机一片、七段四显示数码管一个、排阻一个、导线若干、12MHz晶振一个、30pF电容两个
所有设备均工作在常温下(0℃~70℃)
2.硬件方案
2.1设计思路
本设计利用单片机的I/O接口设计2×4键盘,两行四列分别由单片机的P2.4\P2.5及P2.0-P2.3输入输出数据。采用P0口和P1.0-P1.3输出数据到数码管显示由键盘输入的数据及最终计算结果。
2.2原理电路图
图2.1 硬件电路图
2.3主要元件功能说明
2.3.1单片机概述
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
单片机经过1、2、3,3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引脚的多功能化,以及低电压低功耗。
2.3.2芯片简介
MSC-51芯片简介:
8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
数据存储器(RAM):
8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。   
定时/计数器(ROM)
8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
并行输入输出(I/O)口:
8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。
全双工串行口:
8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
中断系统:
8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
时钟电路:
8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。
图2.2 单片机结构图
MCS-51的引脚说明:
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,下图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:如图2.3
图2.3单片机引脚图
Pin9:RESET/Vpd复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。
8051的复位方式可以是自动复位,也可以是手动复位,见图2.4。此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。
                 
图2.4单片机复位电路
Pin30:ALE/当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。
如果单片机是EPROM,在编程其间,将用于输入编程脉冲。
Pin29:当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。
Pin31:EA/Vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。显然,对内部无程序存储器的8031,EA端必须接地。
在编程时,EA/Vpp脚还需加上21V的编程电压。
2.3.3相关知识
  数码管显示
在本任务中用4位数码管显示当前数值的千,百,十,个,由于数码管个数多,如采用静态显示方式,则占用单片机的I/O口线太多,如果用定时器/计数器的串行移位寄存器工作方式及外接串入并出移位寄存器74LS164的方式,则电路复杂。所以,在数码管个数较多时,常采用动态显示方式。
如图2.1所示为单片机应用系统中的一种数码管动态显示电路图,4位数码管的相同段并联在一起,由一个8位I/O(P1口)输出字形码控制显示某一字形,每个数码管的公共端由另外一个I/O口(P0口)输出的字位码控制,即数码管显示的字形是由单片机I/O口输出的字形码确定,而哪个数码管点亮是由单片机I/O口输出的字位码确定的。4个数码管分时轮流循环点亮,在同一时刻只有1个数码管点亮,但由于数码管具有余辉特性及人眼具有视觉暂留特性,所以适当地选取循环扫描频率,看上去所有数码管是同时点亮的,察觉不出闪烁现象。动态显示方式所接数码管不能太多,否则会因每个数码管所分配的实际导通时间太少,使得数码管的亮度不足。在本任务中,为了简便,字形码和字位码都没由加驱动电路,在实际应用中应加驱动电路。数码管有共阴极和共阳极两种,对于共阳数码管,字形驱动输出0有效,字位驱动输出1有效;而对于共阴数码管则相反,即:字形驱动输出1有效,字位驱动输出0有效。
矩阵按键
键盘是单片机系统中最常用的人机对话输入设备,用户通过键盘向单片机输入数据或指令。键盘控制程序需完成的任务有:监测是否有键按下,有键按下时,在无硬件去抖的动电路时,应用软件延时方法消除按键抖动影响;当有多个键同时按下时,只处理一个按键,不管一次按键持续多长时间,仅执行一次按键功能程序。
矩阵按键扫描程序是一种节省I/O口的方法,按键数目越多节省I/O口就越可观,思路:先判断某一列(行)是否有按键按下,再判断该行(列)是那一只键按下。但是,在程序的写法上,采用了最简单的方法,使得程序效率最高。本程序中,如果检测到某键按下了,就不再检测其它的按键,这完全能满足绝大多数需要,又能节省大量的CPU时间。
本键盘扫描程序的优点在于:不用专门的按键延时程序,提高了CPU效率,也不用中断来扫描键盘,节省了硬件资源。另外,本键盘扫描程序,每次扫描占用CPU时最短,不论有键按下或者无键按下都可以在很短的时间完成一次扫描。
2.4 硬件工作原理阐述
8051单片机的P2口作键盘口,其中P2.4-P2.5为键盘扫描输出线,P2.0-P2.3为键盘扫描输入线。键盘由2*4共8个按键组成,4个数字键(由0-3组成)3个运算符号(加减等于)组成,1个清除键(作用相当于整体复位)。4个数码管用于显示当前数值的千,百,十,个,采用动态显示方式,P1口接4个数码管的七段,P0口分别接4个数码管的公共端,P1口输出数码管的字形码,P0口输出数码管的字位码。
3.软件方案
3.1 分析论证
程序工作过程如下:
(1)首先赋予显示缓冲初始值‘00 00’,并把数据存储单元清零。
(2)主程序调用键盘扫描子程序,判断键值,是数字第一次直接赋予23H单元,如是第二次输入数字,则把第一次值乘十后与第二次值相加,结果存储到23H单元,并R4计数2次,表示已输入两位,扫描键值时就不再赋值和显示。等待运算符号的按下,按下等于号就直接计算并显示,如加减就R5加一并把R4清零,表示可以输入下一操作数,与第一次相同,并等待等于键按下。清零键则不管在任何情况下都清零,相当于软复位。
(3)在扫描完键盘后,调用数据显示转换子程序把值转换为七段码。
(4)调用数码管动态显示子程序,显示数值,重新循环
3.2 程序流程图
3.3 程序清单
3.3.1存储单元分配
30H单元:数值个位显示单元;31H单元:数值十位显示单元;32H单元:数值百位显示单元;33H单元:数值千位显示单元;23H单元:第一操作数存储单元;24H单元:第二操作数存储单元;25H单元:键值暂存单元;27H单元:清除键状态;34H-37H单元:结果数据转换暂存单元;38H-39H单元:结果高低8位暂存单元;R5单元:操作数计数单元;R4单元:操作数数值位数计数单元;R3单元:运算符号存储单元。
3.3.2主程序设计
主程序进行程序中用到的一些存储单元的初始化,数值显示和2*4键盘扫描。首先,进行存储单元初始化,给数码管显示单元30H-33H赋予“0000”字形数据,将数值计数单元,存储单元,赋予初值零。之后,调用键盘扫描子程序,和数码管显示数据转换程序,数码管动态显示子程序。主程序不断进行键盘扫描,数码管显示数据转换子程序和动态显示子程序。
3.3.3数码管显示数据转换子程序CONV
由于数值单元存放的是二进制数,而用户熟悉的是十进制数,所以应将数值单元中的二进制转换为十进制数,即BCD码。要通过数码管显示出当前数值,还必须将BCD码进一步转换为七段码,转换的最终结果数据存放于显示缓冲区30H-33H单元中,其中30H单元存放数值的个位七段码,31H单元存放数值的十位七段码,32H单元存放数值的百位七段码,33H单元存放数值的千位七段码。
3.3.4数码管动态显示子程序
本任务由P1口输出字形码,P0口输出字位码。先将存放于30H单元的数值个位七段码由P1口输出,同时P0口输出使数值个位显示数码管点亮的字位码。由于采用的是共阳数码管,所以只有该位数码管对应的P0.0为1,其他位P0.1-P0.3为0,点亮延时10MS。然后P1口输出数值十位七段码,P0.1为1,数值十位数码管点亮,延时10MS。接着P1口输出数值百位七段码,P0.2为1,数值百位数码管点亮,延时10MS。最后P1口输出数值千位七段码,P0.3为1,数值千位数码管点亮,延时10MS。
程序源代码:
DISPBUF EQU 30H                                   ;显示数据存储位置        
           ORG 0000H                            ;主程序的入口地址
START:MOV DISPBUF,#0C0H    ;4个数码管显示"0000"字形数据   
           MOV DISPBUF+1,#0C0H               
           MOV DISPBUF+2,#0C0H
           MOV DISPBUF+3,#0C0H
           MOV 37H,#00H                          ;数值初始化
           MOV 27H,#00H
           MOV 26H,#00H
           MOV 25H,#00H
           MOV 24H,#00H
           MOV 23H,#00H
           MOV R3,#00H
           MOV R5,#00H
           MOV R4,#00H
LOOP:   LCALLKEY                           ;调用键盘扫描子程序
           MOV R6,27H
           CJNE R6,#00H,START      ;清除键判断
           MOV R6,26H
           CJNE R6,#00H,FA         ;显示数据转换子程序选择
           LCALL CONV            ;调用数码管显示数据转换子程序
FA:         LCALL DISPSCAN           ;调用数码管动态显示子程序
           SJMP LOOP
KEY:     MOVP2,#0FH                   ;键盘扫描子程序    ;低4位送1
           MOV A,P2                         ;行输入
           ANL A,#0FH      
           CJNE A,#0FH,K10          ;有按下跳转
           RET
K10:      JBP2.0,K20                            ;第一列
K11:      MOVP2,#0EFH                     ;一行一列
          JB P2.0,K12
          CJNE R5,#00H,L1
          MOV R4,#00H
          INC R5
          MOV R3,#1H
L1:        LJMP CEND
K12:     MOVP2,#0DFH
          JB P2.0,K13
         CJNE R5,#00H,L2
         MOV R4,#00H
         INC R5
         MOV R3,#2H
L2:       LJMP CEND
KIL:     LJMPKEND
L4:      LJMPCEND
K20:    JBP2.1,K30               ;第二列
K21:    MOVP2,#0EFH
        JB P2.1,K22
        LJMP DYU
K22:    MOV P2,#0DFH
        JB P2.1,K23
        MOV 25H,#3H
        LJMP OPR
CCTV:LJMP KEND
K30:    JBP2.2,K40                    ;第三列
K31:    MOVP2,#0EFH
        JB P2.2,K32
        MOV 25H,#0H
        LJMP OPR
K32:    MOV P2,#0DFH
        JB P2.2,K33
        MOV 25H,#2H
        LJMP OPR
K40:    JBP2.3,KEND                               ;第四列
K41:    MOVP2,#0EFH
        JB P2.3,K42
        INC 27H
        LJMP KEND
K42:    MOV P2,#0DFH
        JB P2.3,K43
        MOV 25H,#1H
        LJMP OPR
OPR:      INC R4                                 ;键值存储
        CJNE R5,#00H,CHANG
        CJNER4,#2H,KBK
ZHI:        MOV A,20H
        MOV B,#0AH
        MUL AB
        MOV20H,25H
        ADD A,20H
        CJNER5,#00H,CZH
        MOV 23H,A
        LJMP KEND
CZH: MOV 24H,A
        LJMP KEND
KEND:MOV P2,#0FH
        MOV A,P2
        ANL A,#0FH
        CJNEA,#0FH,KEND
        RET
CHANG: CJNE R4,#2H,HONG
        AJMP ZHI
HONG:JNC CEND
        INC R5
        MOV 20H,25H
        MOV24H,25H
        LJMP CEND
KBK:  JNC CEND
        MOV 20H,25H
        MOV 23H,25H
        LJMP CEND
DYU:    MOV R5,#00H                   ;结果计算
        MOV R4,#00H
        MOV25H,#00H
        CJNER3,#1H,S
        MOV A,23H
        ADD A,24H
        MOV 23H,A
        SJMP CEND
S:         CJNE R3,#2H,S1
        CLR C
        MOV A,23H
        CJNEA,#00H,JIANFA
        MOV23H,#0EH
        SJMP CEND
JIANFA:SUBB A,24H
        MOV 23H,A
        SJMP CEND
S1:       CJNE R3,#3H,S2
        MOV A,23H
        MOV B,24H
        MOV A,23H
        MUL AB
        MOV R6,B
        CJNER6,#00H,CHENG
        MOV 23H,A
        SJMP CEND
S2:       CJNE R3,#4,CEND
        MOV A,24H
        CJNE A,#00H,ZY
        MOVA,#00H
        SJMP CEND
ZY:      MOV A,23H
        MOV B,24H
        DIV AB
        MOV 23H,A
CEND:MOV P2,#0FH
        MOV A,P2
        ANL A,#0FH
        CJNEA,#0FH,CEND
CONV:  CJNE R5,#02H,BEI                      ;数码管显示数据转换子程序
        MOV A,24H
        AJMP JING
BEI:     MOV A,23H
JING:   MOVB,#64H
        DIV AB
        MOV DPTR,#TABLE
        MOVCA,@A+DPTR
        MOVDISPBUF+2,A
        MOV A,B
        MOVB,#0AH
        DIV AB
        MOVCA,@A+DPTR
        MOVDISPBUF+1,A
        MOV A,B
        MOVCA,@A+DPTR
        MOVDISPBUF,A
        RET
DISPSCAN:MOV R0,#DISPBUF            ;数码管动态显示子程序
        MOV R2,#4H
        MOV A,#1H
SC:      PUSH ACC
        MOV A,@R0
        MOV P1,A
        POP ACC
        MOV P0,A
        LCALLDELAY1
        RL A
        INC R0
        DJNZR2,SC
        MOVP0,#1H
        RET
DEL12: MOV R6,#1EH
DEL2: MOV R7,#64H
DEL1: DJNZ R7,DEL1
        DJNZ R6,DEL2
        RET
DELAY1:MOV R6,#70                         ;延时程序
D2:      MOV R7,#100
        DJNZ R7,$
        DJNZ R6,D2
        RET
TABLE:DB0C0H,0F9H,0A4H,0B0H,99H    ;------字符表------
          DB92H,82H,0F8H,80H,90H
          DB88H,83H,0C6H,0A1H,86H
          END
4.调试过程及结果分析
1.首先赋予显示缓冲初始值‘00 00’,并把数据存储单元清零。
2.主程序调用键盘扫描子程序,判断键值,是数字第一次直接赋予23H单元,如是第二次输入数字,则把第一次值乘十后与第二次值相加,结果存储到23H单元,并R4计数2次,表示已输入两位,扫描键值时就不再赋值和显示。等待运算符号的按下,按下等于号就直接计算并显示,如加减就R5加一并把R4清零,表示可以输入下一操作数,与第一次相同,并等待等于键按下。清零键则不管在任何情况下都清零,相当于软复位。
3.在扫描完键盘后,调用数据显示转换子程序把值转换为七段码。
4.调用数码管动态显示子程序,显示数值,重新循环。
参 考 文 献
[1] 李华.单片机原理及应用[M].兰州:兰州大学出版社,2001
[2] 卓越科技.MCS-51单片机原理与应用实例[M].北京:电子工业出版,2008
回复

使用道具 举报

ID:411717 发表于 2018-10-22 09:40 | 显示全部楼层
电路图有吗
回复

使用道具 举报

ID:272432 发表于 2018-11-19 23:16 | 显示全部楼层
程序不完整吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表