基于51单片机的PWM调光灯设计 - 图文

更新时间:2024-03-08 09:49:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

摘要

目前市场上的LED台灯,作为LED的绿色护眼光源产品而进行开发和研究,还是作为我国的照明推广家用型产品。随着时代的变迁,社会的发展,节能和环保这一主题已经是当今社会必要发展的目标了、健康与人们的日常生活变得密不可分,科技的进步,也使家电更加智能化和人性化。台灯作为家电中基础的,也是必不可少的,所以,提出PWM调光灯设计。

本设计主要是将STC89C51RC单片机作为控制核心,这是将多种功能集于一体的智能LED台灯。该台灯具有手动、自动两种调节亮度的方式;主要的产品功能有呼吸模式、红外遥控操作等等。硬件的设计部分为单片机控制模块、按键控制模块、照明显示模块、光敏感应模块、LED灯指示报警模块、远程遥控模块等组成。单片机主要控制芯片型号选用STC89C51RC,LED指示报警模块选择三种颜色不同的LED指示灯来显示三种不同的工作模式,通过按键控制模块进行调整和控制工作模式和LED亮度程度,照明模块选用草帽型12白光LED,光敏感应模块采用可以对光敏信号的采集芯片ADC0832,并利用PWM调光技术对LED进行光度的自动调节。可以通过红外遥控远距离无线遥控,通过单片机C语言编程进行软件设计,将所需的设计要求全部可以进行功能的控制。

关键词

LED台灯 光度 PWM调光 自动调节

Abstract

LED lamp as LED green lighting products, as the country to promote the use of green lighting products. With the development of the times,energy saving and environmental protection, health and the peopledaily life are inseparable, the progress of science and technology,also makes home appliances more intelligent and humanized. The lamp as home appliances based, so is also essential,, put forward PWM dimming the lights design.

The design is based on STC89C51RC SCM as control core and multi functions in one of the intelligent LED lamp. The table lamp realizes the brightness with manual, automatic two types of regulation;respiratory mode function, but also has the function of infrared remote control. The design of the hardware part consists of MCU controlmodule, keyboard module, lighting module, photosensitive module,LED module, remote control module instruction. The MCU main control chip STC89C51RC, LED indicating module with three kinds ofdifferent colors of small LED to indicate different working modes,brightness through the key module to adjust the working mode and the LED lighting module, using 12 straw hat type white LED,photosensitive module uses ADC0832 chip implementation of a signal acquisition, automatic regulation and luminosity of LED using PWM dimming technology. Through the infrared remote control, wireless remote control, software design of the MCU C language programming,integrated control functions are realized by.

Key word

LED lamp dimming automatically adjust luminosity of PWM

2

目录

第1章 绪论.................................................................................................................. 5 1.1 课题研究背景......................................................................................................... 5 1.2 系统方案的提出..................................................................................................... 5

1.2.1 LED优势 ...................................................................................................... 5 1.2.2 方案简述....................................................................................................... 6 第2章 系统方案的选择............................................................................................... 7 2.1 控制芯片的选择方案............................................................................................. 7

2.1.1 STC89C51RC ............................................................................................... 7 2.1.2 AVR单片机 .................................................................................................. 7 2.1.3 FPGA ............................................................................................................ 8 2.1.4 主控制芯片的确定....................................................................................... 8 2.2 照明模块的选择..................................................................................................... 8

2.2.1 三极管驱动................................................................................................... 8 2.2.2 PWM芯片控制 ............................................................................................ 9 2.2.3 照明方案的确定......................................................................................... 10 第3章 硬件设计........................................................................................................ 10 3.1 单片机STC89C51芯片简介............................................................................. 10 3.2 LED驱动电路 .................................................................................................... 14 3.3 按键控制电路....................................................................................................... 17 3.4 LED指示电路 .................................................................................................... 18 3.5自动控制电路........................................................................................................ 18

3.5.1 光敏电路................................................................................................... 18 3.5.2 ADC0832模数转换 ................................................................................. 19 第4章 软件设计........................................................................................................ 20 4.1 Keil C51 .............................................................................................................. 20 4.2 Protel99SE .......................................................................................................... 21 4.3 程序流程图........................................................................................................... 22 第5章 调试................................................................................................................ 24 5.1 硬件调试............................................................................................................... 24 5.2 软件调试............................................................................................................... 24 第6章 总结................................................................................................................ 25 参考文献...................................................................................................................... 26 附录一:protel99se 原理图 ....................................................................................... 27 附录二:源程序.......................................................................................................... 28

3

前言

LED照明又称固态照明,作为继白炽灯、荧光灯后的第三代照明技术,具有节能、环保、安全可靠的特点,固态显示光源是照明领域里面比较看好的发展产业,在未来十年中将传统的照明工具替换,是代表照明技术的未来。发展新型固态照明,不仅是照明领域的革命,且符合政府所提出的“建设节约型资源和节能环保型社会”的要求。

LED台灯就是以LED(Light Emitting Diode)即发光二极管为光源的台灯,LED是一种固态的半导体器件,它可以直接把电转化为光。LED台灯是典型的绿色照明光源产品,作为国家绿色照明推广使用的产品,具有广阔的应用市场前景。

随着科技的进步、时代的发展,节能环保、健康生活等话题被人们日益关注,照明工具是人们生活中的必需品,我国是一个人口大国,每年所用的电量为5185.9万兆瓦,其中照明占到总用电量的百分之十二,每年还以3.44%的速度持续增长,“如何更好地节约能源”这已成为当今时代性的话题,作为照明工具,灯具的损耗以及生产灯具的剩余材料丢弃,势必会造成环境的污染,使用寿命的不断减少使得每年浪费的材料数量巨大,不仅在材料能源上进行浪费,而且在人们的健康上也有影响,据统计,我国有四分之二的人有不同程度视力问题,由于不正确的用眼方式造成近视人数占到总人数的百分之三十,因此健康的用眼越来越被人重视。

