微波炉控制系统c语言编程

合集下载

微波炉控制系统的设计与实现

微波炉控制系统的设计与实现

微波炉控制系统的设计与实现微波炉是当今家庭中必不可少的家用电器之一,其方便、快捷、安全的特点受到了人们的欢迎。

然而,微波炉在工作过程中需要通过控制系统来调节电磁波的输出,以确保食品的加热效果和安全性。

因此,设计和实现一个稳定可靠的微波炉控制系统是必不可少的。

一、控制系统的功能需求微波炉控制系统主要需要完成如下功能:电源控制、电磁波输出控制、时间计时和显示以及安全机制的设计。

其中,电源控制需要控制微波炉的电源输入和输出,以保证稳定工作;电磁波输出控制主要用于调节电磁波的输出功率;时间计时和显示则是通过LED显示屏或者液晶屏来显示时间,并进行倒计时;安全机制用于保证用户的安全,在炉门未关闭时自动切断电源。

二、控制系统的工作原理微波炉的工作原理是通过控制系统来调节电源输入和输出电磁波的功率、频率和时序。

当用户开启微波炉时,系统首先进行电源控制,确保电源正常工作,然后进入电磁波输出控制阶段。

在输出控制阶段中,系统根据用户设定的输出功率和烹饪时间来控制电磁波的输出功率和时序,以确保食品能够均匀加热。

同时,系统还需要进行时间计时和显示,为用户提供倒计时和时间显示功能。

当烹饪结束时,系统自动关闭电源,同时启动安全机制,切断电源,以保证用户的安全。

三、控制系统的硬件设计控制系统的硬件主要包括中央处理器(CPU)、晶振、存储器、显示屏、光电传感器和电源控制模块等。

其中,CPU是控制系统的核心,用于控制微波炉的工作流程。

晶振则提供稳定的时钟信号,为系统提供精准的时间计时功能。

存储器用于存储微波炉的各种工作参数和数据,以便后续的查询和更新。

显示屏则提供时间计时和烹饪过程的显示功能,便于用户操作和使用。

光电传感器则用于检测炉门的关闭状态,以触发安全机制的启动。

电源控制模块用于对电源进行控制和管理,确保系统的稳定性和安全性。

四、控制系统的软件设计控制系统的软件设计涉及到编程语言、操作系统和控制程序的编写等方面。

在编程语言方面,常用的有C语言、汇编语言和嵌入式语言等。

温度控制的PID算法的C语言程序

温度控制的PID算法的C语言程序

温度控制的P I D算法的C语言程序Document number:WTWYT-WYWY-BTGTT-YTTYU-2018GT基于PID算法的温度控制系统89C51单片机,通过键盘输入预设值,与DS18B20测得的实际值做比较,然后驱动制冷或加热电路。

用keilC语言来实现PID的控制。

超低温漂移高精度运算放大器0P07将温度一电压信号进行放大,便于A/D进行转换,以提高温度采集电路的可靠性。

模拟电路硬件部分见图2。

图2温度电压转换电路电控制执行电路的设计由输出来控制电炉,电炉可以近似建立为具有滞后性质的一阶惯性环节数学模型。

其传递函数形式为:可控硅可以认为是线形环节实现对水温的控制。

单片机输出与电炉功率分别属于弱电与强电部分,需要进行隔离处理,这里采用光耦元件TLP521在控制部分进行光电隔离,此外采用变压器隔离实现弱强电的电源隔离。

单片机PWM输出电平为0时,光耦元件导通,从而使三极管形成有效偏置而导通,通过整流桥的电压经过集电极电阻以及射集反向偏压,有7V左右的电压加在双向可控硅控制端,从而使可控硅导通,交流通路形成,电阻炉工作;反之单片机输出电平为0时,光耦元件不能导通,三极管不能形成有效偏置而截止,可控硅控制端电压几乎为零,可控硅截止从而截断交流通路,电炉停止工作。

此外,还有越限报警,当温度低于下限时发光二极管亮;高上限时蜂鸣器叫。

控制执行部分的硬件电路如下:图3控制执行部分电路3键盘及显示的设计键盘采用软件查询和外部中断相结合的方法来,低电平有效。

图3中按键AN1,AN2,AN3,AN4,AN5的功能定义如表1所示。

按键AN3与相连,采用外部中断方式,并且优先级定为最高;按键AN5和AN4分别与和相连,采用软件查询的方式;AN1则为硬件复位键,与R、C构成复位电路。

表1按键功能按键键名功能显示采用3位共阳LED静态显示方式,显示内容有温度值的十位、个位及小数点后一位,这样可以只用(RXD)口来输出显示数据,从而节省了单片机端口资源,在口和(TXD)的控制下通过74LS164来实现3位静态显示。

基于C51单片机的微波炉控制系统_课程设计

基于C51单片机的微波炉控制系统_课程设计
随着电子技术的飞速发展,家用电器和办公电子设备逐渐增多,不同的设备都有自己的控制器,使用起来很不方便。根据这种实际情况,设计了一个单片机多功能定时系统,它可以避免多种控制器的混淆,利用一个控制器对多路电器进行控制,同时又可以进行时钟校准和定点打铃。它可以执行不同的时间表(考试时间和日常作息时间)的打铃,可以任意设置时间。这种具有人们所需要的智能化特性的产品减轻了人的劳动,扩大了数字化的范围,为家庭数字化提供了可能。
在火力档位方面,不同的档位在不同时间的火力不同,根据烹调,烘烤,解冻三个档位制定了不同档位时的加热时序表入下图 2.1.3
功能
时序 时间
烹 调
烘 烤
解 冻
1
50%时间 高 火
75%时间 高火
25%时间
小火
2
25%时间 中 火
25%时间中火
50%时间
中火
3
25%时间
Байду номын сангаас小火
25%时间
小火
图2.1.3不同功能时的加热时序表
系统设计包含显示电路,键盘电路,计时控制电路,档位输出电路,音响发生电路等多个部分,每个部分都可以采用不同的方案来实现,但不同的方案有实现的难易的不同,所以通过思考分析,最终做出最好的选择,使之更加科学和合理。下面对各部分设计方案做分析和选择。
3
方案一:通过单片机的一个I/O端口经A/D转换器,转换成三个输出端口进行档位控制。如图3.1.1这种方案可以节省单片机接口资源。
方案二:直接利用单片机的三个I/O端口进行档位控制。如图3.1.2这种方案电路简单。
由于在本设计系统中单片机有充足的I/O端口资源,为了保证系统的稳定性和电路的简单化,采用方案二进行档位显示。
3

微波炉可编程逻辑控制系统设计

微波炉可编程逻辑控制系统设计

微波炉可编程逻辑控制系统设计微波炉可编程逻辑控制系统设计随着人们生活水平的提高,微波炉已经成为广大家庭不可或缺的电器,相信大家对微波炉已经非常熟悉了。

它能够以独特的方式加热食物,既快捷又方便。

但是,目前市场上的微波炉普遍存在着定时不准确、温度控制不稳定、操作复杂等问题,给用户的使用带来了不便。

为此,设计一种微波炉可编程逻辑控制系统,是非常有必要的。

需求分析:我们的系统需要满足以下几个主要功能:1.定时功能:以最短的时间精确地加热食物,避免加热过头。

2.温度控制:通过精确测量微波的温度,避免加热不均匀。

3.操作简单:用户操作界面应该简单直观,方便不同用户的使用。

