论文投稿百科

c51单片机简易计算器毕业论文

发布时间:2024-07-02 12:43:00

c51单片机简易计算器毕业论文

这是流程:1. 4X4键盘输入,点阵字符型液晶显示。2. 由于所采用的浮点程序库的限制(MCU平台只找到这个……),浮点运算采用3字节二进制补码表示,有效数字6位。对于输入输出,采用3字节BCD码浮点数格式,有效数字只有4位,因此最终有效数字只有4位。3. 可进行连续输入,例如:* ,但是运算结果为从左到右,这也是8位简易计算器的方式。4. 可进行错误判断,溢出、除零等错误将显示一个字符 E 。5. 由于键盘只有16个按键,安排如下: +---------------+ | 7 | 8 | 9 | + | | 4 | 5 | 6 | - | | 1 | 2 | 3 | * | | 0 | . | = | / | +---------------+6. 按键的缺少导致取消了一些特殊函数,即开根号,三角函数(sin, cos, tan, ctg)的实现,由于这些函数在浮点程序库中均已提供,如果硬件允许,在原来的框架上添加这些附加功能是很容易的(可以看作和+, -, *, /等价的按键操作,调用不同的子程序进行运算即可)7. 按两次 = 等于清灵。因为按键实在太少,才采用了这个做法。8. 相应举例: 按键 结果 说明- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 123+= 123 按下等号而没有第二个操作数,保留第一个操作数 并认为此次运算结束(等号的功能) 123+321/111 等价于(123+321) / 111 77 等号后直接按 / ,则将前面的运算结果作为第一个 操作数 1/0= E 错误显示这是源码:

一、毕业设计题目及要求 (2个) 1、基于单片机控制的电动机Y-△启动的设计 要求:1)控制器为单片机,电动机为三相异步电动机;2)启动时间为3秒;3)由按键设置电动机Y-△运行、停止。 2、基于单片机控制的可调直流稳压电源的设计 要求:1)控制器为单片机,电压输出范围为0-10V,电压精度为;2)通过数码管显示电压值;3)由按键设置电压值。 二、毕业设计用到的主要软件(及功能) 毕业设计用到的主要软件(及功能):Keil 51(源程序编译),Proteus(电路仿真),AutoCAD(绘图), Visio(绘流程图), Protel 99SE(原理图电路设计,PCB板制作) 三、单片机方面毕业设计要求 1、学会编写程序(用C语言或汇编语言),用Keil 51软件对源程序进行编译。 2、学会用Proteus电路仿真软件对所设计的硬件电路进行仿真。 3、在写毕业论文时,学会用Word、AutoCAD, Visio,Protel 99SE等软件对程序流程图、电路原理图等进行绘制。 相关答案 ↓位朋友,以51单片机为例。51现在很多都是用仿真器来进行在线调试的,而每个公司的仿真器都会有自带的编程软件,当然,跟keil是差不了多少的。 步骤大体如下: 1.新建,进行程序的编写 2.连上仿真器或烧写器,这一步有可能要对仿真器或烧写器进行设置,具体可看它们的使用说明 3.对程序进行编译,这一步会自动检测你的程序有没错,如果有错,是不能进入下一步的.如果你用的是仿真器,这一步编译成功后就可以直接运行进行在线调试了。 4.如果用的是烧写器,那就进行烧写 各个软件和调试方法会有些不同,但大体就是这样,一些调试工具的说明书也有很详细的说明。 学参数测量技术涉及范围广,特别是微电压、微电流、高电压以及待测信号强弱相差极大的情况下,既要保证弱信号的测量精度又要兼顾强信号的测量范围,在技术上有一定的难度。传统的低成本仪表在测量电压、电阻时都采用手动选择档位的方法来转换量程。在使用中,当忘记转换档位时,会造成仪表测量精度下降或损坏。 现代电子测量对系统的精度要求越来越高且智能化程度也越来越高。全量程无档自动量程转换电压表和电阻表是在保证测量精度不下降的前提条件下省去手动转换量程的工作,得到了广泛应用。 本文介绍了一种基于AT89S52 单片机 的智能多用表。该表能在单片机的控制下完成直流电压、电阻和直流电流的测量。测量电流部分采用了简单的I/V转换电路完成测试;测量电压部分结合模拟开关CD4051和运算放大器OP07构成程控放大器,实现了自动量程转换;测量电阻部分也由模拟开关CD4051和运算放大器OP07相结合,在单片机控制下完成了自动量程转换。电流、电压和电阻的最终测量信号都在单片机的控制下由12位A/D转换器TLC2543进行采集,采集的信号经单片机数据处理后通过LCD(12864)显示出来,测量结果还可以由带有串行EEPROM的CPU存储器和监控器的X25045进行多个数据保存。 关键词:TLC2543 自动量程转换 程控增益放大器 电压 电阻 电流 目录 摘要1 Abstract 2 第一章 绪论 5 1. 1 概述 5 1. 2 智能仪器/仪表国内外发展概况 5 1. 3 课题研究目的及意义 6 第二章 系统结构及功能介绍 8 2. 1 系统功能和性能指标 8 2. 1. 1 仪表功能 8 2. 1. 2 性能指标 8 2. 1. 3 本机特色 8 2. 1. 4 系统使用说明 9 2. 2 系统工作原理概述 9 第三章 方案设计与论证 11 3. 1 量程选择的设计与论证 11