本文介绍了以单片机STC系列的89C51为主要控制核心,通过光敏电阻感应光度的强度,并利用PWM调光技术对LED进行光度的自动调节。同时设置手动控制。该LED台灯电路简易操作,便于携带,使用寿命延长,适宜学生、以及长期工作在灯光下的人群。

4

第1章 绪论

1.1 课题研究背景

在许多人家庭中,台灯是生活的必须品,但是因为忘了关灯造成极大的能源浪费。在我国,照明所耗电的时间已经超过100亿千瓦每小时 , 如今台灯很多都是采用的灯的种类是有白炽灯、荧光灯、节能灯和螺旋节能灯等等 ,采用的控制方式有多种,不需要连续调节,只需要台灯的自动调节。当屋内变黑时,人们在黑暗中开灯,特别不方便,并且与现在家电的智能化、便捷和低碳设计理念相违背。

LED是21世纪的主要照明光源的显示方式之一。LED发出的光是冷光源,光效高,工作电压在3V至5V之间,所需能耗较低,在相同的亮度下,LED灯的能耗是白炽灯的百分之十,是荧光灯的百分之五十。LED灯使用的寿命可达十万多小时,这是荧光灯使用寿命的十倍,白炽灯的一百倍。在能源紧缺、电价升高的时代,用LED灯替代白炽灯或荧光灯在台灯里的使用,既可以环保无污染,又可以节约资源。另外,在LED的光谱中,几乎全部集中于可见光频段,其百分之八十至百分之九十可以看到发光效率,在传统的台灯中,光源体使用交流电,每秒钟产生100-120次的频闪对眼睛有极大的伤害。LED灯是把交流电直接转换为直流电,产生闪烁现象基本没有,既保护眼睛,又可以营造一个舒适的照明环境。

在现在中国大约百分之三十的人存在视力问题,最近几年,我国的近视率逐渐飙升,已然成为全球排名第二的国家,近视总人数为全球第一。其中造成近视的主要问题,就是台灯的影响,其中近视的主要原因是用眼不健康,如看书的光线不在正常可视范围之内,学习时的坐姿不正确,台灯的光源影响和眼睛的视疲劳等等。

由于眼睛健康对于人来说的重要性,解决上述问题已然迫在眉睫了。

1.2 系统方案的提出

通过采用LED照明模块,减少电能消耗率,采用传感器模块进行检测,微处理器控制模块为主控电路,通过与专业知识相结合进行实现自动调节光源量度、人走灯灭自动断电的功能,而达到视力保护、安全环保等多功能的智能型台灯。

1.2.1 LED优势

相较于普通照明,LED照明有以下主要优点:

(1)使用寿命时间长。白炽灯的发光原理:通电时,钨丝通过电能的转换进行发热而产生热能,从而使得钨丝发光。在经过长时间加热时,钨丝会发生老化、断裂的现象,白炽灯也因此不能使用了。发光二极管的发光机理是由它的特殊结构决定的,它是由PN结晶片、两个相反电极和光学原理系统构成,在电极两端加上正向偏置电压时,P区和N区分别注入空穴和电子,非平衡少数的载流子和多数的载流子发生复合,将多余的能量以辐射光子的形式转化为光能,二极管的工作原理是载流子的不断移动而发光的,所以不存在老化、断裂的现象,发光寿命可长达5~10万小时。

(2)发光效率高。当LED通电发光时,实验测定,有百分之十的电能转换为光能,普通白炽灯的转化效率仅有百分之七到百分之八,如果想要达到同等的照明效果时,LED灯是更加节能的选择。

(3)发光响应速度快。LED灯的响应时间在几秒内,高频特性高,能显示脉冲信号,与

5

LED灯进行对比,白炽灯响应时间在毫秒级,高频特性较差。 (4)方向性较强,一般定向照明适用于发光性强的灯。 (5)易控制。LED驱动可采用驱动模块模拟调光技术、PWM脉宽调制解调技术、TRICA双向晶闸管调光方式、带总线接口LED驱动器、单片机或其他微处理器等多种方式进行调光。

(6)绿色环保型。普通节能灯工作原理是加热电阻丝,所以容易产生对环境有害的物质比如汞和其他重金属。

(7)使用性灵活。LED灯固态封装,体积小防水,颜色百变,可根据应用需求对LED灯进行灵活组合,其颜色也可进行灵活搭配。 因此,我们提出新型LED智能多功能台灯方案。

1.2.2 方案简述

针对上述节能、环保、健康等问题研究,基于STC系列的C51单片机和PWM调光的LED台灯以STC89C51作为主控芯片,设置了手动调节控制、自动控制和多种呼吸模式。在手动控制时,设置十个调节档位,由于PWM的输出不同,所以其占空比对LED的电流控制也不同,根据不同的调节效果及方案,从而实现人对光度调节的控制。

在自动控制时,通过ADC0832芯片进行模拟转换,其不断测量光敏电阻的两端电压来间接测量感应的光强度,将检测到的电压和预设的工作阈值进行对比,并且调整PWM的占空比对LED的电流进行控制,通过单片机的信号处理,以便实现对光度的自动调节。总体框图如下(图1.1):

图1.1

6

第2章 系统方案的选择

2.1 控制芯片的选择方案

选择嵌入式型MCU的主要考虑因素有以下几个方面: 所应用领域:一个产品的主要功能一旦限定下来,其所应用的领域也随之确定。应用领域的确定将减少选型的考虑。

自身带有的资源:芯片自带资源越符合产品的需求,产品开发越相对便捷。,芯片属于可扩展存储器。

低功耗的特征:低功耗的产品节能环保,成本低,可以降低环境污染,还能增加使用的稳定性,所以选择芯片时,低功耗也是一个重要的指标。

芯片及技术的延续性与继承性,这是所有的芯片和供货必须考虑的因素,所以选型时尽量选择销量比较多的商家,这样可以显现出来此款芯片应用较为广泛,其中的资料比较齐全,如果以后应用中有问题还可以进行非常广泛的询问卖家,因为毕竟多年经营的型号产品所出现的问题对卖家来说可以轻易给出解决方案。