基于以上需求分析,我们可以开始系统的设计。

硬件方案1.温度传感器:我们需要一种能够准确测量微波温度的传感器,在市面上有很多种温度传感器,常用的有热电偶、热敏电阻、热电阻等。

我们考虑使用一种精度高、反应速度快、稳定性好的热敏电阻。

2.触控屏:使用触控屏可以简化用户的操作,让用户界面更加直观,可触控的屏幕也可以避免误操作和按键损坏等问题。

3.微波开关:微波加热的过程中,需要让微波源开关控制微波闸门的开关,以达到加热的目的。

4.微波管:微波的加热核心是微波管。

我们需要选购高品质的微波管,以确保加热效果稳定并且寿命长。

5.逻辑控制板:所有硬件的控制需要一个逻辑控制板来负责。

我们可以使用单片机或者嵌入式芯片。

软件方案1.程序设计:我们需要编写运行在逻辑控制板上的程序。

程序需要实现用户控制界面、温度传感器数据采集、微波开关控制等功能。

程序同时需要确保稳定高效,以此保证系统的性能。

2.内存管理:部分程序需要保存在逻辑控制板的内存中,因此我们需要实现程序的内存管理。

其中,存储程序的部分,需要保证读写速度快、容量足够。

3.硬件驱动:逻辑控制板需要控制各种硬件,如温度传感器、微波管等。

因此,我们需要考虑如何写好各种硬件的驱动程序以及如何控制硬件的状态。

总结本文介绍了微波炉可编程逻辑控制系统的设计方案,包括硬件方案和软件方案。

基于C语言的智能家电控制系统设计

基于C语言的智能家电控制系统设计

基于C语言的智能家电控制系统设计随着现代科技的不断发展,智能家居已经成为了时尚和便利的代表。

这些智能家居产品,可以通过网络连接,实现“远程控制、智能化调节”等功能,让我们的生活更加舒适便捷。

在智能家居领域中,C语言作为一种常用的程序编程语言之一,可以为我们的智能家居带来更多的控制和管理的可能性。

一、智能家居的综述智能家居是指利用现代化网络和通信技术,实现家庭、办公场所等智能化管理的一种系统。

目前,市场上的智能家居产品种类繁多,如智能电视、智能插座、智能音响等等。

为了将这些智能家居产品更好地整合和控制,需要使用一种稳定可靠的控制系统。

C语言正是一种适合开发智能家居产品的编程语言之一。

二、C语言的特点和应用1. C语言的特点C语言是一种小而简单的编程语言,具有以下特点:- C语言中的变量名和函数名可以自定义,开发人员可以根据需求命名,并保持代码结构清晰简洁。

- C语言的函数和代码可以重复利用,提高了代码的复用性。

- C语言是一种底层语言,对系统资源的使用细节可以精细控制,对编程者的技巧要求相对较高。

- C语言可以快速编译,并能产生运行速度较快的代码。

因此,C语言常被用于开发操作系统及底层应用程序。

2. C语言的应用在智能家居控制系统中,C语言的应用可以实现以下几个方面的功能:- 控制各类家电设备,使得各种传感器以规定的方式协调工作。

- 设计控制面板,用户可以通过控制面板管理智能家居设备,实现远程、手动等多种操作方式。

- 构建家庭安全系统,包括火灾、燃气泄漏、水浸、安防等各种安全防护措施的整合。

三、基于C语言的智能家电控制系统设计1. 系统整体设计基于C语言的智能家电控制系统分为下列四个模块:- 硬件模块:需要选择一个高速,稳定,兼容性好的芯片。

- 信号处理模块:使用C语言实现信号处理算法,例如卷积核,滤波器等。

- 控制模块:使用C语言编写控制算法实现家电的远程控制。

- 界面设计:用户通过界面与控制模块交互进行家电设备控制2. 控制算法的实现控制算法由三部分构成:- 数据采集:使用传感器对居室环境进行监测,获取温度,湿度和粉尘等信息。

基于C语言的智能家电控制系统设计与实现

基于C语言的智能家电控制系统设计与实现

基于C语言的智能家电控制系统设计与实现智能家居作为物联网技术的一个重要应用领域,正在逐渐改变人们的生活方式。

通过智能家电控制系统,人们可以实现对家中各种设备的远程控制和智能化管理,提高生活的便利性和舒适度。

本文将介绍基于C语言的智能家电控制系统的设计与实现,包括系统架构设计、功能模块实现、通信协议选择等方面的内容。

一、系统架构设计智能家电控制系统通常由硬件部分和软件部分组成。

硬件部分包括传感器、执行器、控制器等设备,用于采集环境信息和控制家电设备;软件部分则是系统的大脑,负责数据处理、决策逻辑和用户交互。

在基于C语言的设计中,我们需要考虑如何合理划分软件模块,使得系统具有良好的可扩展性和可维护性。

二、功能模块实现传感器数据采集模块传感器数据采集是智能家电控制系统的基础,通过传感器可以获取环境温湿度、光照强度、人体活动等信息。

在C语言中,我们可以通过调用相应的传感器接口库来实现数据采集功能,并进行数据处理和存储。

决策逻辑模块决策逻辑模块负责根据传感器数据和用户设定的条件来做出相应的控制决策,例如自动调节空调温度、开关灯光等。

在C语言中,我们可以使用条件语句和循环结构来实现决策逻辑,确保系统能够按照预期工作。

用户交互界面模块用户交互界面是用户与智能家电控制系统进行交互的窗口,用户可以通过界面设置各种参数和查看设备状态。

在C语言中,我们可以使用图形库或者命令行界面来实现用户交互功能,提高系统的易用性和友好性。

三、通信协议选择智能家电控制系统通常需要与手机App或者云平台进行通信,以实现远程控制和数据监测功能。

在选择通信协议时,需要考虑通信效率、安全性和兼容性等因素。

常见的通信协议包括MQTT、CoAP、HTTP 等,在基于C语言的设计中,我们可以选择适合硬件资源和网络环境的通信协议,并进行相应的封装和解析。

四、系统实现与调试在完成系统架构设计和功能模块实现后,我们需要进行系统整合和调试工作。

通过模块间接口测试、功能验证和性能优化等步骤,确保系统能够稳定可靠地运行。

单片机课程设计-微波炉

单片机课程设计-微波炉

电气与电子信息工程学院《单片机》课程设计报告题目:微波炉控制系统专业班级:学号: 201姓名:指导教师:胡蔷、汤立刚设计时间:2013年12月23日—2013年12月27日设计地点: K2-407单片机、微机原理实验室2013年11月20日单片机课程设计成绩评定表答辩或质疑记录:记录:1、微波炉控制系统的火力档位在仿真过程中,是有三个不同的发光二极管来控制,并没有热传感器来连接,因为是仿真所以无法做出效果来。

2、开关键控制显示屏,使其启动至用户状态。

可以关闭显示屏以及工作灯,但是并不能控制加热中的微波炉停止。

问题:1、为什么使用矩阵式键盘?答:本次设计采用了多个按钮,如果使用独立式键盘,将占用大量的I/O口资源,所以我们采用4×4矩阵式键盘,这样可以节省大量的I/O口资源。

2、为什么要使用MAX7221这个芯片?答:可以很方便地和单片机相连,未经扩展最多可用于8 位数码显示或64 段码显示。

经实际使用发现,该芯片具有占用单片机I/O 口少(仅三线)。

