基于单片机计算器系统设计报告Word格式文档下载.docx
《基于单片机计算器系统设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于单片机计算器系统设计报告Word格式文档下载.docx(34页珍藏版)》请在冰豆网上搜索。
根据所学知识,自行设计一个计算器,要求自行设计供电电源,该计算器能够实现加减乘除四则混合运算,能够实现连续计算。
1.1.2功能介绍
(1)该计算器能够实现6位数以内的运算(其最大值为99999)。
(2)该计算器不能加减乘除以外的其他运算。
(3)该计算器只能进行自然数的运算。
1.2总体设计方案
1.2.1总体设计思路
本设计主要采用以下基本模块来实现,控制器模块,输入模块,输出模块和电源模块。
通过对控制器进行编程。
使其对输入模块的信号进行处理计算,然后通过输出模块反馈给使用者以计算结果。
1.2.2方案论证与比较
(1)控制部分的设计方案论证与选择
根据设计要求,控制器主要用于红外信号的接收和辨认、控制步进电机的动作,控制显示步进电机的转速等。
对于控制器的选择有以下二种方案。
方案一:
采用计算器专用芯片实现。
用计算器专用芯片进行设计并编程实现。
这种设计方案计算效率高、速度快、而且成本也相对较低,是厂家做计算器的最佳方案。
但是本人对计算器专用芯片掌握的不够,还不足以实现设计计算器,所以这个方案不可去。
方案二、用单片机实现。
由于单片机集成了运算器电路、控制电路、存储器、中断系统、定时器/计数器以及输入/输出口电路等,所以用单片机设计控制电路省去了很多分立元器件。
由于单片机是可编程芯片,并且它可以运用C语言编写,对于一些复杂的计算功能,可以调用C语言库函数。
使编写程序变得非常简单。
所以该课题用单片机实现,不仅功能易于实现,而且精确度高,稳定性好,抗干扰能力强。
并且由于其成本低、体积小、技术成熟和功耗小等优点,且技术比较成熟。
性价比也相当高。
更重要的是本人经过几年的学习,对单片机已有深刻的理解,并且可以灵活运用。
综上所述,并通过各个方面综合比较为达到最佳效果。
我们采用方案二利用
单片机控制器。
(2)显示电路的设计方案论证与选择
数码管显示方案。
数码管显示使用两个四位一体动态数码管显示方案,此设计电路如图1-1所示。
采用动态数码管显示,具有程序简单,对外界环境要求低,易于维护,同时其精度比较高,精确可靠,操作简单。
显示直观的特点。
但只能显示数字和一些代码,不能显示汉字及一些常用的符号,且硬件设计比较复杂。
图1-1两个四位一体数码电路图
方案二:
采用7SEG-MPX6-CA-BLUE显示方案。
7SEG-MPX6-CA-BLUE显示模块,可显示输入的数字并对其进行计算。
供电电源为3.3V~+5V(内置升压电路,无需负压),能采用并行和串行两种通信方式。
综上所叙,7SEG-MPX6-CA-BLUE的显示效果好、功能齐全,所以我们选用7SEG-MPX6-CA-BLUE显示。
其与单片机的接口电路如图1-2所示。
图1-27SEG-MPX6-CA-BLUE与单片机的接口电路
(3)单片机电源部分的设计方案论证与选择
由于本次设计中单片机工作电源为5V,所以需要稳压,对于5V电源这里有以下两种方案。
用固定式三端稳压器7805。
如图1-5,7805系列稳压器输出固定的正电压5V,输入端接电容C1可以进一步滤除纹波,输出端接电容C2能改变负载的瞬态影响,使电路稳定工作C1、C2最好采用漏电流小的钽电容。
如果采用电解电容,则电容要比图中数值增加10倍。
图1-3固定式三端稳压器
用7805加一些外围器件。
虽然7805三端集成稳压管内部有过流、过热和安全区的保护电路,但其输出仍有可能发生过压的危险。
因此本电路加了过压保护电路,电路如图1-4所示,该电路由稳压管VD3、电阻R3和晶闸管VS组成。
另外由于7805的最大输出电流为1.5A,可以通过在7805的1脚与VT1的基极相连,7805的2脚与VT1的集电极相连,这样就可输出1.6A~2A的电流。
如需更大的电流,可再并联几个大功率三极管。
图1-4可扩流过压保护5V稳压电源
综上所述,方案一电路简单,而且已符合本次设计的要求,再加上第二种方案所用元件较多,性能价格比不高,所以我们选择方案一。
(4)键盘设计方案与选择
独立键盘。
独立键盘为一端接地,另一端接I/O口,并且要接上拉电阻。
这种键盘的硬件都很容易实现,但每一个按键就要用一个I/O口,但是寻求设计方便,适合本次设计,其电路图如下所示。
图1-5独立键盘电路图
4*4矩阵式键盘。
其电路图如图图1-5所示,这种键盘的硬件简单,使用的I/O口也不多。
其电路图如图
图1-64*4矩阵式键盘电路图
1.2.3系统组成
经过方案比较与论证,最终确定的系统组成框图如图1-7所示。
其中单片机作为主控设备对采集输入信号后并进行处理,最后通过输出设备输出给使用者,该系统的结构框图如图。
图1-7系统组成方框图
2重要器件的知识介绍
2.1单片机的知识介绍
由于ATMEL公司生产的AT89C51型单片机是即便于下载又好用,而且能够满足本设计的要求。
所以我选择AT89C51型单片机。
2.1.1单片机的主要性能
(1)与MCS-51单片机产品兼容
(2)8K节在系统可编程Flash存储器
(3)1000次擦写周期
(4)全静态操作:
0Hz-33Hz
(5)三级加密程序存储器
(6)32个可编程I\O口线
(7)三个16位定时器\计数器
(8)八个中断源
(9)全双工UART串行通道
(10)低功耗空闲和掉电模式
(11)掉电后中断可唤醒
(12)看门狗定时器
(13)双数据指针
(14)掉电标识符
2.1.2单片机的功能特性描叙
AT89C51是一种低功耗,高性能CMO58位微控制器,具有8K在系统可编程Flash存储器。
使用ATMEL公司高密度非易使性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,迹适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89C51具有以下标准功能:
8K字节Flash、256字节RAM、32位I\O口线、看门狗定时器、2个数据指针、三个16位定时器\计数器、一个6向量2级中断结构、全双工串行口、片内晶振及时钟电路。
另外,AT89C51可降至0Hz静态逻辑操作,支持2钟软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM定时器\计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
2.1.3单片机的内部结构方框图及芯片引脚图
图2-1单片机的内部结构方框图
2.1.4单片机各引脚功能说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行
校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如图表2.1。
表2.1AT89C51的一些特殊功能口
管脚
备选功能
P3.0RXD
(串行输入口)
P3.1TXD
(串行输出口)
P3.2/INT0
(外部中断0)
P3.3/INT1
(外部中断1)
P3.4T0
(记时器0外部输入)
P3.5T1
(记时器1外部输入)
P3.6/WR
(外部数据存储器写选通)
P3.7/RD
(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;
当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2.1.5单片机时钟电路
时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。
在MCS-51芯片内部有一个高增益反相放大器,其输入端为芯片引脚X1,输出端为引脚X2,在芯片的外部跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。
此电路采用12MHz的石英晶体。
时钟电路如下:
图2-2时钟电路
2.1.6单片机复位电路
复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
除了进入系统的正常初始化之外,当由于程序运行出错或操作错误是系统处于死锁状态时,为摆脱困境,也需要按复位键以重新启动。
RST引脚是单片机复位信号的输入端,复位信号是高电平有效,其有效时间应持续24个振荡周期(即2个机器周期)以上,若使用频率为12MHz的晶振,则复位信号持续时间应超过4
s才能完成复位操作。
复位操作有上电自动复位和按键手动复位两种方式。
上电自动复位是通过外部复位电路的电容充电来实现的。
按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的。
在本设计中采用了按键电平复位方式,其复位电路如下图2-3。
图2-3复位电路
2.1.7计算器的使用说明
单片机下载口电路本程序有LCD动态显示,键盘输入显示功能,以及1s计数功能。
共有2种工作状态。
程序启动时默认为计算器状态。
(1)计算器状态下:
A:
按“0”~“9”,显示相应数字;
B:
按“ON/C”,切换到计时模式;
C:
按其他键,显示两位数,高位是行号,低位是列号。
(2)在计时器模式下:
A:
在停止状态按“=”则切换到计算器模式,按“ON/C”则开始计时;
在暂停状态,按“=”或“ON/C”则恢复计时;
在即计时状态,按“=”则暂停计时,按“ON/C”则停止计时,恢复到初始状态,计数为0.
相关显示代码:
报告代号显示含义
1:
-EOR-1被除数等于0;
2:
-EOR-2被减数小于减数;
3:
CHAG-1表明从计算器模式切换到计时模式;
4:
CHAG-0表明从计时器模式切换到计算器模式;
5:
-PAUSE暂停;
7:
-StoP-停止;
8:
OPPOSE切换到倒计时模式;
9:
-EOR-9超出可显示的最大值。
消息代码使用方法:
先给uc_ReportSymbol赋报告代号,再把b_LCDClean置1.
3程序流程图
主程序流程图
显示程序流程图
键扫程序流程图
致谢
该论文是对我这一学期单片机的综合考核。
在此论文设计过程中,我不仅较为系统的复习了以前学过的知识,而且又学习了许多新知识,使我的只是结构更加系统化,也更加完善。
同时,也提高了我独立分析问题、解决问题的能力。
在本文的选题、构思、写作和修改直至最终定稿的过程中,更是浸透了老师大量的心血,感激之情难以言表。
而且,在和老师的交流过程中,还学到了有用的知识,使我终身受益。
在此我谨向杜老师致以最诚挚的谢意。
参考文献
(1)李广弟《单片机原理及应用》北京航天航空大学出版社
(2)潘新民《微型计算机控制技术》电子工业出版社
(3)梅丽凤《单片机原理及接口技术》清华大学出版社
(4)李陪金《C语言程序设计案例教程》西安电子科技大学出版社
(5)戴佳《51单片机C语言应用程序设计实例精讲》电子工业出版社
(6)谭浩强《C程序设计》清华大学出版社
附录1系统原理图
附录2程序清单
/*--------------------------------------------------------------------------
AT89X51.H
HeaderfileforthelowvoltageFlashAtmelAT89C51andAT89LV51.
Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.
Allrightsreserved.
--------------------------------------------------------------------------*/
#ifndef__AT89X51_H__
#define__AT89X51_H__
/*------------------------------------------------
ByteRegisters
------------------------------------------------*/
sfrP0=0x80;
sfrSP=0x81;
sfrDPL=0x82;
sfrDPH=0x83;
sfrPCON=0x87;
sfrTCON=0x88;
sfrTMOD=0x89;
sfrTL0=0x8A;
sfrTL1=0x8B;
sfrTH0=0x8C;
sfrTH1=0x8D;
sfrP1=0x90;
sfrSCON=0x98;
sfrSBUF=0x99;
sfrP2=0xA0;
sfrIE=0xA8;
sfrP3=0xB0;
sfrIP=0xB8;
sfrPSW=0xD0;
sfrACC=0xE0;
sfrB=0xF0;
P0BitRegisters
sbitP0_0=0x80;
sbitP0_1=0x81;
sbitP0_2=0x82;
sbitP0_3=0x83;
sbitP0_4=0x84;
sbitP0_5=0x85;
sbitP0_6=0x86;
sbitP0_7=0x87;
PCONBitValues
#defineIDL_0x01
#defineSTOP_0x02
#definePD_0x02/*Alternatedefinition*/
#defineGF0_0x04
#defineGF1_0x08
#defineSMOD_0x80
TCONBitRegisters
sbitIT0=0x88;
sbitIE0=0x89;
sbitIT1=0x8A;
sbitIE1=0x8B;
sbitTR0=0x8C;
sbitTF0=0x8D;
sbitTR1=0x8E;
sbitTF1=0x8F;
TMODBitValues
#defineT0_M0_0x01
#defineT0_M1_0x02
#defineT0_CT_0x04
#defineT0_GATE_0x08
#defineT1_M0_0x10
#defineT1_M1_0x20
#defineT1_CT_0x40
#defineT1_GATE_0x80
#defineT1_MASK_0xF0
#defineT0_MASK_0x0F
P1BitRegisters
sbitP1_0=0x90;
sbitP1_1=0x91;
sbitP1_2=0x92;
sbitP1_3=0x93;
sbitP1_4=0x94;
sbitP1_5=0x95;
sbitP1_6=0x96;
sbitP1_7=0x97;
SCONBitRegisters
sbitRI=0x98;
sbitTI=0x99;
sbitRB8=0x9A;
sbitTB8=0x9B;
sbitREN=0x9C;
sbitSM2=0x9D;
sbitSM1=0x9E;
sbitSM0=0x9F;
P2BitRegisters
sbitP2_0=0xA0;
sbitP2_1=0xA1;
sbitP2_2=0xA2;
sbitP2_3=0xA3;
sbitP2_4=0xA4;
sbitP2_5=0xA5;
sbitP2_6=0xA6;
sbitP2_7=0xA7;
IEBitRegisters
sbitEX0=0xA8;
/*1=EnableExternalinterrupt0*/
sbitET0=0xA9;
/*1=EnableTimer0interrupt*/
sbitEX1=0xAA;
/*1=EnableExternalinterrupt1*/
sbitET1=0xAB;
/*1=EnableTimer1interrupt*/
sbitES=0