2.1.1 STC89C51RC单片机

STC89C51RC单片机是具有40个引脚的双列直插式微型MCU,STC系列的单片机比ATM公司的8051单片机效果和质量上增强一些,其价格低廉、兼容性强、超强抗干扰能力、超低功耗等优点。其工作电压在3.3V~5.5V之间,内集成4K字节ROM和256字节RAM,具有扩展内存的功能,两个定时器和计数器中,有看门狗功能,工作频率为0~40MHz,实际工作频率可达48MHz左右,其中有32个外接通用I/O口,可应用在系统编程或在应用编程中,不需要专门的编程器和仿真器,在相应的程序内所写的指令代码可以完全兼容传统型的8051单片机。

2.1.2 AVR微控单片机

AVR型单片机的硬件结构主要以8位机与16位机的为应用处理策略,使用寄存器进行储存(有32个寄存器文件)和单体高速输入/输出的方案(即输入捕获寄存器、输出比较匹配寄存器及相应控制逻辑)。提高了指令执行速度(1Mips/MHz),克服了拖卡现象,增强处理信号的功能;同时又减少了对外设管理的费用,相对硬件结构简化精装,降低成本。故AVR单片机在软/硬件速度、功能和成本等方面取得更好的平衡,集成于高性价比的单片机。

AVR单片机内嵌入高质量的程序存储器,擦写方便,支持ISP和IAP,便于产品的调试、开发、生产、更新。内嵌有长寿命EEPROM,可长期保存关键数据,避免在断电的时候或者电脑出现故障时丢失。大容量的RAM不仅能满足一般程序语言的使用,同时也支持高级语言开发系统程序的使用,并可像MCS-51单片机那样扩展外部 存储。

AVR单片机的I/O以及总线设置上拉电阻进行电路的稳定,通过单独设定输入/输出可以使得单片机更改灵活,可设定初始时高阻输入状态,保护电路, I/O口的数量较多,且应用灵活多样、功能运用广泛,较适合大型电子电路板的设计。

AVR单片机片内置多种独立的时钟分频器。 AVR单片机具有上电复位电路(自动)、看门狗电路、低电压检测电路

7

(BOD),多个复位按键源,设置的启动后延时程序可以进行认为设定,增强了嵌入式系统的可靠性。

AVR单片机具有省电休眠模式的功能,宽电压运行程序可以进行,电压在5-1.8V之间,抗干扰能力较强,可以降低一般8位单片机中的软件抗干扰因素。 AVR单片机技术体现了单片机集多种电路如:FLASH程序存储器电路、看门狗、EEPROM、同/异步串行口电路连接、TWI、SPI、A/D模数转换器的应用、定时器/计数器的程序设定等,和多种功能增强可靠性的复位系统、降低功耗抗干扰的休眠模式、品种多门类全的中断系统、具输入捕获和比较匹配输出等多样化功能的定时器/计数器、具替换功能的I/O端口,充分体现了单片机技术的从“片自为战”向“片上系统SOC”过渡的发展方向。

2.1.3 FPGA

FPGA是Field-Programmable Gate Array的缩写,意思是现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。是作为(ASIC)领域中的一种专门半定制电路而出现的,既解决了定制电路中稳压电路的不足,又克服了原有可编程器件门电路数有限的缺点,特别符合当下的软件程序编写。

系统设计师可以根据不同的需要,通过编写把FPGA内部的相关程序逻辑块连接起来,将部分连接成一个大的整体。一个出厂的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能的模块。

FPGA芯片和ASIC集成芯片相比,其速度慢,复杂的设计进行比较困难,但是功耗较低。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。另外一种方法是用CPLD(复杂可编程逻辑器件备)。

2.1.4 主控制芯片的确定

STC系列的单片机,如选用89C51RC可以满足系统开发需要,而且使用普遍,开发编程环境容易实现,与其他系统兼容性强,开发成本低,较AVR和FPGA具有明显的价格优势,超强抗干扰能力、超低功耗、价格低廉等优点,最终选择作为系统控制芯片。

2.2 照明模块的选择

LED功率的大小,首先要选择具有足够的输出功率的芯片,能够驱动所要求的LED功率。输入电压的高低 ,输入电压的稳定度 ,LED的连接通常可以是串联或是并联,串联的数目越多,所需的驱动芯片数目就越少。

LED驱动器通用要求,选择LED驱动方式 ,LED驱动器标准,进一步提高能效、 增加功能及功率密度。产品寿命周期及可靠性问题,考虑更好的散热功率管发热功率管的功耗分成两部分,开关损耗和导通损耗。工作频率降频,电感或者变压器的选择,LED电流大小。

2.2.1 三极管驱动

三极管是一种控制元件,主要用来控制电流的大小,以共发射极接法为例(信

8

号从基极输入,从集电极输出,发射极接地),当基极电压UB有一个微小的变化时,基极电流IB也会随之有一小的变化,受基极电流IB的控制,集电极电流IC会有一个很大的变化,基极电流IB越大,集电极电流IC也越大,反之,基极电流越小,集电极电流也越小,即基极电流控制集电极电流的变化。但是集电极电流的变化比基极电流的变化大得多,这就是三极管的放大作用。IC 的变化量与IB变化量之比叫做三极管的放大倍数β(β=ΔIC/ΔIB, Δ表示变化量。),三极管的放大倍数β一般在几十到几百倍。

三极管在放大信号时,首先要进入导通状态,即要先建立合适的静态工作点,也叫建立偏置,否则会放大失真。

选择合适放大倍数三极管,通过放大电流驱动LED,三级管放大有成本低,易实现,易控制等优点。

2.2.2 PWM芯片控制

LED的调光控制,传统上LED的调光是利用一个DC信号或滤液PWM对LED中的正向电流进行调节来完成的。减小LED电流将起到调节LED光输出强度的作用,然而,正向电流的变化也会改变LED的彩色,因为LED的色度会随着电流的变化而变化。许多应用(例如汽车和LCD 背光照明)都不能允许LED发生任何的色彩漂移。在这些应用中,由于周围环境中存在不同的光线变化,而且人眼对于光强的微小变化都很敏感,因此宽范围调光是必需的。通过施加一个PWM信号来控制LED亮度的做法允许不改变彩色的情况下完成LED的调光。