成绩评定依据:课程设计考勤情况(5%):课程设计仿真测试情况(15%)课程设计答辩情况(30%):完成设计任务及报告规范性(50%):最终评定成绩(以优、良、中、及格、不及格评定)指导教师签字:2013 年12 月日课程设计任务书2013~2014 学年第 1 学期专业班级:指导教师:胡蔷汤立刚工作部门:电气与电子信息工程学院电气自动化教研室一、课程设计题目单片机课程设计二、课程设计内容(含技术指标)1.设计目的及要求(1)根据具体设计课题的技术指标和给定条件,以单片机为核心器件,能独立而正确地进行方案论证和电路设计,完成仿真操作。

要求概念清楚、方案合理、方法正确、步骤完整;(2)熟悉、掌握各种外围接口电路芯片的工作原理和控制方法;(3)熟练使用单片机汇编语言或C51进行软件设计;(4)熟练使用Proteus、Keil软件进行仿真电路测试;(5)熟练使用Protel软件设计印刷电路板;(6)学会查阅有关参考资料和手册,并能正确选择有关元器件和参数;(7)编写设计说明书,参考毕业设计论文格式撰写设计报告。

可编程微波炉控制器系统设计

可编程微波炉控制器系统设计

图8 分频音响顶层图
图 9 分频音响仿真波形图
Verilog程序如下:
分频模块:module fenpin(clk,clkout,out500hz,out1khz,out1hz);
input clk;
output out500hz,out1khz,out1hz,clkout;
reg out500hz,out1khz,out1hz,clkout;
reg[24:0] i0;
图10 WEB主页
图11 功能设置页面
图12 状态显示页面
4.结果分析
该微波炉控制器,完成了大赛所要求的全部基本功能,并且还成功的进行了功能扩展,A/D-0809芯片,根据重量实现了判断烹调的时间长短——重量轻加热时间长,反之时间短的智能化控制。

另外还扩展了应用LCD用以显示Internet网络的IP地址和定时剩余时间。

更主要的扩展是应用以上系统成功的编制WEB页,TCP/IP协议实现网络通信,实现了远程信息化控制。

第5部分:操作说明。

C语言PID电炉温度控制系统

C语言PID电炉温度控制系统

摘要:自动控制系统在各个领域尤其是工业领域中有着及其广泛的使用,温度控制是控制系统中最为常见的控制类型之一。

随着单片机技术的飞速发展,通过单片机对被控对象进行控制日益成为今后自动控制领域的一个重要发展方向。

关键词:电炉温度控制系统设计一、前言自动控制系统在各个领域尤其是工业领域中有着及其广泛的使用,温度控制是控制系统中最为常见的控制类型之一。

随着单片机技术的飞速发展,通过单片机对被控对象进行控制日益成为今后自动控制领域的一个重要发展方向。

本设计要求用单片机设计一个电炉温度控制系统。

二、电炉温度控制系统的特性温控系统主要由温度传感器、温度调节仪、执行装置、被控对象四个部分组成,其系统结构图如图1所示。

被控制对象是大容量、大惯性的电热炉温度对象,是典型的多阶容积迟后特性,在工程上往往近似为包含有纯滞后的二阶容积迟后;由于被控对象电容量大,通常采用可控硅作调节器的执行器,其具体的电路图如图2所示。

执行器的特性:电炉的温度调节是通过调节剂(供电能源)的断续作用,改变电炉丝闭合时间Tb和断开时间Tk的比值α,α=Tb/Tk。

调节加热炉的温度,在工业上是通过在设定周期范围内,将电路接通几个周波,然后断开几个周波,改变晶闸管在设定周期内通断时间的比例,来调节负载两端交流平均电压即负载功率,这就是通常所说的调功器或周波控制器;调功器是在电源电压过零时触发晶闸管导通的,所以负载上得到的是完整的正弦波,调节的只是设定周期Tc内导通的电压周波。

如图3所示,设周期Tc内导通的周期的波数为n,每个周波的周期为T,则调功器的输出功率为P=n×T×Pn/Tc,Pn为设定周期Tc内电压全通过时装置的输出功率。

三、电炉的电加热原理当电流在导体中流过时,因为任何导体均存在电阻,电能即在导体中形成损耗,转换为热能,按焦耳楞次定律:Q=0.2412 Rt Q—热能,卡;I一电流,安9R一电阻,欧姆,t一时间,秒。

按上式推算,当1千瓦小时的电能,全部转换为热能时Q=(0.24×1000×36000)/1 000=864千卡。

微波炉可编程逻辑控制系统设计

微波炉可编程逻辑控制系统设计

微波炉可编程逻辑控制系统设计微波炉是家庭和商业厨房中必不可少的一种电器。

近年来,微波炉的生产和销售量不断攀升,这得益于其便利、高效和实惠的特点。

为了满足越来越多消费者的需求,微波炉技术也在不断发展。

现在的微波炉不仅仅能够简单地加热食物,还可以通过可编程逻辑控制系统实现更加复杂的操作。

微波炉的可编程逻辑控制系统主要基于嵌入式微处理器,并且使用实时操作系统来进行处理。

这种系统的设计可以实现微波炉的自动化操作,包括预设和定时加热、自动除霉、自动启动和停止等。

这种可编程控制系统的设计使得微波炉不仅仅成为了单一的加热设备,而是成为了一个真正的多功能厨房设备。

当我们设定微波炉的加热时间是,我们是通过可编程逻辑控制系统来完成这个任务的。

同样,当我们选择一个特定的食物时,微波炉的控制系统会根据这个设定的食物,选择最适合的加热选项,确保食物能够均匀受热。

此外,可编程逻辑控制系统还包括一个内置的温度计,以确保烤箱内部的温度能够被精确控制。

微波炉的可编程逻辑控制系统也可以通过无线网络和云计算进行远程控制。

这个功能可以让微波炉自动开始加热,同时将温度、加热时间和其他与加热相关的信息自动发送到云端。

这些数据会被保存起来,并能够让消费者通过智能手机、平板电脑或电脑等设备来进行查看和操作,方便实用。

此外,在微波炉的调制解调器(modem)中集成WiFi模块可以让微波炉更加便利。

在这种情况下,我们可以使用智能手机和平板电脑通过网络连接到微波炉。

通过这个连接,我们可以远程访问微波炉的状态信息,包括加热时间和温度,进行升级或者下载其他可用的应用程序。

总之,随着科技的不断发展和趋势的推动,微波炉的可编程逻辑控制系统越来越普及和重要。

这种技术解决了原始微波炉的诸多问题,同时还增加了微波炉的多功能性和安全性,让我们在烹饪过程中体验到了更多的方便和实用性。

C语言PID电炉温度控制标准系统

C语言PID电炉温度控制标准系统

摘要:自动控制系统在各个领域尤其是工业领域中有着及其广泛的应用,温度控制是控制系统中最为常见的控制类型之一。

随着单片机技术的飞速发展,通过单片机对被控对象进行控制日益成为今后自动控制领域的一个重要发展方向。

关键词:电炉温度控制系统设计一、前言自动控制系统在各个领域尤其是工业领域中有着及其广泛的应用,温度控制是控制系统中最为常见的控制类型之一。

随着单片机技术的飞速发展,通过单片机对被控对象进行控制日益成为今后自动控制领域的一个重要发展方向。

本设计要求用单片机设计一个电炉温度控制系统。

