2022年单片机的计算器设计方案2.docx
精品学习资源3.1 硬件连接图 3-1 所示为简易运算器的电路原理图; P3 口用于键盘输入,接 4*4 矩阵键盘,键值与键盘的对应表如表 -所示, p0 口和 p2 口用于显示, p2 口用于显示数值的高位, po 口用于显示数值的低位;图 3-1 简易运算器电路原理图键值与功能对应表键值0123456789+-×/=ON/C欢迎下载精品学习资源功能0123456789+-×÷=清零表 3-13.2 运算器的软件设计#include<reg51.h>/头文件#define uint unsigned int / #define uchar unsigned charsbit lcden=P23; /定义引脚sbit rs=P24;sbit rw=P20;sbit busy=P07;char i,j,temp,num,num_1;long a,b,c;/a,第一个数 b,其次个数 c,得数float a_c,b_c;uchar flag,fuhao;/flag 表示是否有符号键按下, fuhao 表征按下的是哪个符号uchar code table= 7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0;uchar code table1=欢迎下载精品学习资源7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30;void delayuchar z> / 推迟函数uchar y;forz;z>0;z->fory=0;y<110;y+>;void check> /判定忙或闲暇doP0=0xFF;rs=0;/指令rw=1;/读 lcden=0;/禁止读写delay1>; /等待,液晶显示器处理数据lcden=1;/答应读写whilebusy=1>; /判定是否为闲暇, 1 为忙, 0 为闲暇void write_comuchar com> /写指令函数欢迎下载精品学习资源P0=com; /com指令付给 P0 口rs=0;rw=0;lcden=0;check>;lcden=1;void write_dateuchar date> / 写数据函数P0=date;rs=1; rw=0;lcden=0;check>;lcden=1;void init> /初始化num=-1;lcden=1; /使能信号为高电平write_com0x38>; /8 位, 2 行欢迎下载精品学习资源write_com0x0c>; /显示开,光标关,不闪耀 */ write_com0x06>; /增量方式不移位 显竟獗暌贫 柚. write_com0x80>; /检测忙信号write_com0x01>; /显示开,光标关,不闪耀num_1=0;i=0;j=0;a=0;/第一个参与运算的数b=0;/其次个参与运算的数c=0;flag=0; /flag 表示是否有符号键按下,fuhao=0; / fuhao 表征按下的是哪个符号void keyscan> /键盘扫描程序P3=0xfe;ifP3.=0xfe>delay20>; 推迟 20ms ifP3.=0xfe>temp=P3&0xf0;switchtemp>欢迎下载精品学习资源case 0xe0:num=0; break;case 0xd0:num=1; break;case 0xb0:num=2; break;case 0x70:num=3;break;whileP3.=0xfe>;ifnum=0|num=1|num=2>/假如按下的是 '7','8' 或'9ifj.=0>write_com0x01>;j=0;ifflag=0>/没有按过符号键a=a*10+tablenum;else/如/果按过符号键欢迎下载精品学习资源b=b*10+tablenum;else/如/果按下的是 '/'flag=1;fuhao=4;/4 表示除号已按i=table1num;write_date0x30+i>;P3=0xfd;ifP3.=0xfd>delay5>;ifP3.=0xfd>temp=P3&0xf0;switchtemp>case 0xe0:num=4; break;欢迎下载精品学习资源case 0xd0:num=5; break;case 0xb0:num=6; break;case 0x70:num=7; break;whileP3.=0xfd>;ifnum=4|num=5|num=6&&num.=7>/ 假如按下的是 '4','5' 或'6'ifj.=0>write_com0x01>;j=0;ifflag=0>/没有按过符号键a=a*10+tablenum;else/如/果按过符号键欢迎下载精品学习资源b=b*10+tablenum;else/如/果按下的是 '/'flag=1;fuhao=3;/3 表示乘号已按i=table1num;write_date0x30+i>;P3=0xfb;ifP3.=0xfb>delay5>;ifP3.=0xfb>temp=P3&0xf0;switchtemp>case 0xe0:num=8; break;欢迎下载精品学习资源case 0xd0:num=9; break;case 0xb0:num=10; break;case 0x70:num=11; break;whileP3.=0xfb>;ifnum=8|num=9|num=10>/假如按下的是 '1','2' 或'3'ifj.=0>write_com0x01>;j=0;ifflag=0>/没有按过符号键a=a*10+tablenum;else/如/果按过符号键欢迎下载精品学习资源b=b*10+tablenum;else ifnum=11>/假如按下的是 '-'flag=1;fuhao=2;/2 表示减号已按i=table1num;write_date0x30+i>;P3=0xf7;ifP3.=0xf7>delay5>;ifP3.=0xf7>temp=P3&0xf0;switchtemp>case 0xe0:num=12; break;欢迎下载精品学习资源case 0xd0:num=13; break;case 0xb0:num=14; break;case 0x70:num=15; break;whileP3.=0xf7>;switchnum>case 12:write_com0x01>;a=0;b=0;flag=0;fuhao=0;/按下的是 "清零"break;case 13:/按/ 下的是 "0"ifflag=0>/没有按过符号键a=a*10;write_date0x30>;P1=0;欢迎下载精品学习资源else ifflag=1>/假如按过符号键b=b*10;write_date0x30>;break; case 14:j=1;iffuhao=1>write_com0x80+0x4f>;/按下等于键,光标前进至其次行最终一个显示处write_com0x04>;/设置从后住前写数据,每写完一个数据,光标后退一格c=a+b;whilec.=0>write_date0x30+c%10>;c=c/10;write_date0x3d>;/再写"=" a=0;b=0;flag=0;fuhao=0;else iffuhao=2>write_com0x80+0x4f>;/光标前进至其次行最终一个显示处write_com0x04>;/设置从后住前写数据,每写完一个数据,光标后退一格 这个照理说次序不对,可显示和上段一样>欢迎下载精品学习资源ifa-b>0> c=a-b;elsec=b-a;whilec.=0>write_date0x30+c%10>;c=c/10;ifa-b<0> write_date0x2d>;write_date0x3d>;/再写"=" a=0;b=0;flag=0;fuhao=0;else iffuhao=3>write_com0x80+0x4f>; write_com0x04>;c=a*b;whilec.=0>write_date0x30+c%10>;c=c/10;write_date0x3d>;a=0;b=0;flag=0;fuhao=0;欢迎下载精品学习资源else iffuhao=4>write_com0x80+0x4f>; write_com0x04>;i=0;c=long>float>a/b>*1000>;whilec.=0>write_date0x30+c%10>;c=c/10;i+;ifi=3>write_date0x2e>;ifa/b<=0> write_date0x30>;write_date0x3d>;a=0;b=0;flag=0;fuhao=0;break;case 15:write_date0x30+table1num>;flag=1;fuhao=1; break;欢迎下载精品学习资源main>init>;while1>keyscan>;第 4 章 仿真和调试下面用 KEIL uVision 与 porteus仿真软件实现简易运算器的仿真与调试;4.1 keil 软件的介绍单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了;机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51 单片机的汇编软件有早期的 A51,随着单片机开发技术的不断进展,从普遍使用汇编语言到逐步使用高级语言开发,单片机的开发软件也在不断进展,Keil软件是目前最流行开发MCS-51 系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出; Keil供应了包括C 编译器、宏汇编、连接器、库治理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境<uVision)将这些部份组合在一起;运行Keil软件需要 Pentium 或以上的 CPU, 16MB或更多RAM、20M 以上闲暇的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统;把握这一软件的使 用对于使用 51 系列单片机的爱好者来说是特别必要的,假如你使用C 语言编程,那么Keil几乎就是你的不二之选<目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C 语言而仅用汇编语言编程,其便利易用的集成环境、强大的软件仿真调试工具也会令你事半功倍;Keil C51开发系统基本学问Keil C51开发系统基本学问1. 系统概述欢迎下载精品学习资源Keil C51是美国 Keil Software公司出品的 51 系列兼容单片机C 语言软件开发系统,与汇编相比, C 语言在功能上、结构性、可读性、可保护性上有明显的优势,因而易学易用;用过汇编语言后再使用C 来开发,体会更加深刻;Keil C51软件供应丰富的库函数和功能强大的集成开发调试工具,全Windows 界面;另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率 特别之高,多数语句生成的汇编代码很紧凑,简单懂得;在开发大型软件时更能表达高级语言的优势;下面具体介绍Keil C51开发系统各部分功能和使用;2. Keil C51单片机软件开发系统的整体结构C51 工具包的整体结构中,其中uVision与 Ishell分别是 C51 for Windows和 for Dos的集成开发环境 IDE> ,可以完成编辑、编译、连接、调试、仿真等整个开发流程;开发人员可用IDE 本身或其它编辑器编辑C或汇编源文件;然后分别由C51 及 A51 编译器编译生成目标文件.OBJ> ;目标文件可由LIB51 创建生成库文件,也可以与库文件一起经L51 连接定位生成肯定目标文件 .ABS> ;ABS文件由 OH51转换成标准的 Hex 文件,以供调试器dScope51 或 tScope51 使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如 EPROM中;3. 采纳 KEIL开发的 89c51 单片机应用程序一般需要以下步骤:<1) 在 uVision集成开发环境中创建新工程<Project),扩展文件名为 .UV2, 并为该工程选定合适的单片机 CPU器件 <本设计采纳 ATMEL 公司下的 AT89C51)2> 用 uVision的文本编辑器编写源文件,可以是汇编文件<.ASM) , 也可以使 C 语言文件 <扩展名.C ),并将该文件添加到工程中去;一个工程文件可以包含多个文件,除了源程序文件外,仍可以是库文件、头文件或文本说明文件;<3)通过 uVision 2的相关挑选项,配置编译环境、连接定位器以及Debug 调试器的功能;<4)对工程中的源文件进行编译连接,生成肯定目标代码和可选的HEX文件,假如显现编译连接错误就返回到第2 步,修改源文件中的错误后重构整个工程;<5)对没有语法错误的程序进行仿真调试,调试胜利后将HEX文件写入到单片机应用系统的ROM中;4.2 本设计的操作依据上述操作可得图4-1编译调试程序后,从Build 一栏可以看到“ creating hex file from jsq”欢迎下载精品学习资源“ jsq - 0 Errors>,0 Warnings>.”下一步就可以在Proteus 软件了调用 hex 文件及烧入单片机;图 4-1 keil 调试4.3 proteus 7.1介绍Proteus的 ISIS是一款 Labcenter出品的电路分析实物仿真系统,可仿真各种电路和 IC ,并支持单片机,元件库齐全,使用便利,是不行多得的专业的单片机软件仿真系统;该软件的特点:<1) 全部满意我们提出的单片机软件仿真系统的标准,并在同类产品中具有明显的优势;<2)具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS一 232 动态仿真、 1 C 调试器、 SPI 调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、规律分析仪、信号发生器等;目前支持的单片机类型有:68000 系列、 8051 系列、 AVR系列、 PIC12 系列、 PIC16 系列、 PIC18 系列、 Z80 系列、 HC11系列以及各种外围芯片;支持大量的储备器和外围芯片;总之该软件是一款集单片机和SPICE 分析于一身的仿真软件,功能极其强大,可仿真 51 、AVR、PIC ;欢迎下载精品学习资源4.4 Proteus对于本设计的仿真操作步骤如下:<1)进入 proteus ISIS 集成环境,在工作前,在systerm 菜单下设置界面的颜色、图形界面大小等工程,我采纳了系统默认值;<2)通过工具栏中的<从库中挑选元件命令)命令,在pick devices 窗口中挑选电路所需的元件,放置元件到编辑区并调整其相对位置,进行元件参数设置,元器件间连线;器件库如表 4-1 所示,挑选后如图4-12 所示;器件库器件名称欢迎下载精品学习资源Microprocessor ICs89C51欢迎下载精品学习资源Switches&RelaysBUTTON OptoelectronicsLM016LResistorsRESPACK-8ResistorsPOT-LINTerminals ModePOWER表 4-1器件库及所选器件<3)连线并加上需要的说明,并完成仿真原理图,如图4-3 所示;操作说明:1> 本运算器实现 8 位数的加、减、乘、除运算;欢迎下载精品学习资源2> 按下数值键,显示按下的“数字”按运算符,再,按第2 个操作数,显示,按“=” 键,得到运算结果;3> 按“清零”键清除运算结果,可重新开头;图 4-3 仿真原理<4)加载程序;将编译调试完成的简易运算器机器码程序<hex 文件)加载到AT89C51 单片机中;<5)单击仿真工具栏中的仿真键查看成效 ;,观看仿真结果;可以按暂停、连续、单步、等按钮,运行 单步运行 暂停停止图 4-4 仿真工具栏<6)调试与摸索图 4-2 器件列表欢迎下载精品学习资源第 5 章 Protel 作图及 PCB 制板5.1 Protel DXP 2004简介到现在很多 PCB工程师们或许仍在使用Protel99或者 protel99se在他们所熟识的编辑环境下进行PCB设计,他们都很有体会,能够在protel99或 protel99se上设计出一块很棒的PCB;但有的时候他们甚至不信任软件的智能化给他们带来的庞大便利;于是很多PCB工程师根本不使用软件带有的强大的自动布线功能,由于即使重复 布上几百次都不能得到他们中意的方案,或是调整的线太多仍不如完全手工布线;这些都让他们不情愿接受也不信任更新换代了的人工智能能给他们的设计带来什么庞大的便利,他们信任的只是他们多少年积存的体会;但实际上他们都很清晰当他们设计一块多层高密度PCB所需要付出的代价是什么,同时他们也期望真的有那么一款软件能让他们的设计效率有极大的提高的PCB设计软件;现在Altium公司 2004 年最新产品Protel 2004完全能满意这方面的要求;当 然 Protel 2004面对的用户不光是为了便利这些有多年体会的PCB工程师们; Protel 2004同时仍降低了制作PCB的门槛,通过短时间的培训 即使是自学 >,很短时间您都可以很快的制作一块合格的 PCB;Protel 2004共可进行 74 个板层设计,包含32 层 Signal信号走线层 >; 16 层Mechanical机构层 >; 16 层 Internal Plane内层电源层 >;2 层 Solder Mask防焊层 >; 2 层 Paste Mask锡膏层 >; 2 层 Silkscreen丝印层 >; 2 层钻孔层 <钻孔引导和钻孔冲压);1 层 Keep Out 禁止层 >; 1 层 Multi-Layer 横跨全部的信号板层> ;5.2 Protel设计电路打开 Protel DXP的操作界面,从文件“菜单”下“创建”“原理图” 见下图图 5-1 创建原理图欢迎下载精品学习资源图 5-2元件库找到器件从元件库找到所需要的器件,点击Place按键,就可以把相关器件放入到设计工作区,见图 5-2 演示;见图 5-2 演示器件库Atmel Microcontroller 8051 Architecture.IntLib元件库及所选器件器件名称AT89C51Miscellaneous Connectors.IntLibMiscellaneous Devices.IntLib Miscellaneous Devices.IntLib Miscellaneous Devices.IntLib Miscellaneous Devices.IntLib Miscellaneous Devices.IntLib自己画的电阻排库16-Pin 1602封装SW-PBCap XTALCapPol2 Res2RP1表 5-1 元件库及所选器件<3)依据设计原理,点击工具栏中的“放置导线”按键,就可以把把器件按设计的电路图依次连接起来;见下图;欢迎下载精品学习资源图 5-3 protel 原理图<4)从“文件”菜单下“创建”“工程”“PCB工程” ,在创建 PCB文件,之后把原理图导入 PCB工程下;使用自动布线便可生成 PCB图;然后自己再修整下线路,可得到下图;欢迎下载精品学习资源图 5-4PCB印刷电路板图致谢在论文完成之际,我第一要向那些热心帮组的同学表示最真挚的谢意;在论文写作期间,我遇到了很多不懂的地方,包括理论学问和做实物的过程,我都向他们请教,他们都无私热忱的告知我;我仍要特殊感谢 * 、* 同学赐予了我无私的帮忙,正是在他们的的勉励和帮忙之下,我得以顺当完成论文;其次我仍要更特殊的感谢四年来悄悄关怀我、支持我、勉励我的家人,亲戚,伴侣;是他们让我有信心、有士气克服了太多的困难,最终得以顺当完成学业,在此对他们表达我深深的谢意;由于本人学识有限,加之时间仓促,文中不免有错误和待改进之处,真诚欢迎各位师长、同行提出珍贵看法;最终,忠心感谢在百忙中评阅论文和参与答辩的各位评委老师.欢迎下载