PWM是脉冲宽度调制信号,注意其中的“宽度”,就是脉冲的高电平的时间。PWM信号调节LED亮度时,信号频率是不变的,改变的是脉冲的高电平的时间,即LED的导通时间。这种信号调节亮度相当于调节LED的平均电流,所以电流会变化。

采用LM3410X串联驱动LED灯,具体电路图如图2.1所示。

图2.1 LM3410X串联驱动电路

LM3410恒流LED驱动器是单片频率,PWM升压型DC / DC转换器,5引

9

脚或6引脚封装。它可以驱动典型2.5A峰值电流与内部160MΩ NMOS切换。开关频率在内部设置为525kHz或1.60MHz,允许使用极小的表面贴装电感器和片式电容器。即使操作频率高,高达88%的效率很容易实现的。外部关闭包括在内,具有超低待机电流为80nA。LM3410采用电流模式控制和内部补偿功能,提供高性曼斯在广泛的操作条件。额外功能包括调光,脉冲的脉冲电流限制,热关断。

2.2.3 照明方案的确定

考虑照明需要,需要驱动电压5V,驱动电流3A,需要驱动16个大草帽白光LED,因为三极管驱动具有成本低,易控制,易实现等优点,而LM3410X成本高且不易寻找,最终选用大功率三极管SS8550驱动照明模块。

第3章 硬件设计

硬件设计总体框图如下:

图3.1硬件设计总体框图

3.1 单片机STC89C51芯片简介

STC89C51微型处理器是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单片机芯片上,拥有8 位CPU处理和编程Flash,使得STC89C51为许多电子产品MCU的选择对象最好的之一,它具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线路设定,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X51 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35Mhz,6T/12T可选。

10

U11234567891011121314151617181920P10P11P12P13P14P15P16P17RESETP30/RXDP31/TXDP32/INT0P33/INT1P34/T0P35/T1P36WRP37/RDX2X1GNDVCCP00P01P02P03P04P05P06P07EA/VPALE/PPSENP27P26P25P24P23P22P21P204039383736353433323130292827262524232221 图3.2 STC89C51单片机引脚图

STC89C52

单片机是美国STC公司最新推出的一种新型51内核的单片机。片内含有Flash程序存储器、SRAM、UART、SPI、PWM等模块。

(一)STC89C51主要功能、性能参数如下:

(1)内置标准51内核,机器周期:增强型为6时钟,普通型为12时钟; (2)工作频率范围:0~40MHZ,相当于普通8051的0~80MHZ; (3)STC89C51RC对应Flash空间:4KB; (4)内部存储器(RAM):512B; (5)定时器\\计数器:3个16位; (6)通用异步通信口(UART)1个; (7)中断源:8个;

(8)有ISP(在系统可编程)\\IAP(在应用可编程),无需专用编程器\\仿真器; (9)通用I\\O口:32\\36个; (10)工作电压:3.8~5.5V;

(11)外形封装:40脚PDIP、44脚PLCC和PQFP等。 (二)STC89C51单片机的引脚说明: 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口输出其特殊功能寄存器的内容。

11

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

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(外部数据存储器读选通)

I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。只有读端口时才真正地把外部的数据读入到内部总线。上面图中的两个三角形表示的就是输入缓冲器CPU将根据不同的指令分别发出读端口或读引脚信号以完成不同的操作。这是由硬件自动完成的,不需要我们操心,1然后再实行读引脚操作,否则就可能读入出错,为什么看上面的图,如果不对端口置1端口锁存器原来的状态有可能为0Q端为0Q^为1加到场效应管栅极的信号为1,该场效应管就导通对地呈现低阻抗,此时即使引脚上输入的信号为1,也会因端口的低阻抗而使信号变低使得外加的1信号读入后不一定是1。若先执行置1操作,则可以使场效应管截止引脚信号直接加到三态缓冲器中实现正确的读入,由于在输入操作时还必须附加一个准备动作,所以这类I/O口被称为准双向口。89C51的P0/P1/P2/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:来自反向振荡器的输出。 (三)STC89C51单片机最小系统:

最小系统包括单片机及其所需的必要的电源、时钟、复位等部件,能使单片

12

机始终处于正常的运行状态。电源、时钟等电路是使单片机能运行的必备条件,可以将最小系统作为应用系统的核心部分,通过对其进行存储器扩展、A/D扩展等,使单片机完成较复杂的功能。

STC89C51是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单﹑可靠。用STC89C52单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,结构如图3.3所示,由于集成度的限制,最小应用系统只能用作一些小型的控制单元。

时钟电路

复位电路 STC89C51单片机 I/O图3.3 单片机最小系统原理框图

(1) 时钟电路

STC89C51单片机的时钟信号通常有两种方式产生:一是内部时钟方式,二是外部时钟方式。内部时钟方式如图3.4所示。在STC89C51单片机内部有一振荡电路,只要在单片机的XTAL1(18)和XTAL2(19)引脚外接石英晶体(简称晶振),就构成了自激振荡器并在单片机内部产生时钟脉冲信号。图中电容C1和C2的作用是稳定频率和快速起振,电容值在5~30pF,典型值为30pF。晶振CYS的振荡频率范围在1.2~12MHz间选择,典型值为12MHz和6MHz。 C21830pFY1C311.0592MHz19 30pF图3.4 STC89C51内部时钟电路

(2) 复位电路

当在STC89C51单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作(若该引脚持续保持高电平,单片机就处于循环复位状态)。

复位电路通常采用上电自动复位和按钮复位两种方式。

最简单的上电自动复位电路中上电自动复位是通过外部复位电路的电容充放电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。