二、电炉温度控制系统的特性温控系统主要由温度传感器、温度调节仪、执行装置、被控对象四个部分组成,其系统结构图如图1所示。

被控制对象是大容量、大惯性的电热炉温度对象,是典型的多阶容积迟后特性,在工程上往往近似为包含有纯滞后的二阶容积迟后;由于被控对象电容量大,通常采用可控硅作调节器的执行器,其具体的电路图如图2所示。

执行器的特性:电炉的温度调节是通过调节剂(供电能源)的断续作用,改变电炉丝闭合时间Tb与断开时间Tk的比值α,α=Tb/Tk。

调节加热炉的温度,在工业上是通过在设定周期范围内,将电路接通几个周波,然后断开几个周波,改变晶闸管在设定周期内通断时间的比例,来调节负载两端交流平均电压即负载功率,这就是通常所说的调功器或周波控制器;调功器是在电源电压过零时触发晶闸管导通的,所以负载上得到的是完整的正弦波,调节的只是设定周期Tc内导通的电压周波。

如图3所示,设周期Tc内导通的周期的波数为n,每个周波的周期为T,则调功器的输出功率为P= n×T×Pn/Tc,Pn为设定周期Tc内电压全通过时装置的输出功率。

三、电炉的电加热原理当电流在导体中流过时,因为任何导体均存在电阻,电能即在导体中形成损耗,转换为热能,按焦耳楞次定律:Q=0.2412 Rt Q—热能,卡;I一电流,安9R一电阻,欧姆,t一时间,秒。

可编程微波炉控制器系统设计概要

可编程微波炉控制器系统设计概要

可编程微波炉控制器系统设计摘要本可编程微波炉控制器系统,以A T89C52单片机为核心,由计时系统、手动键盘、温度测量、语音发声、网络控制器、状态显示等功能模块组成。

本系统对功能设置、数据装入和定时设定功能进行了重点设计。

此外,扩展了液晶显示工作状态、数码管时间显示、微波火力档位设定、火力指示、温度测量与显示、语音提示、Internet远程控制等功能。

其中常规基础部分可以选择火力并设定加热时间,系统通过发光二极管显示选择的火力当。

系统启动后开始倒计时,数码管显示剩余时间。

此外系统还能通过温度传感器DS18B20测量事物的温度,通过LED显示。

LED还能显示所选择的键入的烹饪方案。

计时结束即工作完毕时,系统发出警报。

智能控制部分还可以通过Internet实现远程控制,设定微波炉的工作方案,预制启动和结束的工作时间,LED显示IP地址等功能。

关键词AT89S52;自动控制;远程控制;无线传输1 绪论微波炉已有50多年的发展历史。

时至今日,微波炉已实现了高度工业化规模生产。

主要生产为日本、韩国及欧洲的一些发达国家。

我国自80年代开始小规模生产微波炉,发展至今,已具有相当的生产能力,成为该行业不可小视的生力军。

微波炉在世界上发达国家的家庭普及率很高。

美国是微波炉最大的消费市场。

中国老百姓也已经开始认识和接受微波炉,可以预见,中国也将成为一个巨大的微波炉市场。

随着科技的发展,生活水平的提高,人们对微波炉的要求也越来越高。

未来的发展趋势将是智能化、信息化,使微波炉的发展更人性化、功能越来越完善。

为此,我们选择了可编程微波炉控制系统设计作为自己的课程设计,设计一个高质量的信息智能微波炉控制系统,使微波炉更人性化,使用更方便。

2 系统方案与论证为了能够设计出一种成本低廉,精确度较高,操作简单,界面更友好的微波率控制系统,本设计通过方案论证选择最合适的一个。

2.1主控制器方案一:采用数字逻辑芯片。

本系统有功能设置、数据装入、定时、显示、音响控制多个功能模块。

题目要求--可编程微波炉控制系统

题目要求--可编程微波炉控制系统

可编程微波炉控制系统注:有三种显示方式,选择其中一种(a、LED数码管;b、1602LCD;c、12864LCD)显示1、任务设计制作一个微波炉控制电路,具有三档微波炉加热功能,分别表示微波加热为烹调、烘烤、解冻,实验中用LED或LCD模拟。

系统功能框图如下:2、要求1)制定一个在不同功能时火力的控制时序表。

具有三档微波加热功能,分别表示微波炉工作状态为烹调、烘烤、解冻,试验中用LED或LCD模拟2)实现工作步骤:复位待机-----》检测显示电路-----》设置输出功能和定时器初值-----》启动定时和工作开始-----》结束烹调和音响提示3)在上电和手动按复位键时,控制器输出的微波功率控制信号为0,微波加热处于待机状态,时间显示电路显示为00.004)具有4位时间预置电路,按键启动时间设置,最大预设数为99分99秒5)设定初值后按开启键,一方面按选择的挡位启动相应的微波加热;另一方面使计时电路以秒为单位做倒计时。

当计时到时间为0时,则断开微波加热器,并给出声音提示,即蜂鸣器发出2至3秒的双音频提示音6)若在待机状态时按测试键,采用LED显示,则四位数码管交替显示全亮和全灭状态,以检测数码管各发光段的好坏;若采用LCD显示,可自行确定检测方式7)暂停键,可在工作中暂时停止,再次按下此键,能继续执行8)未工作时显示北京时间,可调整用户按“START”键,系统启动待机,LED 显示“0000”,若按检测键“CHECK”,键,数码管闪烁显示“8888”,说明显示系统工作正常。

这时语音提示“请选择工作模式”。

用户按键则选择手动模式,反之系统默认上次设置。

手动模式下,语音提示:“请选择工作状态”,用户可按键选择,数码管显示当前状态:烹调~peng,烘烤~Hong,解冻~dong,清炖~dun。

选择后,语音提示“请选择火力档位”,用户可对当前工作状态步进选择高,中,低3 个火力档位,对应的指示灯亮。

然后按键进行时间预置,最大可预置99 分99秒。

c语言微波炉课程设计

c语言微波炉课程设计

c语言微波炉课程设计一、课程目标知识目标:1. 理解C语言的基本语法和结构;2. 掌握C语言中常用的数据类型、运算符和表达式;3. 学会使用C语言进行基本的输入输出操作;4. 了解C语言在嵌入式系统中的应用,如微波炉控制程序的开发。

技能目标:1. 能够运用C语言编写简单的程序,实现基本的逻辑控制和数据处理;2. 能够分析问题,设计并实现相应的C语言程序解决问题;3. 能够运用所学知识,完成一个微波炉控制程序的编写和调试;4. 培养学生的编程思维和解决问题的能力。

情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发学生学习C语言的积极性;2. 培养学生良好的编程习惯,注重代码规范和逻辑性;3. 培养学生的团队合作精神,学会在团队中沟通协作,共同解决问题;4. 引导学生关注科技发展,了解编程在现实生活中的应用,认识到编程对未来的重要性。

课程性质:本课程为实践性较强的学科,旨在通过项目驱动的教学方式,让学生在实际操作中掌握C语言的基本知识和技能。

学生特点:学生具备一定的计算机基础,对编程有一定兴趣,但编程经验不足。

教学要求:注重理论与实践相结合,通过案例教学和项目实践,使学生能够在实际操作中掌握C语言的知识点和技能。

同时,关注学生的个体差异,提供个性化的指导和支持。

在教学过程中,分解课程目标为具体的学习成果,便于教学设计和评估。