1、 基于RTOS的单片机方波信号发生器设计与实现 摘 要随着计算机技术的迅速发展和芯片制造工艺的不断进步,嵌入式系统的应用日益广泛:从民用的电视、手机等电路设备到军用的飞机、坦克等武器系统,到处都有嵌入式系统的身影。在嵌入式系统的应用开发中,采用... 类别:毕业论文 大小: MB 日期:2008-07-13 2、 [电子信息工程]基于单片机的电器遥控器设计 摘要:通过对设计要求地认真分析和研究,拿出了几种可行方案,最终选定了一个最佳方案。该方案是采用先进的单片机技术实现遥控的主要手段。我们所设计的遥控器能控制5个电器的电源开关,并且可对一路电灯进行亮度的... 类别:毕业论文 大小:242 KB 日期:2008-07-06 3、 基于单片机无线收发控制的交通信号灯模型 摘 要利用AT89C51单片机控制交通信号灯的工作原理及其硬件电路设计。文章对AT89C51单片机芯片及本交通信号灯模型作了较详细介绍。最后简单介绍了本系统可改进的地方。关键词:AT8... 类别:课题课程 大小:158 KB 日期:2008-07-06 4、 基于单片机的多人智能比赛记分抢答器 摘 要 本设计是采用单片机设计的多人比赛用记分抢答器系统。它具有电路简单、功能齐全、制作成本低、性价比高等特点,是一种经济、实用的比赛用抢答器。硬件部分主要由单片机、 74LS377锁存器、CC... 类别:毕业论文 大小:243 KB 日期:2008-07-06 5、 基于AT89C51的新一代单片机多功能数字钟 一、题目 1二、课程设计目的 1三、课程设计系统环境 1四、课程设计要求 1五、系统功能说明 2六、原理图 2七、程序框图 3八、源程序 5九、参考资料 7 类别:课题课程 大小:84 KB 日期:2008-07-06 6、 [电气工程]用单片机实现分频段测量信号频率 摘 要 近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面... 类别:毕业论文 大小:207 KB 日期:2008-07-03 7、 基于MCS 51单片机车用数字仪表设计与实现 摘 要:随着科技进步,车用显示仪表由指针式向数字式发展。数字显示仪表是采用的微处理器测控和传感器测量技术,通过控制数字显示器发光二极管和发光组合来显示车速、里程、用条段表示油量多少,并辅助显示速度大小... 类别:毕业论文 大小:179 KB 日期:2008-07-02 8、 [信息安全]基于AVR单片机的嵌入式心率提取算法 2008-06-11 13:39 188,416 外文翻译.doc2007-11-16 11:28 352,955 外文翻译原文.pdf2008-06-10... 类别:毕业论文 大小: MB 日期:2008-06-30 9、 基于单片机与VC串口通信的温度采集系统设计 摘 要温度检测是现代检测技术的重要组成部分,在保证产品质量、节约能源和安全生产等方面起着关键的作用。随着科学技术的发展,由单片集成电路构成的温度传感器的种类越来越多,测量的精度越来越高,响应时间越来... 类别:毕业论文 大小:480 KB 日期:2008-06-26

这有一系列的毕业论文qq310852504

毕业论文之单片机简易计算器

ptotues软件中带了一个单片机实现的简易计算器

给你些子程序,自己看着凑吧。呵呵。有了这些,写出来应该不难了。;@@@@@@@@@双字节整数运算@@@@@@@@@@@@@@@@@@;***********双字节无符号加法**************;入口:R6(H),R7,R4(H),R5,出口:和R6(H),R7(L)UADD: MOV A,R7 ADD A,R5 MOV R7,A MOV A,R6 ADDC A,R4 MOV R6,A RET;***********双字节无符号减法**************;入口:被减数R6(H),R7(L),减数R4(H),R5(L),出口:差R6(H),R7(L) CLR C MOV A,R7 SUBB A,R5 MOV R7,A MOV A,R6 SUBB A,R4 MOV R6,A RET;***********双字节无符号乘法**************;入口:R6(H),R7(L),R4(H),R5(L),出口:积R6(H),R7(L)UMUL: MOV A,R7 MOV B,R5 MUL AB MOV R0,B XCH A,R7 MOV B,R4 MUL AB ADD A,R0 XCH A,R6 MOV B,R5 MUL AB ADD A,R6 MOV R6,A RET ;***********双字节无符号除法*****************;入口:R6(H),R7(L),R4(H),R5(L),出口:商R6(H),R7(L),余R4(H),R5(L);影响:R2,R3,;堆栈需求:1UDIV: CLR C CLR A MOV R2,A MOV R3,A MOV B,#10HMOVBIT: MOV A,R7;R6、R7中数据左移一位到R2、R3中,C到R7 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A CLR C ;R2R3-R4R5 MOV A,R3 SUBB A,R5 PUSH Acc MOV A,R2 SUBB A,R4 JBC Cy,MOVBIT0;不够减,清C继续左移 MOV R2,A;够减,存回余数并置位C POP Acc MOV R3,A SETB C SJMP MOVBIT1MOVBIT0: POP AccMOVBIT1: DJNZ B,MOVBIT MOV A,R7 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R2 MOV R4,A MOV A,R3 MOV R5,A RET (7) 标号: DIVD 功能:双字节二进制无符号数除法入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。影响资源:PSW、A、B、R1~R7 堆栈需求: 2字节DIVD: CLR C ;比较被除数和除数MOV A,R3 SUBB A,R7MOV A,R2SUBB A,R6JC DVD1SETB OV ;溢出RETDVD1: MOV B,#10H ;计算双字节商DVD2: CLR C ;部分商和余数同时左移一位MOV A,R5RLC AMOV R5,AMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AXCH A,R2RLC AXCH A,R2MOV F0,C ;保存溢出位CLR CSUBB A,R7 ;计算(R2R3-R6R7)MOV R1,AMOV A,R2SUBB A,R6ANL C,/F0 ;结果判断JC DVD3MOV R2,A ;够减,存放新的余数MOV A,R1MOV R3,AINC R5 ;商的低位置一DVD3: DJNZ B,DVD2 ;计算完十六位商(R4R5)MOV A,R4 ;将商移到R2R3中MOV R2,AMOV A,R5MOV R3,ACLR OV ;设立成功标志RET

我也正在做,想和你交流一下。可以联系吗?

protues里自带了这个程序,是8031的,和原理图,代码都有,自己找找