除了上电复位外,有时还需要按键手动复位。本设计就是用的按键手动复位。按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST(9)端与电源Vcc接通而实现的。按键手动复位电路见图3.5。时钟频率用11.0592MHZ时C取10uF,R取10kΩ。

13

VCCS49C1R110uF10k 图3.5 STC89C51复位电路

(四) STC89C51中断技术概述 中断技术主要用于实时监测与控制,要求单片机能及时地响应中断请求源提出的服务请求,并作出快速响应、及时处理。这是由片内的中断系统来实现的。当中断请求源发出中断请求时,如果中断请求被允许,单片机暂时中止当前正在执行的主程序,转到中断服务处理程序处理中断服务请求。中断服务处理程序处理完中断服务请求后,再回到原来被中止的程序之处(断点),继续执行被中断的主程序。

图3.6为整个中断响应和处理过程。

图3.6 中断响应和处理过程

如果单片机没有中断系统,单片机的大量时间可能会浪费在查询是否有服务请求发生的定时查询操作上。采用中断技术完全消除了单片机在查询方式中的等待现象,大大地提高了单片机的工作效率和实时性。

3.2 LED驱动电路

常见的三极管为9012、s8550、9013、s8050.单片机应用电路中三极管主要的作用就是开关作用。其中9012与8550为pnp型三极管,可以通用。其中9013与8050为npn型三极管,可以通用。

区别引脚:三极管向着自己,引脚从左到右分别为ebc,原理图中有箭头的一端为e,与电阻相连的为b,另一个为c。箭头向里指为PNP(9012或8550),箭头向外指为NPN(9013或8050)。 三极管的工作原理

三极管是电流放大器件,有三个极,分别叫做集电极C,基极B,发射极E。

14

分成NPN和PNP两种。我们仅以NPN三极管的共发射极放大电路为例来说明一下三极管放大电路的基本原理。 (1)电流放大

下面的分析仅对于NPN型硅三极管。如上图所示,我们把从基极B流至发射极E的电流叫做基极电流Ib;把从集电极C流至发射极E的电流叫做集电极电流 Ic。这两个电流的方向都是流出发射极的,所以发射极E上就用了一个箭头来表示电流的方向。三极管的放大作用就是:集电极电流受基极电流的控制(假设电源 能够提供给集电极足够大的电流的话),并且基极电流很小的变化,会引起集电极电流很大的变化,且变化满足一定的比例关系:集电极电流的变化量是基极电流变 化量的β倍,即电流变化被放大了β倍,所以我们把β叫做三极管的放大倍数(β一般远大于1,例如几十,几百)。如果我们将一个变化的小信号加到基极跟发射 极之间,这就会引起基极电流Ib的变化,Ib的变化被放大后,导致了Ic很大的变化。如果集电极电流Ic是流过一个电阻R的,那么根据电压计算公式 U=R*I 可以算得,这电阻上电压就会发生很大的变化。我们将这个电阻上的电压取出来,就得到了放大后的电压信号了。 (2)偏置电路

三极管在实际的放大电路中使用时,还需要加合适的偏置电路。这有几个原因。首先是由于三极管BE结的非线性(相当于一个二极管),基极电流必须在输入电压 大到一定程度后才能产生(对于硅管,常取0.7V)。当基极与发射极之间的电压小于0.7V时,基极电流就可以认为是0。但实际中要放大的信号往往远比 0.7V要小,如果不加偏置的话,这么小的信号就不足以引起基极电流的改变(因为小于0.7V时,基极电流都是0)。如果我们事先在三极管的基极上加上一 个合适的电流(叫做偏置电流,上图中那个电阻Rb就是用来提供这个电流的,所以它被叫做基极偏置电阻),那么当一个小信号跟这个偏置电流叠加在一起时,小 信号就会导致基极电流的变化,而基极电流的变化,就会被放大并在集电极上输出。另一个原因就是输出信号范围的要求,如果没有加偏置,那么只有对那些增加的 信号放大,而对减小的信号无效(因为没有偏置时集电极电流为0,不能再减小了)。而加上偏置,事先让集电极有一定的电流,当输入的基极电流变小时,集电极 电流就可以减小;当输入的基极电流增大时,集电极电流就增

15

大。这样减小的信号和增大的信号都可以被放大了。 (3)开关作用

下面说说三极管的饱和情况。像上面那样的图,因为受到电阻 Rc的限制(Rc是固定值,那么最大电流为U/Rc,其中U为电源电压),集电极电流是不能无限增加下去的。当基极电流的增大,不能使集电极电流继续增大 时,三极管就进入了饱和状态。一般判断三极管是否饱和的准则是:Ib*β〉Ic。进入饱和状态之后,三极管的集电极跟发射极之间的电压将很小,可以理解为 一个开关闭合了。这样我们就可以拿三极管来当作开关使用:当基极电流为0时,三极管集电极电流为0(这叫做三极管截止),相当于开关断开;当基极电流很 大,以至于三极管饱和时,相当于开关闭合。如果三极管主要工作在截止和饱和状态,那么这样的三极管我们一般把它叫做开关管。 (4)工作状态

如果我们在上面这个图中,将电阻Rc换成一个灯泡,那么当基极电流为0时,集电极电流为0,灯泡灭。如果基极电流比较大时(大于流过灯泡的电流除以三极管 的放大倍数 β),三极管就饱和,相当于开关闭合,灯泡就亮了。由于控制电流只需要比灯泡电流的β分之一大一点就行了,所以就可以用一个小电流来控制一个大电流的通 断。如果基极电流从0慢慢增加,那么灯泡的亮度也会随着增加(在三极管未饱和之前)。

LED的亮度受电流控制,通过控制电流调节LED灯的亮度。利用公式

IL?tONIT可知,利用调整PWM不同的占空比

就可以控制电流的大小。电

流通断的变化用PNP型三极管实现, PWM由P1.4输出,低电平有效。如下图(图3.7)所示:

16

图3.7 三极管驱动LED电路

3.3 按键控制电路