二、教学内容1. C语言基础语法:- 数据类型、变量和常量- 运算符和表达式- 控制语句(顺序、选择、循环)- 数组、字符串- 函数2. C语言编程实践:- 输入输出操作- 程序流程控制- 函数的定义和调用- 数组、字符串操作3. 嵌入式系统与C语言应用:- 嵌入式系统简介- C语言在嵌入式系统中的应用- 微波炉控制程序案例分析4. 项目实践:- 设计并实现一个简单的微波炉控制程序- 程序编写、调试与优化- 团队合作与分工教学内容安排与进度:第一周:C语言基础语法学习(数据类型、变量、运算符)第二周:C语言基础语法学习(控制语句、数组、字符串)第三周:C语言编程实践(输入输出、流程控制、函数)第四周:嵌入式系统与C语言应用(嵌入式简介、微波炉案例分析)第五周:项目实践(程序设计、调试与优化)第六周:项目展示与总结教材章节关联:《C程序设计》第一章至第四章(基础语法、控制语句、函数)《嵌入式系统原理及应用》第三章(嵌入式系统与C语言)教学内容根据课程目标和学生的实际情况进行选择和组织,保证科学性和系统性。

微波炉控制系统c语言编程

微波炉控制系统c语言编程

微波炉控制系统c语⾔编程#include#include#define nop _nop_#define uchar unsigned char#define uint unsigned int/*****************************************************************************/ //定义sbit WEI_LE=P1^1; //数码管控制sbit DUAN_LE=P1^0;sbit RS=P2^0; //LCD端⼝sbit RW=P2^1;sbit E=P2^2;#define DB P0sbit PSB=P2^3;sbit NC=P2^4;sbit RST=P2^5;sbit BEEP=P1^0; //蜂鸣器sbit KEY1=P3^4; //按键sbit KEY2=P3^5;sbit KEY3=P3^2;sbit KEY4=P3^3;uchar key_up,key_x; //按键变量uchar fire,min,sec; //⽕⼒和时间变量uchar o_hour,o_min,o_sec; //预约时间变量/*****************************************************************************/ //辅助函数//延迟函数void delay50us(uint m) //for双重嵌套型。

公式:t=m*(2*n+12)+偏差值。

m⽐较⼩时,偏差为+13;m=0时,t=14。

{uchar n;for(;m>0;m--)for(n=19;n>0;n--);}void delay500us(uint m) //for双重嵌套型。

公式:t=m*(2*n+12)+偏差值。

m⽐较⼩时,偏差为+13;m=0时,t=14。

{uchar n;for(;m>0;m--)for(n=244;n>0;n--);}/*****************************************************************************/ //底层驱动//LCD驱动void lcd_wcom(uchar com) //写指令函数{delay50us(1);RS=0;RW=0;DB=com;E=1;delay50us(1);E=0;}void lcd_wdat(uchar dat) //写数据函数{delay50us(1);RS=1;RW=0;DB=dat;E=1;delay50us(1);E=0;}void lcd_init() //初始化{lcd_wcom(0x30);delay50us(2);lcd_wcom(0x30);delay50us(1);lcd_wcom(0x0c);delay50us(2);lcd_wcom(0x01);delay500us(20);lcd_wcom(0x06);delay50us(2);}void lcd_wstr(uchar *s) //写字符串{while(*s!=0)lcd_wdat(*s++);}void lcd_clr() //清屏{lcd_wcom(0x01);delay500us(3);}//按键驱动void key_get() //按键录⼊{if(KEY1==1 && KEY2==1 && KEY3==1 && KEY4==1){key_up=1;}else{if(KEY1==0 && key_up==1){key_up=0;key_x=1;}else if(KEY2==0 && key_up==1){key_up=0;key_x=2;}else if(KEY3==0 && key_up==1){key_up=0;key_x=3;}else if(KEY4==0 && key_up==1){key_up=0;key_x=4;}delay500us(100); //防抖}}/*****************************************************************************/ //应⽤层函数//显⽰相关信息void dis_author() //作者{lcd_clr();lcd_wcom(0x80);lcd_wstr("作者:");lcd_wstr("黄志辉");lcd_wcom(0x93); lcd_wstr("董晓敏");lcd_wcom(0x8b); lcd_wstr("蔡定材");while(key_up==0)key_get();key_x=0;}//预约时间void order_mark(uchar sel) //预约光标{switch(sel){case 1:lcd_wcom(0x89);lcd_wcom(0x0e);break;case 2:lcd_wcom(0x8b);lcd_wcom(0x0e);break;case 3:lcd_wcom(0x8d);lcd_wcom(0x0e);break;case 4:lcd_wcom(0x9a);lcd_wcom(0x0c);lcd_wdat(0x10);break; }}void order_shift(uchar sel) //预约调整{uchar quit=0;char a;do{lcd_wcom(0x89);lcd_wdat(o_hour/10+0x30);lcd_wdat(o_hour%10+0x30);lcd_wstr("时");lcd_wdat(o_min/10+0x30);lcd_wdat(o_min%10+0x30);lcd_wstr("分");lcd_wdat(o_sec/10+0x30);lcd_wdat(o_sec%10+0x30);lcd_wstr("秒");order_mark(sel);lcd_wcom(0x0f);while(key_up==0)key_get();while(key_up==1)key_get();switch(key_x){case 4:quit=1;break;case 3:quit=1;break;case 2:a=1;break;case 1:a=-1;}if(key_x==2 || key_x==1){switch(sel){case 1:o_hour=o_hour+a;if(o_hour==24)o_hour=0;if(o_hour==-1)o_hour=23;break;case 2:o_min=o_min+a;if(o_min==60)o_min=0;if(o_min==-1)o_min=59;break;case 3:o_sec=o_sec+a;if(o_sec==60)o_sec=0;if(o_sec==-1)o_sec=59;}}}while(quit!=1);key_x=0;}void order() //预约界⾯{static uchar sel=1;uchar quit=0;do{lcd_clr();lcd_wcom(0x82);lcd_wstr(" [预约]"); lcd_wcom(0x92);lcd_wstr("倒计时:"); lcd_wcom(0x89);lcd_wdat(o_hour/10+0x30);lcd_wdat(o_hour%10+0x30);lcd_wstr("时");lcd_wdat(o_min/10+0x30);lcd_wdat(o_min%10+0x30);lcd_wstr("分");lcd_wdat(o_sec/10+0x30);lcd_wdat(o_sec%10+0x30);lcd_wstr("秒");lcd_wcom(0x9b);lcd_wstr("开始"); order_mark(sel);while(key_up==0)key_get();while(key_up==1)key_get(); switch(key_x){case 4:switch(sel){case 1:case 2:case 3:order_shift(sel);break;case 4:break;}break;case 3:quit=1;break;case 2:sel--;if(sel<1)sel=4;break; case 1:sel++;if(sel>4)sel=1;}}while(quit!=1);lcd_wcom(0x0c);key_x=0;}//调整⽕⼒和时间void shift_mark(uchar sel) //调整光标{switch(sel){case 1:lcd_wcom(0x92);lcd_wcom(0x0c);lcd_wdat(0x10);break; case 2:lcd_wcom(0x8b);lcd_wcom(0x0e);break;case 3:lcd_wcom(0x8d);lcd_wcom(0x0e);break;case 4:lcd_wcom(0x98);lcd_wcom(0x0c);lcd_wdat(0x10);break; case 5:lcd_wcom(0x9c);lcd_wcom(0x0c);lcd_wdat(0x10);}}void dis_fire_time() //显⽰⽕⼒和时间{uchar f;lcd_wcom(0x90);lcd_wstr("⽕⼒");f=fire;while(f--)lcd_wdat(0x04);f=8-fire;while(f--)lcd_wdat(0x20); lcd_wcom(0x88);lcd_wstr("时间");lcd_wdat(min/10+0x30);lcd_wdat(min%10+0x30);lcd_wstr(":");lcd_wdat(sec/10+0x30);lcd_wdat(sec%10+0x30);}void shift_fire_time(uchar custom_sel) //进⾏调整{uchar quit=0;char a;do{dis_fire_time();shift_mark(custom_sel);lcd_wcom(0x0f);while(key_up==0)key_get();while(key_up==1)key_get();switch(key_x){case 4:quit=1;break;case 3:quit=1;break;case 2:a=1;break;case 1:a=-1;}if(key_x==2 || key_x==1){switch(custom_sel){case 1:fire=fire+a;if(fire==0)fire=1;if(fire==9)fire=8;break;case 2:min=min+a;if(min==60)min=0;if(min==-1)min=59;break;case 3:sec=sec+a;if(sec==60)sec=0;if(sec==-1)sec=59;}}}while(quit!=1);key_x=0;}void custom_heat() //⾃定义{uchar quit=0;static uchar sel=1;static uchar custom_fire=1,custom_min=00,custom_sec=00; fire=custom_fire;min=custom_min;sec=custom_sec;do{lcd_clr();lcd_wcom(0x82);lcd_wstr(" [⾃定义]");dis_fire_time();lcd_wcom(0x99);lcd_wstr("预约");lcd_wcom(0x9d);lcd_wstr("开始");shift_mark(sel);while(key_up==0)key_get();while(key_up==1)key_get();switch(key_x){case 4:switch(sel){case 1:case 2:case 3:shift_fire_time(sel);custom_fire=fire;custom_min=min;custom_sec=sec; break;case 4:order();break;case 5:break;}break;case 3:quit=1;break;case 2:sel--;if(sel<1)sel=5;break;case 1:sel++;if(sel>5)sel=1;}}while(quit!=1);lcd_wcom(0x0c);key_x=0;}void fast_heat(uchar menu_sel) //快速加热{uchar quit=0;static uchar sel=5;do{lcd_clr();switch(menu_sel){case 1:lcd_wcom(0x82);lcd_wstr(" [烧烤]");fire=6;min=10;sec=0;break; case 2:lcd_wcom(0x82);lcd_wstr(" [汤类]");fire=7;min=1;sec=30;}dis_fire_time();lcd_wcom(0x99);lcd_wstr("预约");lcd_wcom(0x9d);lcd_wstr("开始");shift_mark(sel);while(key_up==0)key_get();while(key_up==1)key_get();switch(key_x){case 4:switch(sel){case 4:order();break;case 5:break;}break;case 3:quit=1;break;case 2:sel--;if(sel<4)sel=5;break;case 1:sel++;if(sel>5)sel=4;}}while(quit!=1);key_x=0;}//菜单void menu_mark(uchar sel) //菜单光标{switch(sel){case 1:lcd_wcom(0x90);break;case 2:lcd_wcom(0x88);break;case 3:lcd_wcom(0x98);break;}lcd_wdat(0x10);}void menu() //进⼊菜单{static uchar sel=1;do{lcd_clr();lcd_wcom(0x82);lcd_wstr(" [菜单]");lcd_wcom(0x91);lcd_wstr("烧烤");lcd_wcom(0x95);lcd_wstr("解冻");lcd_wcom(0x89);lcd_wstr("汤类");lcd_wcom(0x8d);lcd_wstr("蒸菜");lcd_wcom(0x99);lcd_wstr("⾃定义");menu_mark(sel);while(key_up==0)key_get();while(key_up==1)key_get();switch(key_x){case 4:switch(sel){case 1:case 2:fast_heat(sel);break;case 3:custom_heat();}break;case 3:dis_author();break;case 2:sel--;if(sel<1)sel=3;break;case 1:sel++;if(sel>3)sel=1;}}while(1);}/*****************************************************************************/ //主程序void main(){P0=0xFF; //开发板初始化(关数码管)DUAN_LE=1;DUAN_LE=0;P0=0x00;WEI_LE=1;WEI_LE=0;PSB=1;delay500us(1000); //芯⽚初始化lcd_init();lcd_wcom(0x91);lcd_wdat(0x02);lcd_wstr(" 欢迎使⽤");lcd_wdat(0x02); //开机画⾯lcd_wcom(0x89);lcd_wstr("智能微波炉"); delay500us(2000);menu(); //显⽰菜单}。

