摘 要
本次课程设计通过keilC软件和Proteus软件设计一个电风扇模拟控制系统设计。基于AT89C51芯片实现了用四位数码管实时显示电风扇的工作状态,最高位显示风类:“自然风”显示“01” 、“常风”显示“02” 、“睡眠风”显示“03”。后3位显示定时时间:动态倒计时显示剩余的定时时间,无定时显示“000”。设计一个“定时”键,用于定时时间长短设置;设置一个“摇头”键用于控制电机摇头。设计过热检测与保护电路,若风扇电机过热,则电机停止转动,电机冷却后电机又恢复转动。最终完成了设计任务。
关键词:AT89C54 keilC软件 Proteus软件
目录
1 KEIL的使用 ............................................................. 1 1.1 Proteus的使用 ..................................................................................................... 错误!未定义书签。 1.1.1软件打开 ............................................................................................................... 错误!未定义书签。 1.1.2工作界面 ............................................................................................................... 错误!未定义书签。 1.2 Keil C51 的使用.................................................................................................................................... 1 1.2.1软件的打开 ............................................................................................................................................ 1 1.2.2工作界面 ................................................................................................................................................. 1 1.2.3 电风扇实例程序设计 ........................................................................................................................ 2 2系统主要硬件电路设计 .................................................... 6 2.1设计方案特点 ............................................................................................................................................ 6 2.2关于AT89C51单片机的介绍 ............................................................................................................... 7 2.2.1主要特性: ............................................................................................................................................ 8 2.2.2管脚说明: ............................................................................................................................................ 8 2.2.3.振荡器特性:.................................................................................................................................. 10 2.3仿真与调试 ............................................................................................................................................... 10 3软件设计部分 ........................................................... 14 3.1复位电路 ................................................................................................................................................... 14 3.2时钟电路 ................................................................................................................................................... 15 3.3显示电路设计 .......................................................................................................................................... 15 3.4框图流程 ................................................................................................................................................... 16 总结 .................................................................... 19 致谢 .................................................................... 20 参考文献 ................................................................ 21 附录 .................................................................... 22
电风扇模拟控制系统设计
1 Keil的使用
1.1 Keil C51 的使用
1.1.1软件的打开
双击桌面上的Keil uVision3 图标或者单击屏幕左下方的“开始”→“程序”→“Keil uVision3”,出现如图1.3所示界面,随后就进入了Keil uVision3集成环境。
图1.3启动Keil uVision3时的界面
1.1.2工作界面
Keil uVision2的工作界面是一种标准的Windows界面,包括:标题栏、主菜单、标准工具栏、代码窗口等,如图1.4所示。
1
电风扇模拟控制系统设计
图1.4工作界面
关于该软件的使用,与学习其他软件的方法没有多大区别,当然我们也不是每个功能都使用,没必要逐一介绍,下面举一个例子说明使用就行了,如果想详细了解,请搜索其详细使用资料。 1.1.3 电风扇实例程序设计
建立一个新工程,单击Project菜单,在弹出的下拉菜单中选中New Project选项,如图1.5所示。
图1.5 选择建立工程菜单
2
电风扇模拟控制系统设计
确定之后选择你要保存的路径,输入工程文件的名字,比如保存到“电风扇”目录里,工程文件的名字为“电风扇”如下图1.6所示,然后点击保存。
图1.6 创建工程
随后会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,KeilC51几乎支持所有的单片机,由于Proteus选用AT89C52原理图,那么选择AT89C52之后,右边栏是对这个单片机的基本的说明,然后点击确定即可,如图1.7所示。
图1.7选择单片机的型号
完成上一步骤后,工程到此就已经创建起来了,其屏幕如图1.8所示 。
3
电风扇模拟控制系统设计
图1.8已创建好的工程
工程虽然已经创建好,即已经建立好了一个工程来管理跑电风扇这样一个项目,但我们还没写一行程序,因此还需要建立相应的C文件或汇编文件。下面我们就来新建一个C文件,新建之后并保存,如图1.9所示。
图1.9新建C文件并保存
把刚才新建的电风扇.c添加到工程来添加后的界面如图1.10所示。
4
电风扇模拟控制系统设计
图1.10 添加完成后的界面
单击“Project”菜单,再在下拉菜单中单击“ ” 在下图中,单击“Output”中单击“Create HEX File” 选项,使程序编译后产生HEX代码,以便在Proteus里加载可执行代码,并单击“Target”选项,更改晶振频率(本例使用12M晶振),其如图1.11所示。
图1.11 修改晶振频率
到此,设置工作已完成,下面我们将编译、链接、转换成可执行文件(.HEX的文件)。 编译、链接、生成可执行文件。如图3.18所示。
5
电风扇模拟控制系统设计
图1.12 编译、链接、生成可执行文件图标
依次单击上述图2-12所示图标,如果没有语法错误,将会生成可执行文件,即本例可执行文件为“电风扇.hex”。
2电风扇硬件控制系统
2.1选题背景以及设计方案特点
背景介绍:
电风扇一度被认为是空调产品冲击下的淘汰品,其实并不完全如此,家用电风扇并没有随着空调的普及而淡出市场,近些年反而出现了市场销售复苏的态势。其主要原因:意识风扇和空调的降温效果不同——空调有强大的制冷功能,可以快速有效的降低环境温度,但电风扇的风更温和,更加适合老人儿童和体制较弱的人使用;而是电风扇有价格优势,价格低廉而且相对省电,安装和使用都非常简单。
设计方案特点:
本设计的基本思想是通过风扇自动采集室内温度,通过温度来自动开启风扇以及调节风扇功率,达到方便智能的效果,具体设计如下:
初始加电时,温度传感器DBS18B20采集室内温度,此时四位数码显示器显示当前
6
电风扇模拟控制系统设计
温度,如果温度超过最高设定温度,数码管显示H,表示温度过高进行报警。
风扇通过判断是否高于启动的最低温度,如果高于启动最低温度,风扇自动运行,一风扇一共设置为三个档,分为“小风”,“常风”和“大风”,在LED上分别对应“00”“01”“02”当LED显示温度不同时电风扇通过判断当前温度的大小进行智能工作。同时,定时器只要不进行新的时间设置,电路就将按系统默认控制负责定时工作的时间方式自动开始运行。
同时通过按键可以自行调节电风扇的三个工作状态,即用户自行调节风速使电风扇达到最理想的工作状态,用户随时自行选择使用“小风”状态,也可选择使用“常风”和“大风”状态。
过热检测使用传感器,当温度高于最高温度时,电风扇自动运行使室内降温到适宜温度。
2.2关于AT89C51单片机的介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。如图2.1。
7
电风扇模拟控制系统设计
图2.1
2.2.1主要特性:
·与MCS-51 兼容
·4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年 ·全静态工作:0Hz-24Hz ·三级程序存储器锁定 ·128*8位内部RAM ·32可编程I/O线 ·两个16位定时器/计数器 ·5个中断源 ·可编程串行通道 ·低功耗的闲置和掉电模式 ·片内振荡器和时钟电路
2.2.2管脚说明:
VCC:供电电压。 GND:接地。
8
电风扇模拟控制系统设计
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的一些特殊功能口,如下列所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器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禁止,置位无效。
9
电风扇模拟控制系统设计
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。
2.2.3.振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
2.3单片机的复位电路和时钟电路
2.3.1 复位电路
通过某种方式,使单片机内各寄存器的值变为初始状态的操作称为复位。如图4所示,在本电路中,AT89C51单片机在诗中电路工作以后,在RST端持续给出2个机器周期(24个时钟周期)的高电平就可以完成复位操作。
图4单片机复位电路 2.3.2时钟电路
单片机的时钟信号用来提供单片机内部各种操作的时间基准,时钟电路用来产生单片机工作所欲要的诗时钟信号。单片机内部有一个高增益的反向放大器,其输入端X1和X2用于外界晶体和电容,以构成自激振荡器,其发出的脉冲直接送入内部的时钟电路。单片机时钟电路如图5所示;
10
电风扇模拟控制系统设计
图5单片机时钟电路
2.4数字温度传感器模块设计
在选定单片机类型后,通常还要对一些严重影响系统性能指标的器件,如传感器进行选择。有事设计一个合理的温控系统往往因为传感器的限制而达不到应有的效果。该电路的根本任务是温度的实时测量并在LED上显示出来。因此选择一块好的温度传感器是笨设计的关键。典型的温度控制系统是由模拟温度传感器、A、D转换电路和单片机组成。但是由于模拟温度床啊器输出为模拟新型号,必须经过A/D转换环节获得数字信号后才能与单片机等微处理器接口,似的硬件电路结构复杂,成本较高。近年来,由于以DS18B20为代表的新型单总线数字式温度床啊器的突出优点使得它得到充分利用。
2.4.1DS18B20介绍
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
2.4.2 DS18B20的主要特性
适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数 据线供电,独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温;DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内;温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃ ;可编程 的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温 ;在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快;测量结果直接输出数字温度信号,以\"一 线总线\"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力 ;负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。
2.4.3 DS18B20的外形和内部结构
DS18B20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
11
电风扇模拟控制系统设计
DS18B20引脚定义:
(1)DQ为数字信号输入/输出端; (2)GND为电源地;
(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
2.4.4DS18B20的功能及使用说明
DS18B20数字温度传感器可以完成如下功能:
(1) 采用AT89C51单片机和DS18B20温度传感器通信,控制温度的采集过程和进行数据
通信;
(2) 提供DS18B20的使用外围电路温度显示LED电路一级DS18B20和单片机的通信接口
电路
(3) 利用发光二级管指示系统的工作状态,DS18B20温度传感器内置温度上下限; (4) 编写程序,完成单片机对温度数据的采集过程以及与DS18B20数据传输过程的控制
图7 DS18B20温度传感器接线图
如图7 DS18B20温度传感器接线图:主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条R01指令,最后发送RAM指令,这样才能对DS18B20进行预订的操作。复位要求CPU将数据线下拉500us,然后释放,当DS18B20收到信号后等待16~60微妙左右后发出60!240微妙的存在低脉冲,CPU收到此信号表示复位成功。
部分温度值与DS18B20输出的数字量对照表如表1 DS18B20数字量对照表: 表1 DS18B20数字量对照表
12
电风扇模拟控制系统设计
2.5 温度显示与控制模块
在单片机控制系统中,常用LED显示器来显示各种数字和符号。这种显示器显示清晰,亮度高,接口方便,广泛用于各种控制系统中。 2.5.1 LED显示等介绍
LED显示器在电路连接上有两种形式:一种是8个发光而接管的阳极都连载一起的,称之为共阳极型LED显示器;另一种是8个发光二极管连在一起的,称为共阴极型LED显示器。本设计是对室内温度进行显示,一般用户室内温度是是四位,所以我采用四位数码管显示,共阳极、动态显示方式。 2.5.2 LED两种显示方式
数码管要正常显示,就要驱动电路来驱动数码管的各个断码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态是式两类
(1) 静态显示驱动
静态驱动也称直流驱动。静态驱动是指每个数码管的每个段码都有一个单片机的I/P端口进行驱动,或者使用如BCD码二是禁止译码器译码进行驱动。静态驱动的有点事编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5x8=40跟I/O端口来驱动,要知道一个89c51单片机可用的I/O端口菜32个,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性 (2) 动态显示驱动
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示比划“a,b,c,d,e,f,g,dp”的同名端连在一起,另外为每个数码管的公共极COM增加位选控制电路,位选通用各自独立的I/O线控制,当单片机输出字型码时,所有数码管都接收到相同的字型码,胆究竟是哪个数码管会显示出字形,取决于单片机对位选通COM断端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,美味数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光而接管的余辉效应,尽管时间上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。LED显示电路图如图11所示:
13
电风扇模拟控制系统设计
3软件设计部分
此电路有:时钟电路,复位电路,驱动电路,显示电路等部分。
3.1复位电路
首先形成单片机最小系统,在89c51单片机芯片XTAL1、XTAL2加入时钟电路,RST加入复位电路,EA加入高电平。
89c51的复位是有外部复位电路来实现的。复位分为上复位和手动复位,我们采用的是手动复位,正常时按下S1键,9脚变为高电平,单片机复位,按键松开,通过电容放电,9脚回到低电平。
采用12MHZ的晶振,C=10uf ,r1=8.2k ,r2=200。
图2.3
14
电风扇模拟控制系统设计
3.2时钟电路
C1=30pf C2=30pf 晶振位12MHZ
图2.4
3.3显示电路设计
此显示电路采用两位静态数码管显示,用八位串入并出移位寄存器74LS164作为驱动电路,采用共阴极八段数码管原理图示意图如图2.5:
图 2-5
数码管 74LS245
从图中可以看出控制线只有两条:1、数据线;2、移位脉冲线。它只占用很少的IO口。
此为电路图,编程参见附录
15
电风扇模拟控制系统设计
本次设计的模拟电风扇控制系统设计有三种风种:自然风、常风、睡眠风 它们都是按照电机运行的占空比区别的。具有倒计时和摇头功能及信号指示。
3.4框图流程
16
电风扇模拟控制系统设计
17
电风扇模拟控制系统设计
18
电风扇模拟控制系统设计
总结
本系统是以单片机AT89C51芯片为核心部件,实现了电风扇系统控制功能,在软件上是花费时间最多的,我们上网找资料,上图书馆,尽可能的了解有关于电风扇的知识。通过这次设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步。
本应用系统设计的目的是通过在“单片机原理及应用”课堂上学习的知识,以及查阅资料,培养一种自学的能力。并且引导一种创新的思维,把学到的知识应用到日常生活当中。在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。
通过本次课程的设计,不但加深我对在课程上所学到的单片机理论知识的认识和理解,重新让自己认识到了这门学科的在应用方面的广阔前景,并且通过知识与应用于实践的结合更加丰富了自己的知识。扩展了知识面,不但掌握了本专业的相关知识,而且对其他专业的知识也有所了解,而且较系统的掌握单片机应用系统的开发过程,因而自身的综合素质有了全面的提高 。
经过这次一个较完整的产品设计和制作过程,对于认识到自己在知识方面存在的不足,明确今后的学习方向是非常有益的,为将来的的就业提前打了下坚实的基础。在设计过程中,得到了我的指导老师的悉心指导与帮助,还有其他老师和同学的大力支持和协助,在此一并表示衷心的感谢。
19
电风扇模拟控制系统设计
致谢
课程设计是培养学生综合所学知识,发现、提出、分析和解决实际问题,锻炼自身能力的重要培养,是对我们学生能力的具体陪练和考察过程。
短短一周的时间,我们做完了我们小组的单片机实验,感触很深,我们小组做的是“电风扇控制系统设计”对我们很有挑战,虽然在别人眼中我们的实验很简单,不过我们还是遇到了很多困难。
在这次设计任务中,通过我们三人的共同努力,老师的精心指导,还有和在网上找到的资料,我们主要掌握了动态发光显示数码管的编程,掌握了数据运算的编程方法,这也是编程必须掌握的知识,当然仿真与调试也是一个很重要的环节,也让我们收获良多,这其中就是硬件和软件两部分,虽然我们没有做硬件,但软件的制作与编程我们也做得很认真。你必须对程序的每部分都很熟悉,掌握每句程序的作用,这样你出现问题时才能根据问题改编程序,我们出现问题最多的也是在这个地方,对编程的不全面理解,导致我们不能顺利的完成这个程序任务,当然也有很多细节问题,我们三人小组的第一次合作虽然配合不是很好,但是,在过程中,我们都很努力,尽了全力,这让我们相互之间产生了默契。我很感谢我们小组的另外两位成员,他们让我学到了很多很多,也帮助了我很多,在这里再次感谢他们。
通过这次课题设计使我懂得了理论与实践相结合是非常重要的,从理论中得出结论,才能真正为社会服务,从而提高自己思考的能力,同时在设计中发现自己的不足之处。
这次设计的顺利完成,我们更要感谢我们的指导老师,他帮助了我们许多,就是在老师的讲解中,我们才迎刃而解,才对自己的专业知识有所真正的提高,也对自己的实验技术有所提高,对自己有所锻炼,在这里,我们真诚的感谢老师,忠心的谢谢您—老师!
20
电风扇模拟控制系统设计
参考文献
周国运主编 单片机原理及运用(C语言版) 2011年3月第三次印刷 www.baidu.com www.doc88.com
http://blog.sina.com. http://wenku.baidu.com
21
电风扇模拟控制系统设计
附录
#include #define uint unsigned int #define uchar unsigned char #define output P2 uchar code table1[4] ={0xf1,0xf2,0xf4,0xf8}; uchar code table2[4] ={0xf8,0xf4,0xf2,0xf1}; uchar code table3[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; int x,a,b,c,d,y,z; sbit start =P0^0; sbit stop =P0^1; sbit frount=P0^2; sbit behind=P0^3; sbit up =P0^4; sbit down =P0^5; sbit huang =P3^2; sbit lv =P3^3; sbit hong =P3^4; bit start_fu; bit frount_fu; bit behind_fu; sbit suo0=P3^1; sbit suo1=P3^0; void show(); void delay(uint x); void out1(); void out2(); void an_quan(); void main() {x=20; a=0; b=0; show(); an_quan(); while(1) { if(start==0) {start_fu=1; while(start_fu==1) {if(frount==0) {frount_fu=1; while(frount_fu==1) 22 电风扇模拟控制系统设计 {out1(); if(up==0) {x=x+5; if(x>90) {x=90; }; while(up==0); an_quan(); show(); }; if(stop==0) {frount_fu=0; P1 =0; start_fu =0; P0=0xff; }; if(down==0) { x=x-5; if(x<20) {x=20; }; while(down==0); an_quan(); show(); } } }; if(behind==0) {behind_fu=1; while(behind_fu==1) {out2(); if(down==0) {x=x-5; if(x<20) {x=20; }; while(down==0); an_quan(); show(); }; if(stop==0) 23 电风扇模拟控制系统设计 {behind_fu=0; P1 =0; start_fu =0; P0=0xff; }; if(up==0) {x=x+5; if(x>90) {x=90; }; while(up==0); an_quan(); show(); }; } } } } } } void delay(uint x) { uchar j; while(x-->0) { for(j=0;j<250;j++) {;;;;}; } } void out1() {++a; if(a==4) {a=0; }; P1=table1[a]; delay(x); } void out2() {++b; if(b==4) {b=0; }; P1=table2[b]; 24 电风扇模拟控制系统设计 delay(x); } void show() {y =90-x; c =y/10; suo0 =0; output =0x7f; output =table3[c]; suo1 =1; delay(10); suo1 =0; delay(10); d =y%10; output =0x7f; output =table3[d]; suo0 =1; delay(10); suo0 =0; delay(10); } void an_quan() {if(x>15) {hong=0; huang=1; lv =1; }; if(x>35) {lv =0; huang=1; hong =1; }; if(x>65) {huang=0; hong =1; lv =1; } } 25 因篇幅问题不能全部显示,请点此查看更多更全内容