单片机键盘有独立键盘和矩阵式键盘两种:独立键盘每一个I/O 口上只接一个按键,按键的另一端接电源或接地(一般接地),这种接法程序比较简单且系统更加稳定;而矩阵式键盘式接法程序比较复杂,但是占用的I/O少。根据本设计的需要这里选用了独立式键盘接法。

独立式键盘的实现方法是利用单片机I/O口读取口的电平高低来判断是否有键按下。将常开按键的一端接地,另一端接一个I/O 口,程序开始时将此I/O口置于高电平,平时无键按下时I/O口保护高电平。当有键按下时,此I/O 口与地短路迫使I/O 口为低电平。按键释放后,单片机内部的上拉电阻使I/O口仍然保持高电平。我们所要做的就是在程序中查寻此I/O口的电平状态就可以了解我们是否有按键动作了。

在用单片机对键盘处理的时候涉及到了一个重要的过程,那就是键盘的去抖动。这里说的抖动是机械的抖动,是当键盘在未按到按下的临界区产生的电平不稳定正常现象,并不是我们在按键时通过注意可以避免的。这种抖动一般10~200毫秒之间,这种不稳定电平的抖动时间对于人来说太快了,而对于时钟是微秒的单片机而言则是慢长的。硬件去抖动就是用部分电路对抖动部分加之处理,软件去抖动不是去掉抖动,而是避抖动部分的时间,等键盘稳定了再对其处理。所以这里选择了软件去抖动,实现法是先查寻按键当有低电平出现时立即延时

17

10~200毫秒以避开抖动(经典值为20毫秒),延时结束后再读一次I/O 口的值,这一次的值如果为1 表示低电平的时间不到10~200 毫秒,视为干扰信号。当读出的值是0时则表示有按键按下,调用相应的处理程序。硬件电路如图3.8所示:

K1K2K3GNDset13stop24add13dx24dec13nb24 图3.8 键盘控制电路图

3.4 LED指示电路

LED英文单词的缩写,主要含义:LED = Light Emitting Diode,发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光;它改变了白炽灯钨丝发光与节能灯三基色粉发光的原理,而采用电场发光。据分析,LED的特点非常明显,寿命长、光效高、辐射低与功耗低。作为目前全球最受瞩目的新一代光源,LED因其高亮度、低热量、长寿命、无毒、可回收再利用等优点,被称为是21世纪最有发展前景的绿色照明光源。我国的LED产业起步于20世纪70年代,经过近40年的发展,产品广泛应用于景观照明和普通照明领域,我国已成为世界第一大照明电器生产国和第二大照明电器出口国。近几年来,随着人们对半导体发光材料研究的不断深入,LED制造工艺的不断进步和新材料(氮化物晶体和荧光粉)的开发和应用,各种颜色的超高亮度LED取得了突破性进展,其发光效率提高了近1000倍,色度方面已实现了可见光波段的所有颜色,其中最重要的是超高亮度白光LED的出现,使LED应用领域跨越至高效率照明光源市场成为可能。曾经有人指出,高亮度LED将是人类继爱迪生发明白炽灯泡后,最伟大的发明之一。本设计利用不同颜色的发光二极管来指示不同的工作模式,使用者可以一目了然当前的工作模式。

D1YD2GD3R

图3.9 LED指示灯

3.5自动控制电路

本设计利用光敏阻值的变化与电阻进行分压,得到的电压值给ADC0832进行模数转换,通过10k可调电阻可以实现光线限值的调节。最终将信号给单片机处理。

3.5.1 光敏电路

18

光敏电阻又称光导管,常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。这些制作材料具有在特定波长的光照射下,其阻值迅速减小的特性。这是由于光照产生的载流子都参与导电,在外加电场的作用下作漂移运动,电子奔向电源的正极,空穴奔向电源的负极,从而使光敏电阻器的阻值迅速下降。

光敏电阻器是利用半导体的光电导效应制成的一种电阻值随入射光的强弱而改变的电阻器,又称为光电导探测器;入射光强,电阻减小,入射光弱,电阻增大。还有另一种入射光弱,电阻减小,入射光强,电阻增大。

光敏电阻器一般用于光的测量、光的控制和光电转换(将光的变化转换为电的变化)。常用的光敏电阻器硫化镉光敏电阻器,它是由半导体材料制成的。光敏电阻器对光的敏感性(即光谱特性)与人眼对可见光(0.4~0.76)μm的响应很接近,只要人眼可感受的光,都会引起它的阻值变化。设计光控电路时,都用白炽灯泡(小电珠)光线或自然光线作控制光源,使设计大为简化。

+5光敏C4104RD1103GND

图3.10

3.5.2 ADC0832模数转换

ADC0832和ADC 0832除精度略有差别外(前者精度为8位、后者精度为7位),其余各方面完全相同。它们都是CMOS器件,不仅包括一个8位的逐次逼近型的ADC部分,而且还提供一个8通道的模拟多路开关和通道寻址逻辑,因而有理由把它作为简单的“数据采集系统”。利用它可直接输入8个单端的模拟信号分时进行A/D转换,在多点巡回检测和过程控制、运动控制中应用十分广泛。

ADC 0832主要特性:

1)8路输入通道,8位A/D转换器,即分辨率为8位。 2)具有转换起停控制端。

3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时) 4)单个+5V电源供电。

5)模拟输入电压范围0~+5V,不需零点和满刻度校准。 6)工作温度范围为-40~+85摄氏度。 7)低功耗,约15mW。

如下图所示,ADC0832的参考电压设置成5V,时钟信号通过单片机P3.3口利用定时器中断输出。光敏电阻的对地电压从IN0口输入, ADC0832将其转换成数字量后通过OUT1-7输出,以便单片机进一步处理。

19

图3.11 模数转换电路

第4章 软件设计

4.1 编程软件Keil C51

Keil C51软件是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编语言相比,C51语言具有明显的选择优势,功能特性、结构性、可读性、可维护性上,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。 Keil_c软件界面如图

20

图4.1 Keil_c软件界面

4.2 Protel99SE