用义隆C语言写的一个简单小家电控制器

用义隆C语言写的一个简单小家电控制器

用义隆C语言写的一个简单小家电控制器#include "EM78x156xx.h"#define DISI() _asm{disi} #define ENI() _asm{eni} #define SLEP() _asm{slep}#define NOP() _asm{nop} #define WDTC() _asm{wdtc}#define uchar unsigned int #define uint unsigned short#define Key R53#define Bz R51#define Out R50#define Com1 R60#define Com2 R61#define Com3 R62#define Seg1 R63#define Seg2 R64#define Seg3 R65#define Seg4 R66#define Seg5 R67#define InCom1 (P6CR|=0x01) #define InCom2 (P6CR|=0x02) #define InCom3(P6CR|=0x04) #define OutCom1 (P6CR&=0x0E) #define OutCom2 (P6CR&=0x0D) #define OutCom3 (P6CR&=0x0B)bit OkFlag;bit BzOutFlag;bit StartFlag;bit KeyFlag;uchar Count @0x2F;uint BzOutTime;uint TimeFlag;uchar Minute;uchar Second;uchar BiasTime;const uchar Number1[10]={0x6F,0x06,0x3D,0x37,0x56,0x73,0x7B,0x26,0xFF,0x77}; const uchar Number2[10]={ 0xF7,0x03,0x5E,0x1F,0x8B,0x9D,0xFD,0x13,0xFF,0xBF};void SysInt(void);void KeyProcess(void);void Delayms(uint ms);void BzOut(void);void LcdDisplay(uchar Num1,uchar Num2);void TimeDisplay(void);void main(){SysInt();while(1){KeyProcess();TimeDisplay();}}void TimeDisplay(void){uchar temp1,temp2;//Count++;Out=!StartFlag;if(BzOutFlag==1){if((BzOutTime%1000)==0)BzOut();if(BzOutTime>=20000){BzOutTime=0;BzOutFlag=0;}BzOutTime++;}if((Count>=249)&&(StartFlag==1))//Count>=249 { Count=0;if(Second>0)Second--;if(Second==0){if(Minute>0){Minute--;Second=60;}else{StartFlag=0;BzOutFlag=1;OkFlag=1;}}}if(OkFlag==1){LcdDisplay(0x0,0x0);}else if(Minute>=1){if((Minute>=1)&&(Second>0)&&(StartFlag==1)) { temp2=(Minute+1)/10;temp1=(Minute+1)%10;}else{temp2=Minute/10;temp1=Minute%10;}if((StartFlag==1)&&(Count>125)){LcdDisplay(0x00,0x00);}else{LcdDisplay(Number1[temp1],Number2[temp2]);} } else{temp2=Second/10;temp1=Second%10;LcdDisplay(Number1[temp1],Number2[temp2]);}}void SysInt(void) {WDTCR=0;DISI();_asm{mov a,@0x44 contw}ISR=0;IMR=0x01; TCC=5;PHCR=0xFF; PDCR=0xFF; P5CR=0x08; P6CR&=0x07; InCom1;InCom2;InCom3;Seg1=0;Seg2=0;Seg3=0;Seg4=0;Seg5=0;BiasTime=0; BzOutTime=0; TimeFlag=0; OkFlag=0; StartFlag=0; BzOutFlag=0; Count=0;Second=0; Minute=0; Bz=0;Out=1;KeyFlag=0; ENI();}void LcdDisplay(uchar Num1,uchar Num2) {switch(BiasTime){case 0:OutCom1;Com1=1;InCom2;InCom3;if((Num1&0x01)==0)Seg1=1; else Seg1=0; if((Num1&0x08)==0)Seg2=1; else Seg2=0; if((Num2&0x01)==0)Seg3=1; else Seg3=0; if((Num2&0x04)==0)Seg4=1; else Seg4=0; if((Num2&0x20)==0)Seg5=1; else Seg5=0; break;case 1:OutCom1;Com1=0;InCom2;InCom3;if((Num1&0x01)==0)Seg1=0; else Seg1=1; if((Num1&0x08)==0)Seg2=0; else Seg2=1; if((Num2&0x01)==0)Seg3=0; else Seg3=1; if((Num2&0x04)==0)Seg4=0; else Seg4=1; if((Num2&0x20)==0)Seg5=0; else Seg5=1; break;case 2:InCom1;OutCom2;Com2=1;InCom3;if((Num1&0x02)==0)Seg1=1; else Seg1=0; if((Num1&0x10)==0)Seg2=1;else Seg2=0;if((Num2&0x02)==0)Seg3=1; else Seg3=0; if((Num2&0x08)==0)Seg4=1; else Seg4=0; if((Num2&0x40)==0)Seg5=1; else Seg5=0; break;case 3:InCom1;OutCom2;Com2=0;InCom3;if((Num1&0x02)==0)Seg1=0; else Seg1=1; if((Num1&0x10)==0)Seg2=0; else Seg2=1; if((Num2&0x02)==0)Seg3=0; else Seg3=1; if((Num2&0x08)==0)Seg4=0; else Seg4=1; if((Num2&0x40)==0)Seg5=0; else Seg5=1; break;case 4:InCom1;InCom2;OutCom3;Com3=1;if((Num1&0x04)==0)Seg1=1; else Seg1=0; if((Num1&0x20)==0)Seg2=1; else Seg2=0; if((Num1&0x40)==0)Seg3=1; else Seg3=0; if((Num2&0x10)==0)Seg4=1; else Seg4=0; if((Num2&0x80)==0)Seg5=1; else Seg5=0; break;case 5:InCom1;InCom2;OutCom3;Com3=0;if((Num1&0x04)==0)Seg1=0;else Seg1=1;if((Num1&0x20)==0)Seg2=0;else Seg2=1;if((Num1&0x40)==0)Seg3=0;else Seg3=1;if((Num2&0x10)==0)Seg4=0;else Seg4=1;if((Num2&0x80)==0)Seg5=0;else Seg5=1;default:break;}Delayms(1);BiasTime++;if(BiasTime>=6)BiasTime=0;}void KeyProcess(void){if((TimeFlag>0)&&(TimeFlag<2000)){OkFlag=0;TimeFlag++;if(TimeFlag>=2000)StartFlag=1;}if((Key==0)&&(KeyFlag==0)&&(StartFlag==0)) { TimeFlag=1;Minute++;if(Minute>99)Minute=0;if(OkFlag==1){//OkFlag=0;// Minute="0";SysInt();}KeyFlag=1;}else{if(Key==1)KeyFlag=0;if((Key==0)&&(KeyFlag==0)&&(StartFlag==1)) { SysInt();KeyFlag=1;}}}void BzOut(void){uchar i,j;for(i=0;i<150;i++){Bz=!Bz;for(j=0;j<58;j++){NOP();NOP();}}/*Delayms(50);for(i=0;i<100;i++){Bz=!Bz;for(j=0;j<50;j++){NOP();NOP();}}*/Bz=0;}void Delayms(uint ms){uint i,j;for(i=0;i<ms;i++)for(j=0;j<120;j++)NOP();}void _intcall interrupt_l(void) @0x08:low_int 0 {_asm{//save A --> 0x1F ; R3 --> 0x3E (ram bank 1); R4 --> 0x3F (ram bank 1) MOV 0X1F,A ;backup A to 0x1FSWAPA 0X04 ;backup R4 to 0x3F at bank 3MOV 0X3F,A ;backup R4 to 0x3F at bank 3SWAPA 0X03MOV 0X3E,A ;backup R3 to 0x3E at bank 3}}void _intcall interrupt(void) @int 0 {if(TCIF==0)return;DISI();ISR=0;_asm{mov a,@0x44contw}TCC=5;_asm{SWAPA 0X3E ;restore R3MOV 0X03,ASWAPA 0X3F ;restore R4MOV 0X04,ASWAP 0X1F ;restore ASWAPA 0X1F}_asm{INC 0X2F}ENI();}。