单片机简易电子琴毕业论文

基于单片机的交通灯控制器1 引言当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。但这一技术在19世纪就已出现了。1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。这是世界上最早的交通信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。电气启动的红绿灯出现在美国,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽约市5号大街的一座高塔上。红灯亮表示“停止”,绿灯亮表示“通行”。1918年,又出现了带控制的红绿灯和红外线红绿灯。带控制的红绿灯,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭,就使红灯变为绿灯。红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。2 单片机概述单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。单片机经过1、2、3、3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗。3 芯片简介 MSC-51芯片简介MCS-51单片机内部结构8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:•中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。•数据存储器(RAM)8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。图1•程序存储器(ROM):8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。•定时/计数器(ROM):8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。•并行输入输出(I/O)口:8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。•全双工串行口:8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。•中断系统:8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。•时钟电路:8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。下图是MCS-51系列单片机的内部结构示意图2。MCS-51的引脚说明:MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:MCS-51的引脚说明:MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:如图3Pin9:RESET/Vpd复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。8051的复位方式可以是自动复位,也可以是手动复位,见下图4。此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。•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的编程电压。 8255芯片简介8255可编程并行接口芯片简介:8255可编程并行接口芯片有三个输入输出端口,即A口、B口和C口,对应于引脚PA7~PA0、PB7~PB0和PC7~PC0。其内部还有一个控制寄存器,即控制口。通常A口、B口作为输入输出的数据端口。C口作为控制或状态信息的端口,它在方式字的控制下,可以分成4位的端口,每个端口包含一个4位锁存器。它们分别与端口A/B配合使用,可以用作控制信号输出或作为状态信号输入。8255可编程并行接口芯片方式控制字格式说明:8255有两种控制命令字;一个是方式选择控制字;另一个是C口按位置位/复位控制字。其中C口按位置位/复位控制字方式使用较为繁难,说明也较冗长,故在此不作叙述,需要时用户可自行查找有关资料。方式控制字格式说明如表1:表1D7 D6 D5 D4 D3 D2 D1 D0D7:设定工作方式标志,1有效。D6、D5:A口方式选择0 0 —方式00 1 —方式11 ×—方式2D4:A口功能 (1=输入,0=输出)D3:C口高4位功能 (1=输入,0=输出)D2:B口方式选择 (0=方式0,1=方式1)D1:B口功能 (1=输入,0=输出)D0:C口低4位功能 (1=输入,0=输出)8255可编程并行接口芯片工作方式说明:方式0:基本输入/输出方式。适用于三个端口中的任何一个。每一个端口都可以用作输入或输出。输出可被锁存,输入不能锁存。方式1:选通输入/输出方式。这时A口或B口的8位外设线用作输入或输出,C口的4条线中三条用作数据传输的联络信号和中断请求信号。方式2 :双向总线方式。只有A口具备双向总线方式,8位外设线用作输入或输出,此时C口的5条线用作通讯联络信号和中断请求信号。 74LS373简介74LS373 是一种带三态门的8D锁存器,其管脚示意图如下示:其中:1D-8D为8个输入端。1Q-8Q为8个输出端。LE为数据打入端:当LE为“1”时,锁存器输出状态同输入状态;当LE由“1”变“0”时,数据打入锁存器OE为输出允许端:当OE=0时,三态门打开;当OE=1时,三态门关闭,输出高阻。4 系统硬件设计交通管理的方案论证东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。设东西道比南北道的车流量大,指示灯燃亮的方案如表2。60S 5S 80S 5S ……东西道 红灯亮 黄灯亮 绿灯亮 黄灯亮 ……南北道 绿灯亮 黄灯亮 红灯亮 黄灯亮 ……表2说明:(1)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;南北道为绿灯,此道车辆通过,行人禁止通行。时间为60秒。(2)黄灯闪烁5秒,警示车辆和行人红、绿灯的状态即将切换。(3)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过,行人通行。时间为80秒。 东西方向车流大 通行时间长。(4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。(5)此表可根据车流量动态设定红绿灯初始值。系统硬件设计选用设备8031单片机一片选用设备:8031弹片机一片,8255并行通用接口芯片一片,74LS07两片,MAX692‘看门狗’一片,共阴极的七段数码管两个双向晶闸管若干,7805三端稳压电源一个,红、黄、绿交通灯各两个,开关键盘、连线若干。4.2.1 系统总框图如下:4.2.2 交通灯硬件线路图4.2.3 系统工作原理(1)开关键盘输入交通灯初始时间,通过8051单片机P1输入到系统(2) 由8051单片机的定时器每秒钟通过P0口向8255的数据口送信息,由8255的PA 口显示红、绿、黄灯的燃亮情况;由8255的PC口显示每个灯的燃亮时间。(3)8051通过 设置 各个信号等的燃亮时间、通过8031设置,绿、红时间分别为60秒、80秒循环由8051的 P0口向8255的数据口输出。(4) 通过8051单片机的位来控制系统是工作或设置初值,当.牌位0就对系统进行初始化,为1系统就开始工作。(5)红灯倒计时时间,当有车辆闯红灯时,启动蜂鸣器进行报警,3S后然后恢复正常。(6)增加每次绿灯时间车流量检测的功能,并且通过查询端口的电平是否为低,开关按下为低电平,双位数码管显示车流量,直到下一次绿灯时间重新记入。(7)绿灯时间倒计时完毕,重新循环。5.控制器的软件设计每秒钟的设定延时方法可以有两种一中是利用MCS-51内部定时器才生溢出中断来确定1秒的时间,另一种是采用软延时的方法。计数器硬件延时 计数器初值计算定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。他是以加法记数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC 可得到如下计算通式:TC=M-C式中,M为计数器摸值,该值和计数器工作方式有关。在方式0时M为213 ;在方式1时M的值为216;在方式2和3为 计算公式T=(M-TC)T计数或TC=M-T/T计数T计数是单片机时钟周期TCLK的12倍;TC为定时初值如单片机的主脉冲频率为TCLK12MHZ ,经过12分频方式0 TMAX=213 *1微秒=8.192毫秒方式1 TMAX=216 *1微秒=65.536毫秒显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题. 1秒的方法我们采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒.这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零。为零表示1秒已到可以返回到输出时间显示程序。相应程序代码(1)主程序定时器需定时50毫秒,故T0工作于方式1。 初值:TC=M-T/ T计数 =216 -50ms/1us=15536=3CBOHORG 1000HSTART: MOV TMOD, #01H ; 令TO为定时器方式1MOV TH0, #3CH ;装入定时器初值MOV TL0, #BOH ;MOV IE, #82H ;开T0中断SEBT TRO ;启动T0计数器MOV RO, #14H ;软件计数器赋初值LOOP: SJMP $ ;等待中断(2)中断服务子程序ORG 000BHAJMP BRT0ORG 00BHBRTO:DJNZ R0,NEXTAJMP TIME ; 跳转到时间及信号灯显示子程序DJNZ:MOV RO,#14H ;恢复R0值MOV TH0, #3CH ;重装入定时器初值MOV TL0, #BOH ;MOV IE, # 软件延时MCS-51的工作频率为2-12MHZ,我们选用的8031单片机的工作频率为6MHZ。机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/6M)=2us。我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间。具体的延时程序分析:DELAY:MOV R4,#08H 延时1秒子程序DE2:LCALL DELAY1DJNZ R4,DE2RETDELAY1:MOV R6,#0 延时125ms 子程序MOV R5,#0DE1: DJNZ R5,$DJNZ R6,DE1RETMOV RN,#DATA 字节数数为2 机器周期数为1所以此指令的执行时间为2msDELAY1 为一个双重循坏 循环次数为256*256=65536 所以延时时间=65536*2=131072us 约为125usDELAY R4设置的初值为8 主延时程序循环8次,所以125us*8= 1秒由于单片机的运行速度很快其他的指令执行时间可以忽略不计。 时间及信号灯的显示 8051并行口的扩展8051虽然有4个8位I/O端口,但真正能提供借用的只有P1口,因为P2和P0口通常用于传送外部传送地址和数据,P3口也有它的第二功能。因此,8031通常需要扩展。由于我们用外部输入设定红绿灯倒计时初值、数码管的输出显示、红绿黄信号灯的显示都要用到一个I/O端口,显然8031的端口是不够,需要扩展。扩展的方法有两种:(1)借用外部RAM地址来扩展I/O端口;(2)采用I/O接口新片来扩充。我们用8255并行接口信片来扩展I/O端口。显示原理:当定时器定时为1秒,时程序跳转到时间显示及信号灯显示子程序,它将依次显示信号灯时间 ,同时一直显示信号灯的颜色,这时在返回定时子程序定时一秒,在显示黄灯的下一个时间,这样依次把所有的灯色的时间显示完后在重新给时间计数器赋初值 ,重新进入循环。 8255PA口输出信号接信号灯:由于发光二极管为共阳极接法,输出端口为低电平,对应的二极管发光,所以可以用置位方法点亮红,绿,黄发光二极管。 8255输出信号与数码管的连接:LED 灯的显示原理:通过同名管脚上所加电平的高低来控制发光二极管是否点量而显示不同的字形如 SP,g,f,e,d,c,b,a 管角上加上7FH所以 SP上为0伏,不亮其余为TTL高电平,全亮则显示为8采用共阴级连接:其中 PC0\PB0-a,PC1\PB1-b,PC2\PB2-c,PC3\PB3-d,PC4\PB4-e,PC5\PB5-f,PC6\PB6-gPC7\PB7 -SP接地显示数值 dop g f e d c b a 驱动代码(16进制)0 0 0 1 1 1 1 1 1 3FH1 0 0 0 0 0 1 1 0 06H2 0 1 0 1 1 0 1 1 5BH3 0 1 0 0 1 1 1 1 4FH4 0 1 1 0 0 1 1 0 66H5 0 1 1 0 1 1 0 0 6DH6 0 1 1 1 1 1 0 0 7DH7 0 0 0 0 0 1 1 1 07H8 0 1 1 1 1 1 1 1 7FH表 3 驱动代码表 8255与8051的连接:用8051的P0 口的 连接8255的片选信号cs 我们用8031的地址采用全译码方式,当 =0 时片选有效, 其他无效, 用于选择8255端口 A6 A5 A4 A3 A2 A1 A01 X X X X X 0 0 00H为8255 的PA口1 X X X X X 0 1 01H 为8255的PB口1 X X X X X 1 0 02H 为8255的PC口1 X X X X X 1 1 03H 为8255的控制口由于8051是分时对8255和储存器进行访问所以8051的P0口不会发生冲突 程序设计流程图如图所示图8图9 程序流程图 程序源代码ORG 0000H ;主程序的入口地址LJMP MAIN ;跳转到主程序的开始处ORG 0003H ;外部中断0的中断程序入口地址ORG 000BH ;定时器0的中断程序入口地址LJMP T0_INT ;跳转到中断服务程序处ORG 0013H ;外部中断1的中断程序入口地址MAIN : MOV SP,#50HMOV IE,#8EH ;CPU开中断,允许T0中断,T1中断和外部中断1中断MOV TMOD,#51H ;设置T1为计数方式,T0为定时方式,且都工作于模式1MOV TH1,#00H ;T1计数器清零MOV TL1,#00HSETB TR1 ;启动T1计时器SETB EX1 ;允许INT1中断SETB IT1 ;选择边沿触发方式MOV DPTR ,#0003HMOV A, #80H ;给8255赋初值,8255工作于方式0MOVX @DPTR, AAGAIN: JB ;判断是否要设定东西方向红绿灯时间的初值,若为1 则跳转MOV A,P1JB ;判断是否为1,若为1则设定红灯时间,否则设定绿灯时间MOV R0,#00H ;R0清零MOV R0,A ;存入东西方向绿灯初始时间MOV R3,ALCALL DISP1LCALL DELAYAJMP AGAINRED: MOV A,P1ANL A,#7FH ;置0MOV R7,#00H ;R7清零MOV R7,A ;存入东西方向红灯初始时间MOV R3,ALCALL DISP1LCALL DELAYAJMP AGAIN;-------------------------------------------N0: SETB TR0 ;启动T0计时器MOV 76H,R7 ;红灯时间存入76HN00: MOV A,76H ;东西方向禁止,南北方向通行MOV R3,AMOV DPTR,#0000H ;置8255A口,东西方向红灯亮,南北方向绿灯亮MOV A,#0DDHMOVX @DPTR, AN01: JB : SETB R3,#00H,N01 ;比较R3中的值是否为0,不为0转到当前指令处执行;------黄灯闪烁5秒程序------N1: SETB R3,#05HMOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮MOV A,#0D4HMOVX @DPTR,AN11: MOV R4,#00HN12: CJNE R4,#7DH,$ ;黄灯持续亮秒N13: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭MOV A,#0DDHMOVX @DPTR,AN14: MOV R4,#00HCJNE R4,#7DH,$ ;黄灯持续灭秒CJNE R3,#00H,N1 ;闪烁时间达5秒则退出;------------------------------------------------------------N2: MOV R7,#00HMOV A,R0 ;东西通行,南北禁止MOV R3,AMOV DPTR,#0000H ; 置8255A口,东西方向绿灯亮,南北方向红灯亮MOV A,#0EBHMOVX @DPTR,AN21: JB : CJNE R3,#00H,N21;------黄灯闪烁5秒程序------N3: MOV R3,#05HMOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮MOV A,#0E2HMOVX @DPTR,AN31: MOV R4,#00HCJNE R4,#7DH,$ ;黄灯持续亮秒N32: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭MOV A,#0EBHMOVX @DPTR,AN33: MOV R4,#00HCJNE R4,#7DH,$ ;黄灯持续灭秒CJNE R3,#00H,N3 ;闪烁时间达5秒则退出SJMP N00;------闯红灯报警程序------B0: MOV R2,#03H ;报警持续时间3秒B01: MOV A,R3JZ N1 ;若倒计时完毕,不再报警CLR ;报警CJNE R2,#00H,B01 ;判断3秒是否结束SJMP N02;------1秒延时子程序-------N7: RETIT0_INT:MOV TL0,#9AH ;给定时器T0送定时10ms的初值MOV TH0,#0F1HINC R4INC R5CJNE R5,#0FAH,T01 ;判断延时是否够一秒,不够则调用显示子程序MOV R5,#00H ;R5清零DEC R3 ;倒计时初值减一DEC R2 ;报警初值减一T01: ACALL DISP ;调用显示子程序RETI ;中断返回;------显示子程序------DISP: JNB : MOV B,#0AHMOV A,R3 ;R3中值二转十显示转换DIV ABMOV 79H,AMOV 7AH,BDIS: MOV A,79H ;显示十位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0F7HMOVX @DPTR,ALCALL DELAYDS2: MOV A,7AH ;显示个位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0FBHMOVX @DPTR,ARET;------东西方向车流量检测程序------T03: MOV A,R3SUBB A,#00H ;若绿灯倒计时完毕,不再检测车流量JZ N3JB R7CJNE R7,#64H,E1MOV R7,#00H ;中断到100次则清零E1: SJMP N22;------东西方向车流量显示程序------T02: MOV B,#0AHMOV A,R7 ;R7中值二转十显示转换DIV ABMOV 79H,AMOV 7AH,BDIS3: MOV A,79H ;显示十位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0F7HMOVX @DPTR,ALCALL DELAYDS4: MOV A,7AH ;显示个位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0FBHMOVX @DPTR,ALJMP N7;------延时4MS子程序----------DELAY: MOV R1,#0AHLOOP: MOV R6,#64HNOPLOOP1: DJNZ R6,LOOP1DJNZ R1,LOOPRET;------字符表------TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND6 结论本系统就是充分利用了8051和8255芯片的I/O引脚。系统统采用MSC-51系列单片机Intel8051和可编程并行I/O接口芯片8255A为中心器件来设计交通灯控制器,实现了能根据实际车流量通过8031芯片的P1口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示(交通灯信号通过PA口输出,显示时间直接通过8255的PC口输出至双位数码管);车辆闯红灯报警;绿灯时间可检测车流量并可通过双位数码管显示。。系统不足之处不能控制车的左、右转、以及自动根据车流改变红绿灯时间等。这是由于本身地理位子以及车流量情况所定,如果有需要可以设计扩充原系统来实现 。

电子信息工程毕业论文题目参考

论文写作,简单的说,就是大专院校毕业论文的写作,包含着本科生的学士论文,研究生的硕士论文,博士生的博士论文,延伸到了职称论文的写作以及科技论文的写作。论文的题目是论文的关键,有画龙点睛之效。下面是我为大家整理的电子信息工程毕业论文题目,大家不妨多加参考。

1.基于单片机的火灾报警器设计

2.基于NE555的触摸式报警器

3.数字密码锁设计

4.基于单片机智能电子时钟设计及应用

5.流水灯控制电路设计

6.简易单片机控制电路实验开发板

7.全自动洗衣机自动控制电路部分设计

8.基于单片机的八路抢答器的设计及PCB板的设计

9.基于单片机的数字温度计的设计

10.仓库温湿度的监测系统

11.直流稳压电源的制作

12.步进电机的单片机控制系统

13.单片机交通灯管理系统

单片机交通灯控制系统制作

15.基于单片机的步进电机系统设计

16.基于WML的学生网站开发

17.基于单片机的电子密码锁

18.单片机驱动步进电机控制系统的设计

19.基于单片机的流水灯设计

显示屏动态显示及其远程控制

21.基于DSP的高速多通道同步数据采集系统

22.篮球竞赛30S计时器

位数字抢答器

24.一种实用型心率计的设计

25.温度测控系统的设计

26.药品生产线上的药丸控制电路设计

27.基于选修课程的网站设计

28.基于单片机的交通灯设计

29.单片机控制的数字触发器

30.温度测控系统

31.基于单片机的数字时钟设计

32.篮球30秒定时器

33.电子万年历

34.基于单片机的智能节水控制器设计

35.嵌入式通用I/O键盘应用设计

36.数码显示的八路抢答器设计

37.基于PLC的四路抢答器设计

38.基于单片机的数字电子钟的`设计

39.超外差中波调幅收音机的组装及调试

40.基于单片机的无线电数字发射系统设计

41.基于80C51的智能汽车自控系统的设计

实现十字路交通灯自动控制

43.智能型充电器的电源和显示设计

44.基于单片机的电子时钟设计及应用

45.基于单片机的智能电子时钟的设计及应用

46.超外差中波调幅收音机组装及调试

47.基于USB接口的步进电机控制的研究与实现

48.基于单片机的电子琴设计

49.基于FPGA的直序扩频通信研究与设计

50.基于单片机的发射机控制系统

51.声光报警器的设计与研究

52.单片机电源

53.基于P87LPC768的电机控制系统

54.基于单片机的LCD电子钟设计

55.音响放大器的设计

56.超外差收音机制作及分析研究

频带传输系统的设计与实现

58.基于单片机智能电子钟的设计

与串行接口转换器的设计

60.基于FPGA的数字频率计的设计

1.卷积编码和维特比译码的FPGA实现

音频编译码算法研究与FPGA实现

调制解调技术研究及FPGA仿真实现

4.基于FPGA的高斯白噪声发生器设计与实现

5.无线通信系统选择分集技术研究

系统空时分组编码的性能研究

7.基于量子烟花算法的认知无线电频谱分配技术研究

8.基于量子混沌神经网络的鲁棒多用户检测器

9.无线紫外光多址通信关键技术研究

10.认知无线电网络的频谱分配算法

11.基于软件无线电的多制式通信信号产生器设计与实现

12.开关电源EMI滤波器的设计

13.反激式电源传导噪声模态分离技术的研究

14.核电磁脉冲源辐射的数值仿真

15.基于MATLAB的扩频通信系统及同步性能仿真

16.一种多频带缝隙天线的设计

调制解调器及同步性能的仿真分析

18.跳频频率合成器的设计

系统子载波间干扰性能分析

20.复合序列扩频通信系统同步方法的研究

21.基于DDS+PLL的频率源设计

22.基于训练序列的OFDM系统同步技术的研究

23.正交频分复用通信系统设计及性能研究

技术研究及其性能比较

25.基于蓝牙的单片机无线通信研究

26.物联网智能温室控制系统中远程信息无线传输的研究

27.船载AIS通信系统调制器的设计与实现

28.基于FPGA的16QAM调制器设计与实现

29.基于多载波通信的信道化技术研究

30.简易无线通信信号分析与测量装置

楼主我这里有电子琴的单片机程序,做毕业设计那个我觉得还是自己做得好,因为你没懂的话论文答辩是过不了的。简易电子琴#include<> //包含51单片机寄存器定义的头文件sbit P14=P1^4; //将P14位定义为引脚sbit P15=P1^5; //将P15位定义为引脚sbit P16=P1^6; //将P16位定义为引脚sbit P17=P1^7; //将P17位定义为引脚unsigned char keyval; //定义变量储存按键值sbit sound=P3^7; //将sound位定义为 int C; //全局变量,储存定时器的定时常数unsigned int f; //全局变量,储存音阶的频率//以下是C调低音的音频宏定义#define l_dao 262 //将“l_dao”宏定义为低音“1”的频率262Hz#define l_re 286 //将“l_re”宏定义为低音“2”的频率286Hz#define l_mi 311 //将“l_mi”宏定义为低音“3”的频率311Hz#define l_fa 349 //将“l_fa”宏定义为低音“4”的频率349Hz#define l_sao 392 //将“l_sao”宏定义为低音“5”的频率392Hz#define l_la 440 //将“l_a”宏定义为低音“6”的频率440Hz#define l_xi 494 //将“l_xi”宏定义为低音“7”的频率494Hz//以下是C调中音的音频宏定义#define dao 523 //将“dao”宏定义为中音“1”的频率523Hz#define re 587 //将“re”宏定义为中音“2”的频率587Hz#define mi 659 //将“mi”宏定义为中音“3”的频率659Hz#define fa 698 //将“fa”宏定义为中音“4”的频率698Hz#define sao 784 //将“sao”宏定义为中音“5”的频率784Hz#define la 880 //将“la”宏定义为中音“6”的频率880Hz#define xi 987 //将“xi”宏定义为中音“7”的频率53//以下是C调高音的音频宏定义#define h_dao 1046 //将“h_dao”宏定义为高音“1”的频率1046Hz#define h_re 1174 //将“h_re”宏定义为高音“2”的频率1174Hz#define h_mi 1318 //将“h_mi”宏定义为高音“3”的频率1318Hz#define h_fa 1396 //将“h_fa”宏定义为高音“4”的频率1396Hz#define h_sao 1567 //将“h_sao”宏定义为高音“5”的频率1567Hz#define h_la 1760 //将“h_la”宏定义为高音“6”的频率1760Hz#define h_xi 1975 //将“h_xi”宏定义为高音“7”的频率1975Hz/**************************************************************函数功能:软件延时子程序**************************************************************/void delay20ms(void) {unsigned char i,j;for(i=0;i<100;i++)for(j=0;j<60;j++);}/*******************************************函数功能:节拍的延时的基本单位,延时200ms******************************************/void delay() {unsigned char i,j;for(i=0;i<250;i++)for(j=0;j<250;j++);}/*******************************************函数功能:输出音频入口参数:F******************************************/void Output_Sound(void){C=(46083/f)*10; //计算定时常数TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法TR0=1; //开定时T0delay(); //延时200ms,播放音频TR0=0; //关闭定时器sound=1; //关闭蜂鸣器keyval=0xff; //播放按键音频后,将按键值更改,停止播放}/*******************************************函数功能:主函数******************************************/ void main(void){ EA=1; //开总中断ET0=1; //定时器T0中断允许ET1=1; //定时器T1中断允许TR1=1; //定时器T1启动,开始键盘扫描TMOD=0x10; //分别使用定时器T1的模式1,T0的模式0TH1=(65536-500)/256; //定时器T1的高8位赋初值TL1=(65536-500)%256; //定时器T1的高8位赋初值 while(1) //无限循环{switch(keyval){case 1:f=dao; //如果第1个键按下,将中音1的频率赋给fOutput_Sound(); //转去计算定时常数 break;case 2:f=l_xi; //如果第2个键按下,将低音7的频率赋给fOutput_Sound(); //转去计算定时常数 break;case 3:f=l_la; //如果第3个键按下,将低音6的频率赋给fOutput_Sound(); //转去计算定时常数 break;case 4:f=l_sao; //如果第4个键按下,将低音5的频率赋给fOutput_Sound(); //转去计算定时常数 break;case 5:f=sao; //如果第5个键按下,将中音5的频率赋给fOutput_Sound(); //转去计算定时常数 break;case 6:f=fa; //如果第6个键按下,将中音4的频率赋给fOutput_Sound(); //转去计算定时常数 break;case 7:f=mi; //如果第7个键按下,将中音3的频率赋给fOutput_Sound(); //转去计算定时常数 break; case 8:f=re; //如果第8个键按下,将中音2的频率赋给fOutput_Sound(); //转去计算定时常数 break;case 9:f=h_re; //如果第9个键按下,将高音2的频率赋给fOutput_Sound(); //转去计算定时常数 break;case 10:f=h_dao; //如果第10个键按下,将高音1的频率赋给fOutput_Sound(); //转去计算定时常数 break;case 11:f=xi; //如果第11个键按下,将中音7的频率赋给fOutput_Sound(); //转去计算定时常数 break;case 12:f=la; //如果第12个键按下,将中音6的频率赋给fOutput_Sound(); //转去计算定时常数 break; case 13:f=h_la; //如果第13个键按下,将高音6的频率赋给fOutput_Sound(); //转去计算定时常数 break;case 14:f=h_sao; //如果第14个键按下,将高音5的频率赋给fOutput_Sound(); //转去计算定时常数 break;case 15:f=h_fa; //如果第15个键按下,将高音4的频率赋给fOutput_Sound(); //转去计算定时常数 break;case 16:f=h_mi; //如果第16个键按下,将高音3的频率赋给fOutput_Sound(); //转去计算定时常数 break; } } } /**************************************************************函数功能:定时器T0的中断服务子程序,使引脚输出音频方波**************************************************************/ void Time0_serve(void ) interrupt 1 using 1 {TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法 sound=!sound; //将引脚取反,输出音频方波}/**************************************************************函数功能:定时器T1的中断服务子程序,进行键盘扫描,判断键位**************************************************************/ void time1_serve(void) interrupt 3 using 2 //定时器T1的中断编号为3,使用第2组寄存器{TR1=0; //关闭定时器T0P1=0xf0; //所有行线置为低电平“0”,所有列线置为高电平“1”if((P1&0xf0)!=0xf0) //列线中有一位为低电平“0”,说明有键按下{delay20ms(); //延时一段时间、软件消抖if((P1&0xf0)!=0xf0) //确实有键按下{P1=0xfe; //第一行置为低电平“0”(输出低电平“0”)if(P14==0) //如果检测到接引脚的列线为低电平“0”keyval=1; //可判断是S1键被按下if(P15==0) //如果检测到接引脚的列线为低电平“0”keyval=2; //可判断是S2键被按下if(P16==0) //如果检测到接引脚的列线为低电平“0”keyval=3; //可判断是S3键被按下if(P17==0) //如果检测到接引脚的列线为低电平“0”keyval=4; //可判断是S4键被按下P1=0xfd; //第二行置为低电平“0”(输出低电平“0”)if(P14==0) //如果检测到接引脚的列线为低电平“0”keyval=5; //可判断是S5键被按下if(P15==0) //如果检测到接引脚的列线为低电平“0”keyval=6; //可判断是S6键被按下if(P16==0) //如果检测到接引脚的列线为低电平“0”keyval=7; //可判断是S7键被按下if(P17==0) //如果检测到接引脚的列线为低电平“0”keyval=8; //可判断是S8键被按下P1=0xfb; //第三行置为低电平“0”(输出低电平“0”)if(P14==0) //如果检测到接引脚的列线为低电平“0”keyval=9; //可判断是S9键被按下if(P15==0) //如果检测到接引脚的列线为低电平“0”keyval=10; //可判断是S10键被按下if(P16==0) //如果检测到接引脚的列线为低电平“0”keyval=11; //可判断是S11键被按下if(P17==0) //如果检测到接引脚的列线为低电平“0”keyval=12; //可判断是S12键被按下P1=0xf7; //第四行置为低电平“0”(输出低电平“0”)if(P14==0) //如果检测到接引脚的列线为低电平“0”keyval=13; //可判断是S13键被按下if(P15==0) //如果检测到接引脚的列线为低电平“0”keyval=14; //可判断是S14键被按下if(P16==0) //如果检测到接引脚的列线为低电平“0”keyval=15; //可判断是S15键被按下if(P17==0) //如果检测到接引脚的列线为低电平“0”keyval=16; //可判断是S16键被按下}}TR1=1; //开启定时器T1TH1=(65536-500)/256; //定时器T1的高8位赋初值TL1=(65536-500)%256; //定时器T1的高8位赋初值 }

单片机计步器毕业论文

单片机(Single-ChipMicrocomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。自动控制领域的机器人、智能仪表、医疗器械。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

啥呀,记步器是什么东东,步进电机不是用来测位置的.

单片机就是功能比较单一的cpu,不同的单片机功能是不同的

步进电机没有搞过,不过倾斜角和水银开关都是可以搞定

安卓简单计算器毕业论文

计算器做毕业论文??有才。。。。。

#include<>int main(void){ int data1,data2; char op; printf("Please input data1 op data2:"); scanf("%d %c %d",&data1,&op,&data2); //注意输入时操作数与运算符之间要用空格隔开。 switch(op) { case '+': printf("\n%d+%d=%d",data1,data2,data1+data2); break; case '-': printf("\n%d-%d=%d",data1,data2,data1-data2); break; case '*': printf("\n%d*%d=%d",data1,data2,data1*data2); case '/': if (data2==0) printf("Error! chu shu wei 0"); else printf("\n%d/%d=%d",data1,data2,data1/data2); break; case '%': if (data2==0) printf("Error! chu shu wei 0"); else printf("\n%d%%%d=%d",data1,data2,data1%data2); break; } return 0;}

毕业论文建议你搞点稍微有点自己想法的啊, 计算器我们现在上课就是课本例子在做啊。再说你的这个功能也一般啊,就连WINDOWS自带的计算器的功能也没有啊建议你做点别的

这种运算比较麻烦,不过4种运算符号优先级相同应该简单写,我这里有个算法,能进行简单的四则运算,delphi的,供参考

Function Math_Evaluate(S0:string):Extended;

Function Evaluate(S0:String):Extended;Forward;

Procedure CleanUp(var s0:string);

Var

I:integer;

Begin

S0:=LowerCase(s0);

I:=Pos(' ',s0);

While I>0 Do

Begin

Delete(S0,I,1);

I:=Pos(' ',S0);

End;

End;

Function GetFirstOpp(Tot:Integer;S0:String):Integer;

Const

Sopps:String=('+-*/^');

Var

I:Integer;

Begin

If Tot=0 Then Tot:=Length(S0);

For I:=1 To 5 Do

Begin

Result:=Pos(Sopps[i],S0);

If ((I<3) And (Result>0)) Then

If ((Result=1) Or (Pos(S0[Result-1],Sopps)>0)) Then

Result:=0;

If Result>0 Then

If Result

Exit;

End;

If Result>Tot Then

Result:=0;

End;

Function SpecialF(P1:Integer;S0:String):Extended;

Var

Operstr:String;

Arg:Extended;

Begin

Result:=0;

Operstr:=Copy(S0,1,P1-1);

If S0[Length(S0)]<>')' Then

Exit;

Operstr:=LowerCase(Operstr);

Arg:=Evaluate(Copy(S0,P1+1,Length(S0)-P1-1));

if Operstr ='sin' Then

Result:=Sin(Arg)

Else if Operstr ='cos' Then

Result:=Cos(Arg)

Else if Operstr ='tan' Then

Result:=Sin(Arg)/Cos(Arg)

Else if Operstr ='arctan' Then

Result:=Arctan(Arg)

Else if Operstr ='log' Then

Result:=Ln(Arg)/Ln(10)

Else if Operstr ='ln' Then

Result:=Ln(Arg)

Else if Operstr ='exp' Then

Result:=Exp(Arg)

Else if Operstr ='sqrt' Then

Result:=Sqrt(Arg)

{enter additional functions here}

Else Exit;

End;

Function GetValue(S0:String):Extended;

Begin

Result:=0;

If Length(S0)<1 Then Exit;

If Length(S0)=1 Then

Result:=StrToFloat(S0)

Else

Case s0[1] Of

'x':Result:=1;

'y':Result:=1;

'z':Result:=1;

Else Result:=StrToFloat(S0);

End;

End;

Procedure MatchBracket(Var I:Integer;S0:String);

Var

J,Len:Integer;

Begin

J:=1;

Len:=Length(S0);

Repeat Inc(I);

If I>Len Then Exit;

If S0[I]='(' Then Inc(J);

If S0[I]=')' Then Dec(J);

If J<0 Then Exit;

Until J=0;

End;

Function Calculate(P1:Integer;S0:String):Extended;

Var

V1,V2:Extended;

Begin

Result:=0;

V1:=Evaluate(Copy(S0,1,P1-1));

V2:=Evaluate(Copy(S0,P1+1,Length(s0)-P1));

Case S0[P1] Of

'+': Result:=V1+V2;

'-': Result:=V1-V2;

'/': Result:=V1/V2;

'*': Result:=V1*V2;

'^': Result:=Exp(V2*Ln(V1));

Else Exit;

End;

End;

Function Evaluate(S0:string):Extended;

Var

P1,P2,Q1:Integer;

Begin

P1:=Pos('(',S0);

P2:=P1;

If P2>0 Then

MatchBracket(P2,S0);

If P1=1 Then

Begin

If P2=Length(S0) Then

Begin

Delete(S0,P2,1);

Delete(S0,1,1);

Result:=Evaluate(S0);

End Else

Result:=Calculate(P2+1,S0);

Exit;

End;

Q1:=GetFirstOpp(P1,S0);

If (P1+Q1=0) Then

Begin

Result:=GetValue(S0);

Exit;

End;

If Q1<>0 Then

Result:=Calculate(Q1,S0)

Else If Length(S0)>P2 Then

Result:=Calculate(P2+1,S0)

Else

Result:=SpecialF(P1,S0);

End;

Begin

Try

CleanUp(S0);

Result:=Evaluate(S0);

Except

Result:=0;

End;

End;

相关百科
热门百科
首页
发表服务