Protel99SE是PORTEL公司在80年代末推出的EDA软件。Protel99SE是应用于Windows9X/2000/NT操作系统下的EDA设计软件,采用设计库管理模式,可以网设计,具有很强的数据交换能力和开放性及3D模拟功能,是一个32位的设计软件,可以完成电路原理图设计,印制电路板设计和可编程逻辑器件设计等工作,可以设计32个信号层,16个电源--地层和16个机加工层。 Protel99SE软件的特点:

(1) 可生成30多种格式的电气连接网络表; (2) 强大的全局编辑功能;

(3) 在原理图中选择一级器件,PCB中同样的器件也将被选中; (4) 同时运行原理图和PCB,在打开的原理图和PCB图间允许双向交叉

查找元器件、引脚、网络

(5) 既可以进行正向注释元器件标号(由原理图到PCB),也可以进行

反向注释(由PCB到原理图),以保持电气原理图和PCB在设计上的一致性;

(6) 满足国际化设计要求(包括国标标题栏输出,GB4728国标库); *

方便易用的数模混合仿真(兼容SPICE 3f5);

(7) 支持用CUPL语言和原理图设计PLD,生成标准的JED下载文件;

* PCB可设计32个信号层,16个电源-地层和16个机加工层; (8) 强大的“规则驱动”设计环境,符合在线和批处理的设计规则检查; (9) 智能铺铜功能,可以自动重铺; (10)

提供大量的工业化标准电路设计模版;

Protel99SE的工作界面是一种标准的Windows界面,如图所示,包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。Protel99SE软件界面如图4.2

21

图4.2 Prtel99SE软件界面

4.3 程序流程图

开始 手动模式 Y 系统初始化 读取AD值 判断当前 工作模式 自动模式 判断按键 是否按下 22 呼吸模式 N 判断遥控 是否按下 Y 结束 23

第5章 调试

5.1 硬件调试

硬件调试主要是对自己所做好的电子电路板进行通电前的万用表检查,看看有无短路、

断路的现象,通过通电时,用示波器进行观察电路输出部分的电压属不属于正常范围内,通过示波器观察输出波形是不是符合指标,在检查硬件电路时要注意用电的安全性。 硬件电路调试可分为静态调试过程与动态调试过程两个阶段进行。 静态调试阶段是在电路系统没有通电时的一种硬件电路中的元器件检测。 第一步:直观目测。检查外部的各种元件或者是电路是否有少焊、断点的现象。 第二步:用万用表测试。先用万用表一一检查电路中元器件的两端电压实属正常,的连接点,再检测各种电源线与地线之间是否有短路现象。

第三步:通电检测。通过电源电压的连接使得电路板通电,检测所有插座或是器件的电压是否符合在要求的值范围内。

第四步:程序功能调试检查。将单片机通过最小系统模块进行烧写程序,将单片机安装到项目系统内,进行控制PWM进行光的调速功能。

动态调试是在通电条件的情况下发现和排除系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。动态调试的一般方法是由部分到整体,由简单到复杂。由部分到整体是指首先按逻辑功能硬件电路分为几个部分,只进行某一部分电路模块的调试,这样可以将故障的范围限定在最小的局面上。当各模块电路无故障后,将各电路组合加入系统中,在对各电路功能及各电路间可能存在的相互联系进行调试。由简单到复杂是将信号流经的各器件按照距离单片机的逻辑距离进行由简单到复杂的分层,然后分层调试。调试时,仍采用去掉无关元件的方法,逐层调试下去,就会排查到哪些元件出现了故障。

5.2 软件调试

软件调试是通过对程序的编写,以及对程序的烧写操作进行连接、执行进行判断系统电路的运行状况,通过程序中的编译进行检查是否存在语法错误与逻辑错误,可以及时在程序上进行错误的修改,也可以通过仿真软件进行仿真电路,观察仿真效果,这样可以减少在设计过程中不必要的错误。

24

第6章 总结

基于STC89C51RC系列的单片机进行控制PWM的转动速度从而进行台灯的调光技术,主要以STC89C51作为主控芯片模块、手动控制模块、自动控制模块和呼吸模式模块组成。手动控制模块中,设置十个档,通过输出不同的PWM占空比对光度进行手动调节换挡。自动控制模块中,通过ADC0832模数转换芯片不断测量光敏电阻两端的电压来测量感应的光度,将电压和预设的阈值进行对比,调整PWM的占空比从而进行对光度的自动调节。PWM调速LED台灯电路简单,节能环保,灯的使用寿命强,适合学生及长期工作在灯光下的人群。呼吸模式模块中设定小夜灯可以进行夜起时的照明。控制方面增加了远程遥控功能,减少了人力,使用更加方便。

最后,在本次课程设计中,主要有以下体会:

1、对LED的驱动电路有进一步的学习,明白了如何对LED进行规定电流驱动,并通过输出不同的占空比来调节LED的亮度,从而对LED的耗电进行相应的管理;

2、掌握了AD转换的原理和相关芯片的应用电路,比如通过ADC0832芯片对外界的模拟量进行转换等等。

3、熟悉掌握了红外远程遥控的应用电路。

4、培养了自己的项目意识,遇到困难可以及时请教老师和同学,使得自己的能力得到很到的提高,作为一名大学生,并且还是一个即将踏入社会的大学生,多增加一些知识是非常有必要的选择,通过此次项目的研究与学习,我感觉我会更加的努力奋进,去迎接更好更充实的自己。

25

参考文献

1. 周明珠.无触点开关在控制中的应用[J].现代电子技术,2002,4(1):62-71 2. 赵玉安.人体热释电红外传感器介绍[J].中国电子制作,2006,9(1):35-40

3. 俞海珍,李宪章,冯浩.热释电红外传感器及其应用[J].电子照明技术,2006.(1):25-28 4. 曹巧媛.单片机原理及应用[M].北京:北京:电子工业出版社,1997