南京工程学院单片机课程设计九微波炉控制程序

南京工程学院单片机课程设计九微波炉控制程序

#include<absacc.h>#define uchar unsigned char#define uint unsigned int#define com8255 XBYTE[0x8003] //8255控制口地址#define pa_8255 XBYTE[0x8000] //A口地址#define pb_8255 XBYTE[0X8001] //B口地址#define wela XBYTE[0X8002] //位码地址#define dula XBYTE[0X8004] //段码地址sbit LED1=P1^1。

uchar num,fenh,fenl,miaoh,miaol,huo=0x10,flag=0,flag1=0。

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x3f}。

//共阴数码管显示码void delayms(uint z) //延时Z毫秒(6M晶振){uint x,y。

for(x=z。

x>0。

x--)for(y=55。

y>0。

y--)。

}uchar keyscan(void) //键盘扫描子函数{wela=0x1f。

pb_8255=pb_8255&0x0f。

if(pb_8255!=0x0f){ delayms(15)。

if(pb_8255!=0x0f){switch(pb_8255){case 0x0e:num=0。

break。

case 0x0d:num=1。

break。

case 0x0b:num=4。

break。

case 0x07:num=7。

break。

}flag++。

//每按一次时间设定和火候设定键flag 就加一while(pb_8255!=0x0f)。

}}wela=0x2f。

C语言PID电炉温度控制系统

C语言PID电炉温度控制系统

摘要:自动控制系统在各个领域尤其是工业领域中有着及其广泛的使用,温度控制是控制系统中最为常见的控制类型之一。

随着单片机技术的飞速发展,通过单片机对被控对象进行控制日益成为今后自动控制领域的一个重要发展方向。

关键词:电炉温度控制系统设计一、前言自动控制系统在各个领域尤其是工业领域中有着及其广泛的使用,温度控制是控制系统中最为常见的控制类型之一。

随着单片机技术的飞速发展,通过单片机对被控对象进行控制日益成为今后自动控制领域的一个重要发展方向。

本设计要求用单片机设计一个电炉温度控制系统。