5. 谢晓军.红外遥控技术在付费率电度表中应用[J],电测与仪表,1996,4(1):24-26 6. 吴可久.8031单片机在遥控解码方面的应用[J].电子技术,1993,2:13-15 7. 张友德等.单片机原理应用与实验[M].上海:复旦大学出版社,1992 (

8. 王幸之.单片机应用系统抗干扰技术[M].北京:北京航空航天大学出版社,2001,69-78 9. 张义和,王敏男,许宏昌等.例说51单片机.北京:人民邮电出版社,2008

10. 刘坤,宋戈,赵波等.51单片机C语言应用技术开发技术大全.北京:人民邮电出版社,2008 11. 白延敏.51单片机典型系统开发实例精讲.北京:电子工业出版社,2009 12. 周丽娜.Protel99SE电路设计技术.北京:中国铁道出版社,2009

13. 王为青,程国钢.单片机Keil C×51应用开发技术.北京:人民邮电出版社,2007 14. 江志红.51单片机技术与应用系统开发案例精选.北京:清华大学出版社,2009)

26

附录一:protel99se 原理图

27

附录二:源程序 #include

//调用单片机头文件

#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255

#define uint unsigned int //无符号整型 宏定义 变0~65535

sbit SCL=P2^2; ADC0832SCL脚 sbit DO=P2^3; 脚

sbit CS=P2^0; 脚

sbit red = P1^4; //红色指示灯 sbit td_led = P3^5; //台 uchar f_pwm_l ; //越小越亮 bit flag_moshi; uchar dangwei; //档位

uchar guangxian; //光线的显示变量

28

量范围

//SCL定义为P1口的第3位脚,连接

//DO定义为P1口的第4位脚,连接ADC0832DO

//CS定义为P1口的第4位脚,连接ADC0832CS

/***********************1ms*****************************/ void delay_1ms(uint q) { }

/***********

uint i,j; for(i=0;i

for(j=0;j<120;j++);

********************************************************/ //请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的

// 1 1 0 通道 // 1 1 1 通道

unsigned char ad0832read(bit SGL,bit ODD) {

unsigned char i=0,value=0,value1=0;

SCL=0;

29

DO=1; CS=0;

//开始

//第一个上升沿

SCL=1; SCL=0; DO=SGL;

SCL=1; //第二个上升沿 SCL=0; DO=ODD;

SCL=1; //第三个上升沿 SCL=0; //第三个下降沿 DO=1; for(i=0;i<8;i++) { }

for(i=0;i<8;i++) {

//接收校验数据 SCL=1;

SCL=0; //开始从第四个下降沿接收数据 value>>=1; if(DO)

value++;

value1>>=1;

30

}

if(DO)

value1+=0x80;

SCL=1; SCL=0;

CS=1; SCL=1; if(value==value1)

//与校验数据比较,正确就返回数

据,否则返回0 }

uchar key_can;

/********************独立按键程序*****************/ void key() {

return value;

return 0;

static uchar key_new; key_can = 20; if((P2 & 0xf0) != 0xf0) {

delay_1ms(1);

31

if(((P2 & 0xf0) != 0xf0) && (key_new == 1)) { key_new = 0; switch(P2 & 0xf0) { case 0xd0: key_can = 1; break; case 0xb0: key_can = 2; break; case 0x70: key_can = 3; break; } red = 0; delay_1ms(80); red = 1;

}

}

else

key_new = 1;

}

/***************档位***************/ void led_dangwei(uchar dat) {

switch(dat)

32

//左边第1个 //左边第2个 //左边第3个

case 7: TR1 = 0; //最亮

td_led = 0;

break;

case 6: TR1 = 1; //亮

f_pwm_l = 20;

break;

case 5: TR1 = 1; //亮

f_pwm_l = 40;

break;

case 4: TR1 = 1; //亮

f_pwm_l = 60;

break;

case 3: TR1 = 1; //亮

f_pwm_l = 80;

break;

case 2: TR1 = 1; //亮

f_pwm_l = 90;

break;

case 1: TR1 = 1; //亮

f_pwm_l = 95;

break;

33

{

}

case 0: TR1 = 0; //灭

td_led = 1;

break;

}

/****************按键处理函数***************/ void key_with() {

if(key_can == 1) //设置键 { }

if(flag_moshi == 1) //手动模式 {

if(key_can == 2) //加 { }

34

flag_moshi = ~flag_moshi;

dangwei ++; if(dangwei >= 7)

dangwei = 7;

}

/*************定时器0初始化程序***************/ void time_init() { }

/******************************************************************** * 名称 : Main()

35

}

if(key_can == 3) //减 { }

led_dangwei(dangwei) ; //档位 if(dangwei != 0)

dangwei --;

EA = 1; //开总中断

TMOD = 0X10; //定时器1工作方式1 ET1 = 1; TR1 = 0;

//开定时器0中断

//允许定时器0定时

* 功能 : 主函数 * 输入 : 无 * 输出 : 无

***********************************************************************/ void Main() {

time_init(); //初始化定时器 red = 0; f_pwm_l = 99; while(1) {

key();

if(key_can < 10)

key_with();

if(flag_moshi == 0) //自动模式

red = 1;

else

red = 0;

//手动模式

if(flag_moshi == 0) //自动模式

36

}

{ }

if(guangxian <= 10) //开灯 {

TR1 = 0; //最亮 td_led = 0;

//关灯

}else if(guangxian >= 90) {

TR1 = 0; //灭 td_led = 1;

}else {

TR1 = 1;

f_pwm_l = guangxian;

}

guangxian = ad0832read(1,0); //采集光线 guangxian = guangxian * 99 / 255; delay_1ms(1);

}

37

/*******************定时器1用做单片机模拟PWM 调节***********************/

void Timer1() interrupt 3 //调用定时器1 { static uchar value_l; TH1=0xfe; // TL1=0x0c; //

if(td_led==1) { value_l+=1;

if(value_l > f_pwm_l) //高电平 { td_led=0;

}

} else

{ value_l+=1;

if(value_l > 100 - f_pwm_l)

{

38

//低电平

}

td_led=1;

} }

39

本文来源:https://www.bwwdw.com/article/px7a.html

Top