二、电炉温度控制系统的特性温控系统主要由温度传感器、温度调节仪、执行装置、被控对象四个部分组成,其系统结构图如图1所示。

被控制对象是大容量、大惯性的电热炉温度对象,是典型的多阶容积迟后特性,在工程上往往近似为包含有纯滞后的二阶容积迟后;由于被控对象电容量大,通常采用可控硅作调节器的执行器,其具体的电路图如图2所示。

执行器的特性:电炉的温度调节是通过调节剂(供电能源)的断续作用,改变电炉丝闭合时间Tb和断开时间Tk的比值α,α=Tb/Tk。

调节加热炉的温度,在工业上是通过在设定周期范围内,将电路接通几个周波,然后断开几个周波,改变晶闸管在设定周期内通断时间的比例,来调节负载两端交流平均电压即负载功率,这就是通常所说的调功器或周波控制器;调功器是在电源电压过零时触发晶闸管导通的,所以负载上得到的是完整的正弦波,调节的只是设定周期Tc内导通的电压周波。

如图3所示,设周期Tc内导通的周期的波数为n,每个周波的周期为T,则调功器的输出功率为P=n×T×Pn/Tc,Pn为设定周期Tc内电压全通过时装置的输出功率。

三、电炉的电加热原理当电流在导体中流过时,因为任何导体均存在电阻,电能即在导体中形成损耗,转换为热能,按焦耳楞次定律:Q=0.2412 Rt Q—热能,卡;I一电流,安9R一电阻,欧姆,t一时间,秒。

按上式推算,当1千瓦小时的电能,全部转换为热能时Q=(0.24×1000×36000)/1 000=864千卡。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
dis_fire_time();
lcd_wcom(0x99);lcd_wstr("预约");
lcd_wcom(0x9d);lcd_wstr("开始");
shift_mark(sel);
while(key_up==0)key_get();
while(key_up==1)key_get();
switch(key_x)
sbit KEY1=P3^4;//按键
sbit KEY2=P3^5;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
uchar key_up,key_x;//按键变量
uchar fire,min,sec;//火力和时间变量
uchar o_hour,o_min,o_sec;//预约时间变量
E=1;
delay50us(1);
E=0;
}
void lcd_wdat(uchar dat)//写数据函数
{
delay50us(1);
RS=1;
RW=0;
DB=dat;
E=1;
delay50us(1);
E=0;
}
void lcd_init()//初始化
{
lcd_wcom(0x30);
delay50us(2);
lcd_wcom(0x93);lcd_wstr("董晓敏");
lcd_wcom(0x8b);lcd_wstr("蔡定材");
while(key_up==0)key_get();
key_x=0;
}
//预约时间
void order_mark(uchar sel)//预约光标
{
switch(sel)
{
case 1:lcd_wcom(0x89);lcd_wcom(0x0e);break;
#include <reg52.h>
#include <intrins.h>
#define nop _nop_
#define uchar unsigned char
#define uint unsigned int
/*****************************************************************************/
lcd_wstr("分");
lcd_wdat(o_sec/10+0x30);
lcd_wdat(o_sec%10+0x30);
lcd_wstr("秒");
order_mark(sel);
lcd_wcom(0x0f);
while(key_up==0)key_get();
while(key_up==1)key_get();
{
uchar quit=0;
static uchar sel=1;
static uchar custom_fire=1,custom_min=00,custom_sec=00;
fire=custom_fire;min=custom_min;sec=custom_sec;
do
{
lcd_clr();
lcd_wcom(0x82);lcd_wstr(" [自定义]");
//定义
sbit WEI_LE=P1^1;//数码管控制
sbit DUAN_LE=P1^0;
sbit RS=P2^0;//LCD端口
sbit RW=P2^1;
sbit E=P2^2;
#define DB P0
sbit PSB=P2^3;
sbit NC=P2^4;
sbit RST=P2^5;
sbit BEEP=P1^0;//蜂鸣器
}
}
while(quit!=1);
lcd_wcom(0x0c);
key_x=0;
}
//调整火力和时间
void shift_mark(uchar sel)//调整光标
{
switch(sel)
{
case 1:lcd_wcom(0x92);lcd_wcom(0x0c);lcd_wdat(0x10);break;
char a;
do
{
dis_fire_time();
shift_mark(custom_sel);
lcd_wcom(0x0f);
while(key_up==0)key_get();
while(key_up==1)key_get();
switch(key_x)
{
case 4:quit=1;break;
lcd_wcom(0x30);
delay50us(1);
lcd_wcom(0x0c);
delay50us(2);
lcd_wcom(0x01);
delay500us(20);
lcd_wcom(0x06);
delay50us(2);
}
void lcd_wstr(uchar *s)//写字符串
{
while(*s!=0)lcd_wdat(*s++);
case 3:quit=1;break;
case 2:a=1;break;
case 1:a=-1;
}
if(key_x==2 || key_x==1)
{
switch(custom_sel)
{
case 1:fire=fire+a;
if(fire==0)fire=1;
if(fire==9)fire=8;
break;
}
}
void dis_fire_time()//显示火力和时间
{
uchar f;
lcd_wcom(0x90);lcd_wstr("火力");
f=fire;while(f--)lcd_wdat(0x04);f=8-fire;while(f--)lcd_wdat(0x20);
lcd_wcom(0x88);lcd_wstr("时间");
else if(KEY2==0 && key_up==1){key_up=0;key_x=2;}
else if(KEY3==0 && key_up==1){key_up=0;key_x=3;}
else if(KEY4==0 && key_up==1){key_up=0;key_x=4;}
delay500us(100);//防抖
{
uchar n;
for(;m>0;m--)
for(n=19;n>0;n--);
}
void delay500us(uint m)//for双重嵌套型。公式:t=m*(2*n+12)+偏差值。m比较小时,偏差为+13;m=0时,t=14。
{
uchar n;
for(;m>0;m--)
for(n=244;n>0;n--);
lcd_wdat(o_sec%10+0x30);
lcd_wstr("秒");
lcd_wcom(0x9b);lcd_wstr("开始");
order_mark(sel);
while(key_up==0)key_get();
while(key_up==1)key_get();
switch(key_x)
{
}
void lcd_clr()//清屏
{
lcd_wcom(0x01);
delay500us(3);
}
//按键驱动
void key_get()//按键录入
{
if(KEY1==1 && KEY2==1 && KEY3==1 && KEY4==1){key_up=1;}
else
{
if(KEY1==0 && key_up==1){key_up=0;key_x=1;}
switch(key_x)
{
case 4:quit=1;break;
case 3:quit=1;break;
case 2:a=1;break;
case 1:a=-1;
}
if(key_x==2 || key_x==1)
{
switch(sel)
{
case 1:o_hour=o_hour+a;
if(o_hour==24)o_hour=0;
}
/*****************************************************************************/
//底层驱动
//LCD驱动
void lcd_wcom(uchar com)//写指令函数
{
delay50us(1);
RS=0;
RW=0;
DB=com;
if(o_hour==-1)o_hour=23;
break;
case 2:o_min=o_min+a;
if(o_min==60)o_min=0;
if(o_min==-1)o_min=59;
break;
case 3:o_sec=o_sec+a;
if(o_sec==60)o_sec=0;
if(o_sec==-1)o_sec=59;
{
uchar quit=0;
char a;
do
{
lcd_wcom(0x89);
lcd_wdat(o_hour/10+0x30);
相关文档
最新文档