首页 基于单片机的LED调光器的设计

基于单片机的LED调光器的设计

举报
开通vip

基于单片机的LED调光器的设计基于单片机的LED调光器的设计 重庆科技学院 学 院:_电气与信息工程学院_ 专业班级: 测控0902班 学生姓名: 学号: 设计地点(单位)________I512______ __ ________ __ 设计题目:___________LED调光器设计_____________________ 完成日期: 年 月 日 指导教师评语: ______________________ _________________ ________________________________________...

基于单片机的LED调光器的设计
基于单片机的LED调光器的设计 重庆科技学院 学 院:_电气与信息工程学院_ 专业班级: 测控0902班 学生姓名: 学号: 设计地点(单位)________I512______ __ ________ __ 设计题目:___________LED调光器设计_____________________ 完成日期: 年 月 日 指导教师评语: ______________________ _________________ __________________________________________________________________________________ __________________________________________________________________________________ _____________________________________ __________ _ 成绩(五级记分制):______ __________ 指导教师(签字):________ ________ 基于单片机的PWM的LED调光设计 摘 要 LED作为一种固态冷光源,是继白炽灯、荧光灯、高强度放电灯(如高压钠灯和金卤灯)之后的第四代新光源。基于白光LED 的固态照明,是一种典型的绿色照明方式,与传统光源相比,具有节能、环保、寿命长、体积小、安全可靠等特点。但在实际中发现LED灯功能单一,不能实现灯的亮度手动和自动控制,且不能随着环境光的变化而变化,造成能源的浪费。本文介绍了以高性能的STC12C5A60S2单片机为控制核心,利用单片机的PWM口产生的占空比LED进行光度的手动和自动调节。通过光敏电阻对环境光度进行AD采集,达到LED灯亮度随环境自动变化。 关键词:LED STC12C5A60S2单片机 PWM 占空比 AD采集 1 基于单片机的PWM的LED调光设计 目 录 摘要 ...................................................................... 1 1 绪论 .................................................................... 3 1.1 研究LED调光的目的及意义 ......................................... 3 1.2 本课题设计内容及要求 ............................................. 3 2 LED调光系统总体设计 .................................................... 4 2.1 总体 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 设计 ..................................................... 4 3 系统硬件设计 ............................................................ 4 3.1 单片机最小系统 ................................................... 4 3.2 LED驱动电路 ..................................................... 7 3.3 按键电路 ......................................................... 8 4 系统软件设计 ............................................................ 9 4.1 软件总体设计 ..................................................... 9 4.2 手动调光程序设计 ................................................ 10 4.3 自动调光程序设计 ................................................ 10 4.4 AD采集程序 ..................................................... 11 4.5 按键程序设计 .................................................... 11 5 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf ................................................................... 13 参考文献 ................................................................. 14 致谢 ..................................................................... 15 附录1 系统电路图 ........................................................ 16 附录2 程序清单 .......................................................... 17 2 基于单片机的PWM的LED调光设计 1 绪论 1.1 研究LED调光的目的及意义 随着全球能源危机和气候变暖问题的日益严重,绿色节能已经成为全球普遍关注的话题,人们正通过各种途径寻找新的节能方式。照明是人类消耗能源的重要方面,在电能消耗中,发达国家照明用电占发电总量的比例是19%,我国也达到12%.随着经济发展,我国的照明用电将有大比例的提高,因此绿色节能照明的研究越来越受到重视。LED 作为一种固态冷光源,是继白炽灯、荧光灯、高强度放电灯(如高压钠灯和金卤灯)之后的第四代新光源。基于白光LED 的固态照明,是一种典型的绿色照明方式,与传统光源相比,具有节能、环保、寿命长、体积小、安全可靠等特点,代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 着照明技术的未来,并符合当前政府提出的"建设资源节约型和环境友好型社会"的要求。可以预见不久的将来。 目前,市场上采用白炽灯、卤素灯、荧光灯为光源的台灯普遍存在着低效率、高能耗、不易调光等缺点;至于寿命结束的含汞灯,一旦处理不当,将对环境造成严重危害;且实际的应用中,发现LED灯在周边亮度大时依然以同一功率发光,存在电能浪费。另外一方面,因为LED的发热量和电流存在正相关的关系,发热影响了LED的寿命,所以在不必要的亮度下也减少了LED的寿命。然而,当LED在周边亮度小时,LED灯不能提供足够和恰当的光度,这样又影响了阅读,造成视觉疲劳。 而且部分LED灯功能单一,缺少亮度调节、手动控制、自动控制,通过环境变化改变自身亮度等功能。为解决当前问题,研究一个好的LED调光系统意义重大。 1.2 本课题设计内容及要求 本次课题设计的目标是,在了解当前LED现有功能的基础上,利用单片机设计一个LED调光系统,该系统能够调节LED灯的亮度,且满足一定的精度要求。因此,本课题研究设计内容概括如下: 1.基本功能 1)采用脉宽调制(PWM)对LED进行调光; 2)按给定时间-输出功率曲线自动调整LED亮度; 3)按键选择手动/自动调光方式; 4)4位数码管显示LED光源的相对亮度(0.0,100.0%); 5)具有电源开关、电源指示灯、复位等功能。 2. 扩展功能 1)实现光敏自动调光,根据室内的光照变化,自动改变LED光源的亮度; 2)对采集的光照数据进行处理,利用3σ准则剔除粗大误差,设计算术平均数字滤波器; 3)手动遥控调光功能。 3 基于单片机的PWM的LED调光设计 2 LED调光系统总体设计 2.1 总体方案设计 LED调光系统应主要包括称光敏采集、AD转换、单片机数据处理及控制、PWM控制、按键操作等部分。其系统组成如图2.1所示。在系统中,设置了手动调光和自动调光。在手动调光时,分为十档,每一档对应一个占空比对LED的电流进行控制,从而对LED的亮度进行调节。自动调光时,在一个子函数里调用控制LED亮度函数,再通过循环和延时实现一个简易的LED亮度的变化。光敏电阻采集的信号换成电信号送到线性放大器放大,经过 A/D转换送入单片机,再经数据处理后,反馈给LED灯改变其亮度,数码管则显示当前与光敏电阻串联10K电阻的电压值。 该调光系统是由硬件和软件两部分组成。硬件主要包括单片机最小系统、LED驱动电路、按键电路、数码管显示电路、LED显示电路等部分;软件部分主要包括系统初始化子程序、手动控制子程序、自动控制子程序、AD采集及处理子程序、定时及中断子程序等,其软件采用模块化设计思想,可使程序设计思路清晰,便于调试。 图2.1系统组成框图 3 系统硬件设计 3.1 单片机最小系统 本系统采用新一代的8051单片机——STC12C5A60S2,由国内宏晶科技生产,其指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,其工作电压范围是3.5V~5.5V。STC12C5A60S2有60KB的用户应用程序空间,256B的RAM和1024B的XRAM。能满足程序代码的需求和缓冲区定义的需求。另外与程序存储空间独立的一片闪存区域,可在应用编程中作EEPROM使用。STC12C5A60S2有双UART以及ISP串口,串口资源足够系统使用。另外通过宏晶科技提供的软件,使用UART可很容易地实现程序下载。STC12C5A60S2有36个通用I/O口,大部分可位控,并且有强推挽输出的能力,足够系统使用。还拥有4个16bit定时器和一个独立的波特率发生器,另外还有两个PCA 4 基于单片机的PWM的LED调光设计 模块,能获得丰富的定时器资源。STC12C5A60S2有PDIP-40封装的芯片,易于快速进入实验。封装引脚图如图3.1所示。 图3.1 STC12C5A60S2芯片PDIP封装引脚图 STC12C5A60S2主要性能: 1(增强型8051CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051。 2(STC12C5A60S2系列工作电压:3.3V- 5.5V;STC12LE5A60S2系列工作电压:3.6V-2.2V。 3(工作频率范围:0-35MHz,相当于普通8051的0-420MHz。 4(用户应用程序空间8K/16K/20K/32K/40K/48K/52K/60K/62K字节等。 5(片上集成128 0字 个人自传范文3000字为中华之崛起而读书的故事100字新时代好少年事迹1500字绑架的故事5000字个人自传范文2000字 节RAM。 6(通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051传统I/O口)。可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏。每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过55mA。 7(ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片。 8(有EEPROM功能(STC12C5A62S2/AD/PWM无内部EEPROM)。 9(看门狗。 10(内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地)。 11(外部掉电检测电路:在P4.6口有一个低压门槛比较器。5V单片机为1.32V,误差为?5%;3.3V单片机为1.30V,误差为?3%。 12(时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为?5%到?10%以内)用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟。常温下内部R/C振荡器频率为:5.0V单片机为:11MHz,15.5MHz;3.3V单片机为:8MHz,12MHz。 5 基于单片机的PWM的LED调光设计 精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准。 13(共4个16位定时器,两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器。做串行通讯的波特率发生器,再加上2路PCA模块可再实现2个16位定时器。 14. 2个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟。 15(外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块,Power Down模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0,CCP0/P1.3(也可通过寄存器设置到P4.2 ),CCP1/P1.4 (也可通过寄存器设置到P4.3)。 16(PWM(2路)/PCA(可编程计数器阵列,2路),也可用来当2路D/A使用,也可用来再实现2个定时器,也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持)。 17(A/D转换,10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次)。 18(通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口。 19(STC12C5A60S2系列有双串口,后缀有S2标志的才有双串口,RxD2/P1.2(可通过寄存器设置到P4.2),TxD2/P1.3(可通过寄存器设置到P4.3)。 20(工作温度范围:-40 - +85?(工业级) /0 - 75?(商业级)。 21(封装:PDIP-40,LQFP-44,LQFP-48,I/O口不够时,可用2到3根普通I/O口线外接,74HC164/165/595(均可级联)来扩展I/O口,还可用A/D做按键扫描来节省I/O口,或用双CPU,三线通信,还多了串口。 STC12C5A60S2单片机最小系统由STC12C5A60S2单片机及其时钟和复位电路组成,是整个自动称重系统控制部分的核心。该单片机是宏晶科技生产的单时钟/机器周期的单片机,指令代码完全兼容传统8051,但速度快8-12倍,提供Flash程序存储器60kByte,1kByte的EEPROM,片上集成1280Byte RAM。工作电压3.5-5.5V,内部集成MAX810专用复位电路,拥有4个定时器,2个串口,2路PWM,8路高速10位A/D转换,ISP/IAP,内置看门狗电路,外部掉电检测电路等。STC12C5A60S2的最小系统包括复位电路和时钟电路,复位电路有上电复位、按键复位、看门狗等复位方式,本设计采用按键复位方式。在单片机的X1、X2引脚之间加上11.0592MHZ的晶振,并通过20pF左右的电容接地为单片机提供工作时钟。其最小系统如图3.2所示。 6 基于单片机的PWM的LED调光设计 图3.2单片机最小系统电路图 3.2 LED驱动电路 本次设计 L ED 光源共由1只5mm 高亮度小功率LED 灯珠组成;灯珠的压降约3.1V,工作电流约20mA。由白光LED 的正向伏安特性可知,当LED 端电压超过其正向导通电压后,较小的电压波动都会导致工作电流的的剧烈变化,从而影响LED的正常使用,固LED 宜采用恒流驱动方式。采用PWM调光,其基本原理是保持LED正向导通电流恒定,而通过控制电流导通和关断的时间比例,即改变输入脉冲信号的占空比,使LED产生亮暗变化;并利用人眼的视觉残留效应,当LED 亮暗变化频率大于120Hz 时,人眼就不会感觉到闪烁,而看到是LED 的平均亮度。PWM 调光的优势是LED正向导通的电流是恒定的,LED的色度就不会像模拟调光时产生变化。 输出的电流值计算公式为: TonII,L (1.1) T 单片机的频率是20KHz,时钟周期为T为50μS。LED驱动电路如图3.3 7 基于单片机的PWM的LED调光设计 LED驱动电路图 图3.3 L1为镇流电感,选取100μH,用于稳定通过LED 的电流。D1 是续流二极管,当芯片内部MOS 管截止状态时为储存在电感L1中的电流提供放电回路。PWM 脉冲信号则由 4口产生,其高低电平决定LED的通断状态。将定时器T0溢出中断定为1/2500 单片机P1. 秒(即400μS),每10 次脉冲作为一个周期,即频率为250HZ。这样,在每1/250 秒的方波周期中,通过改变方波的输出占空比,从而实现LED 灯的10 级亮度调节,即LED 亮度等级由每个周期内的高电平脉冲数目决定。当高电平脉冲个数为1 时,占空比为1/10,亮度最低,其调光原理如图3.4所示;当高电平脉冲为10 时,占空比为1,LED亮度最大。 图3.4PWM 调光原理图 3.3 按键电路 ,模式的切换需要按键完成,根据所需功能和要求,该系统该系统有3个选择模式 采用的是4个独立式按键,分别为MODE键、UP键、DN键和ENT键。MODE键功能为模式切换,ENT键为数字清零及部分画面切换功能,UP键起数字加作用,DN起数字减功能。MODE键与单片机P20口相接,UP键与单片机P21口相接,DN键与单片机P22口相接,ENT键与单片机P32口相接,最终完成模式切换和数码管显示电压功能。电路如图3.5所示。 8 基于单片机的PWM的LED调光设计 图4.3 按键电路图 4 系统软件设计 4.1 软件总体设计 对于该LED调光系统,软件部分主要包括系统初始化子程序、手动控制子程序、自动控制子程序、AD采集子程序、模式选择子程序等。总体设计思路为:首先进行系统初始化,主要是设置定时器的工作方式、赋初值及等。在while循环中调用各个子程序,实现LED调光系统的各个功能。LED调光系统主函数流程图设计为如图4.1所示。 图5.1 系统主函数流程图 9 基于单片机的PWM的LED调光设计 4.2 手动调光程序设计 手动调光时,分为十档,分别输出不同的占空比对LED的电流进行控制,从而对LED的亮度进行调节。其流程图如图4.2所示。 图4.2手动调光程序流程图 4.3 自动调光程序设计 自动调光时,在一个子函数里调用控制LED亮度函数,再通过循环和延时实现一个LED亮度的变化(呼吸灯)。其流程图如图4.3所示。 图4.3手动调光程序流程图 10 基于单片机的PWM的LED调光设计 4.4 AD采集程序 本次设计AD采集所用的位数为10位(便于计算,且比8位更精确),光敏电阻采集的信号经过放大器放大反馈给P10口,经过单片机的处理数码管显示其采样值,再送给LED灯,从而达到控制灯亮度的变化。其流程图如图4.4所示。 图4.4AD采样程序流程图 4.5 按键程序设计 4个按键操作主要在定时器0中断中完成。进入按键扫描程序,如果有键按下就先延时去抖动确定有键按下,再判断是哪个键按下。每个按键具体作用如下: 在模式1中,MODE键功能默认工作方式为手动控制;UP键为灯亮度的加控制;DOWN为灯亮度的减控制,长按MODE键则跳出手动控制。 在模式2中,按下MODE键则进入自动控制(呼吸灯),每100ms对应一个亮度变化,长按MODE键则跳出自动控制 在模式3中,按下MODE键进入AD采集模式,灯的亮度变化与环境光和光敏电阻反馈的信号有关。长按MODE键则跳出AD采集模式。 按键程序流程图如图4.5所示。 11 基于单片机的PWM的LED调光设计 图4.5 按键程序流程图 12 基于单片机的PWM的LED调光设计 5 总结 此次设计LED调光系统,历时4周,克服了经验不足等诸多问题,最终得以完成。在整个设计中,实现了手动调光,自动调光,基于环境变化调光等,基本功能全部实现。拓展功能做得不是很好,只实现光敏自动调光,而对采集的光照数据进行处理,利用3σ准则剔除粗大误差,设计算术平均数字滤波器和手动遥控调光功能没能实现,主要因素是在这方面能力欠缺和时间不足。调试过程中也遇到不少的问题:先是拓展板的光敏电阻位置焊错,在拆卸的时候废了不少的劲。软件调试过程中:先是未加“STC12C5A60S2.H”头文件,导致出现大量的错误。之后在按键模块各个分程序没有很好的衔接,导致数码管显示乱码,LED灯亮度没有变化,最后在老师和同学的帮助下最终很好地解决了上诉问题。 13 基于单片机的PWM的LED调光设计 参考文献 [1] 谭浩强.C程序设计[M].北京:清华大学出版社,1991 [2] 高海生,杨文焕.单片机应用技术大全[M].西南交通大学出版社,1999-06. [3] 徐爱钧,彭秀华.单片机高级C51应用程序设计[M].中国计量出版社,2001. [4] 马盅梅.单片机的C语言应用程序设计[M].北京航 [5] 胡文金.单片机应用技术实训教程[M].重庆:重庆大学出版社,2005. 14 基于单片机的PWM的LED调光设计 致谢 通过4周的努力,终于完成了LED调光的设计及调试工作。由于设计经验的不足在设计及调试中遇到了很多困难,但得到了老师和同学们的帮助,在此对他们表示感谢。在软件编写与调试中也得到了老师们的指导,在此由衷地感谢他们。由于本人的硬件设计和调试全在I509实验室完成,实验室的负责老师给我提供了设计地方和全部所需器材,非常感谢老师的帮助。 在整个课程设计过程中,我的指导老师杨波老师一直都是耐心的指导,至始至终都没有停止过对我的辅导,让我学到了许多知识,使我受益非浅。 最后,感谢学校、学院给予这样的一次机会,经历了整个设计过程,我的收获是丰富的,也对整个大学的知识进行了梳理,对所学专业有了更深刻的认识。 15 基于单片机的PWM的LED调光设计 附录1 系统电路图 16 基于单片机的PWM的LED调光设计 附录2 程序清单 //头文件 #include #include #define uchar unsigned char #define uint unsigned int #define THCO 0xEE #define TLCO 0x3F #define AD_CHANNEL 0 unsigned int vx=10; unsigned char code Duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76};// 段选码 unsigned char Data_Buffer[6]={0,0,0,0}; unsigned char Hour=7,Min=0,Sec=20; //时钟时间 unsigned int flag=0;//1分时间到标志 bit AD_flag=0; bit SOS_flag=0; char tp=0; unsigned int v; unsigned int temp1=600; unsigned char Mode=0; unsigned char K=1; bit flag1=0; //vx=5在用于12864LCD的LED背光调整时上电为半亮度状态,可根据自己的用途及要求任意设定 sbit KEY_H=P2^2; sbit KEY_L=P2^1; sbit MODE=P2^0; sbit P34=P3^4; sbit P35=P3^5; sbit P36=P3^6; sbit P37=P3^7; sbit P14=P1^4; sbit P24=P2^4; sbit P25=P2^5; sbit P26=P2^6; sbit P27=P2^7; sbit P32=P3^2; /*******************************************************************************/ void PWM_init (void) {//PWM初始化函数 CMOD=0x02; //设置PCA定时器 系统时钟 SYclk/2 CL=0x00; CH=0x00; CCAPM1=0x42; //PWM1设置PCA工作方式为PWM方式(0100 0010) 8位pwm输出无中断 CCAP1L=0xff; //设置PWM1初始值与CCAP0H相同 CCAP1H=0xff; // PWM1初始时为0 //启动PCA定时器 } /******************************************************************************/ void PWM1_set (unsigned int a) {//PWM1占空比设置函数 17 基于单片机的PWM的LED调光设计 CCAP1L=a; //设置值直接写入CCAP1L CCAP1H=a; //设置值直接写入CCAP1H } /*****************************************************************************/ void DelayM(unsigned int a){//延时函数 1mS/次(用于1T单片机) unsigned char n,i,j; while(--a!=0){ for(n=1;n>0;n--) for(j=222;j>0;j--) for(i=12;i>0;i--); } } /****************************************************************************/ /******************************************************************************/ void manual_control() //手动控制 { PWM1_set(vx*25); //--------减调整---------// if (KEY_L == 0 ){ DelayM(20); //延时20毫秒消抖动 if(KEY_L == 0){ //如果20SM后KEY_L还是0状态则确认下调键是按下的 vx--; if(vx<1){vx=10;} //如果设定vx=10,将语句改为if(vx<1){vx=10;}则为单按键循环控制,则可去除加调整控制部分 } while(KEY_L == 0);//等待键松开 } //--------加调整---------// if (KEY_H == 0 ){ DelayM(20); if(KEY_H == 0) { vx++; if(vx>=11){vx=1;} } while(KEY_H == 0); } } /******************************************************************************/ void dispaly1() { flag=0 ; Data_Buffer[0]=0; Data_Buffer[1]=vx; Data_Buffer[2]=0; Data_Buffer[3]=0; } /******************************************************************************/ void a1() { 18 基于单片机的PWM的LED调光设计 P34=0,P37=1,manual_control(); dispaly1();CR=1; } /***********************************/ unsigned int AD_Sample(unsigned char channel) { uint i,q=0; unsigned int temp; for(i=0;i<10;i++) { tp=0; ADC_RES=0; ADC_RESL=0; ADC_CONTR=0x88|channel;//选择AD当前通道,并启动转换 while(!tp) { tp=0x10; tp&=ADC_CONTR; } ADC_CONTR&=0xe7; temp=(ADC_RES&0x03)*256+ADC_RESL; q=q+temp; } temp=q/10; return temp; } //////////////////////////////////// void a2() { if(flag1==1) {flag1=0; v=AD_Sample(AD_CHANNEL); Data_Buffer[0]=v/1000; Data_Buffer[1]=v/100%10; Data_Buffer[2]=v/10%10; Data_Buffer[3]=v%10; } if(v<500) {PWM1_set(25); } if(v>510) { PWM1_set(0xff); } } void AD_init() { P1M0=1; //P10设为A/D转换功以能 P1M1=1; P1ASF=0X01; //通道选择 AUXR1|=0x04; ADC_CONTR=0x80; //打开A/D转换器电源 } 19 基于单片机的PWM的LED调光设计 / /******************************/ void SOS_LED() //呼吸灯子函数 { unsigned int i; for(i = 100;i < 240;i=i+5) { PWM1_set(i); DelayM(200); } for(i = 240;i > 100;i=i-5) { PWM1_set(i); DelayM(200); } } /**************************/ void main(void) { static unsigned int flag1=0; unsigned char i; TMOD=0x11; //定时器0初始化 TH0=THCO; TL0=TLCO; TR0=1; ET0=1; EA=1; KEY_H = 1;KEY_L = 1; PWM_init (); while(1) { if (MODE == 0 ){ DelayM(20); //延时20毫秒消抖动 if(MODE == 0){ //如果20SM后KEY_L还是0状态则确认下调键是按下的 flag1++ ; if(flag1>=4){flag1=0;} //如果设定vx=10,将语句改为if(vx<1){vx=10;}则为单按键循环控制,则可去除加调整控制部分 } while(MODE == 0);//等待键松开 } switch(flag1) { case 0:a1();break; case 1: PWM_init();CR=1; P37=0; P36=1; SOS_LED();break; case 2: CR=0,CL=0,CH=0;break; case 3: AD_init();PWM_init();CR=1;a2();break; } } } void timer0() interrupt 1 {static unsigned char count=0; static unsigned char AD_count=0; 20 基于单片机的PWM的LED调光设计 static unsigned char Bit=0; //静态变量,退出程序后,值保留 TH0=THCO; TL0=TLCO; if(flag==1) count++; if(count>=200) //秒计时,定时器定时5ms,计200次为一秒 { count=0; Sec--; } if(Sec==0) { Sec=20,CR=0, CCON = 0; CL = 0; //复位PCA的计数器 CH = 0; flag=0;} AD_count++; if(AD_count>=100) //半S时间到 { AD_count=0; flag1=1; } Bit++; if(Bit>=4)Bit=0; P24=P25=P26=P27=1; //先关位码 P0=Duan[Data_Buffer[Bit]]; //开段码 if(count<100&&Bit==1)P0|=0x80;//0.5S中间小数点亮,之后灭,不断循环 switch(Bit) //送位码 { case 0: P24=0;break; case 1: P25=0;break; case 2: P26=0;break; case 3: P27=0;break; } } (不加头文件程序无法运行哟~) 头文件 STC12C5A60S2.H //-------------------------------------------------------------------------------- //新一代 1T 8051系列 单片机内核特殊功能寄存器 C51 Core SFRs // 7 6 5 4 3 2 1 0 Reset Value sfr ACC = 0xE0; //Accumulator 21 基于单片机的PWM的LED调光设计 0000,0000 sfr B = 0xF0; //B Register 0000,0000 sfr PSW = 0xD0; //Program Status Word CY AC F0 RS1 RS0 OV F1 P 0000,0000 //----------------------------------- sbit CY = PSW^7; sbit AC = PSW^6; sbit F0 = PSW^5; sbit RS1 = PSW^4; sbit RS0 = PSW^3; sbit OV = PSW^2; sbit P = PSW^0; //----------------------------------- sfr SP = 0x81; //Stack Pointer 0000,0111 sfr DPL = 0x82; //Data Pointer Low Byte 0000,0000 sfr DPH = 0x83; //Data Pointer High Byte 0000,0000 //-------------------------------------------------------------------------------- //新一代 1T 8051系列 单片机系统管理特殊功能寄存器 // 7 6 5 4 3 2 1 0 Reset Value sfr PCON = 0x87; //Power Control SMOD SMOD0 LVDF POF GF1 GF0 PD IDL 0001,0000 // 7 6 5 4 3 2 1 0 Reset Value sfr AUXR = 0x8E; //Auxiliary Register T0x12 T1x12 UART_M0x6 BRTR S2SMOD BRTx12 EXTRAM S1BRS 0000,0000 //----------------------------------- sfr AUXR1 = 0xA2; //Auxiliary Register 1 - PCA_P4 SPI_P4 S2_P4 GF2 ADRJ - DPS 0000,0000 /* PCA_P4: 0, 缺省PCA 在P1 口 1,PCA/PWM 从P1 口切换到P4 口: ECI 从P1.2 切换到P4.1 口, PCA0/PWM0 从P1.3 切换到P4.2 口 PCA1/PWM1 从P1.4 切换到P4.3 口 SPI_P4: 0, 缺省SPI 在P1 口 1,SPI 从P1 口切换到P4 口: SPICLK 从P1.7 切换到P4.3 口 MISO 从P1.6 切换到P4.2 口 MOSI 从P1.5 切换到P4.1 口 SS 从P1.4 切换到P4.0 口 S2_P4: 0, 缺省UART2 在P1 口 1,UART2 从P1 口切换到P4 口: TxD2 从P1.3 切换到P4.3 口 RxD2 从P1.2 切换到P4.2 口 GF2: 通用标志位 ADRJ: 0, 10 位A/D 转换结果的高8 位放在ADC_RES 寄存器, 低2 位放在ADC_RESL 寄存器 1,10 位A/D 转换结果的最高2 位放在ADC_RES 寄存器的低2 位, 低8 位放在ADC_RESL 寄存器 22 基于单片机的PWM的LED调光设计 DPS: 0, 使用缺省数据指针DPTR0 1,使用另一个数据指针DPTR1 */ //----------------------------------- sfr WAKE_CLKO = 0x8F; //附加的 SFR WAK1_CLKO /* 7 6 5 4 3 2 1 0 Reset Value PCAWAKEUP RXD_PIN_IE T1_PIN_IE T0_PIN_IE LVD_WAKE _ T1CLKO T0CLKO 0000,0000B b7 - PCAWAKEUP : PCA 中断可唤醒 powerdown。 b6 - RXD_PIN_IE : 当 P3.0(RXD) 下降沿置位 RI 时可唤醒 powerdown(必须打开相应中断)。 b5 - T1_PIN_IE : 当 T1 脚下降沿置位 T1 中断标志时可唤醒 powerdown(必须打开相应中断)。 - T0_PIN_IE : 当 T0 脚下降沿置位 T0 中断标志时可唤醒 powerdown(必须打开相应中断)。 b4 b3 - LVD_WAKE : 当 CMPIN 脚低电平置位 LVD 中断标志时可唤醒 powerdown(必须打开相应中 断)。 b2 - b1 - T1CLKO : 允许 T1CKO(P3.5) 脚输出 T1 溢出脉冲,Fck1 = 1/2 T1 溢出率 b0 - T0CLKO : 允许 T0CKO(P3.4) 脚输出 T0 溢出脉冲,Fck0 = 1/2 T1 溢出率 */ //----------------------------------- sfr CLK_DIV = 0x97; //Clock Divder - - - - - CLKS2 CLKS1 CLKS0 xxxx,x000 //----------------------------------- sfr BUS_SPEED = 0xA1; //Stretch register - - ALES1 ALES0 - RWS2 RWS1 RWS0 xx10,x011 /* ALES1 and ALES0: 00 : The P0 address setup time and hold time to ALE negative edge is one clock cycle 01 : The P0 address setup time and hold time to ALE negative edge is two clock cycles. 10 : The P0 address setup time and hold time to ALE negative edge is three clock cycles. (default) 11 : The P0 address setup time and hold time to ALE negative edge is four clock cycles. RWS2,RWS1,RWS0: 000 : The MOVX read/write pulse is 1 clock cycle. 001 : The MOVX read/write pulse is 2 clock cycles. 010 : The MOVX read/write pulse is 3 clock cycles. 011 : The MOVX read/write pulse is 4 clock cycles. (default) 100 : The MOVX read/write pulse is 5 clock cycles. 101 : The MOVX read/write pulse is 6 clock cycles. 110 : The MOVX read/write pulse is 7 clock cycles. 111 : The MOVX read/write pulse is 8 clock cycles. */ //-------------------------------------------------------------------------------- //新一代 1T 8051系列 单片机中断特殊功能寄存器 //有的中断控制、中断标志位散布在其它特殊功能寄存器中,这些位在位地址中定义 //其中有的位无位寻址能力,请参阅 新一代 1T 8051系列 单片机中文指南 // 7 6 5 4 3 2 1 0 Reset Value sfr IE = 0xA8; //中断控制寄存器 EA ELVD EADC ES ET1 EX1 ET0 EX0 0x00,0000 //----------------------- sbit EA = IE^7; 23 基于单片机的PWM的LED调光设计 sbit ELVD = IE^6; //低压监测中断允许位 sbit EADC = IE^5; //ADC 中断允许位 sbit ES = IE^4; sbit ET1 = IE^3; sbit EX1 = IE^2; sbit ET0 = IE^1; sbit EX0 = IE^0; //----------------------- sfr IE2 = 0xAF; //Auxiliary Interrupt - - - - - - ESPI ES2 0000,0000B //----------------------- // 7 6 5 4 3 2 1 0 Reset Value sfr IP = 0xB8; //中断优先级低位 PPCA PLVD PADC PS PT1 PX1 PT0 PX0 0000,0000 //-------- sbit PPCA = IP^7; //PCA 模块中断优先级 sbit PLVD = IP^6; //低压监测中断优先级 sbit PADC = IP^5; //ADC 中断优先级 sbit PS = IP^4; sbit PT1 = IP^3; sbit PX1 = IP^2; sbit PT0 = IP^1; sbit PX0 = IP^0; //----------------------- // 7 6 5 4 3 2 1 0 Reset Value sfr IPH = 0xB7; //中断优先级高位 PPCAH PLVDH PADCH PSH PT1H PX1H PT0H PX0H 0000,0000 sfr IP2 = 0xB5; // - - - - - - PSPI PS2 xxxx,xx00 sfr IPH2 = 0xB6; // - - - - - - PSPIH PS2H xxxx,xx00 //----------------------- //新一代 1T 8051系列 单片机I/O 口特殊功能寄存器 // 7 6 5 4 3 2 1 0 Reset Value sfr P0 = 0x80; //8 bitPort0 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 1111,1111 sfr P0M0 = 0x94; // 0000,0000 sfr P0M1 = 0x93; // 0000,0000 sfr P1 = 0x90; //8 bitPort1 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 1111,1111 sfr P1M0 = 0x92; // 0000,0000 sfr P1M1 = 0x91; // 0000,0000 sfr P1ASF = 0x9D; //P1 analog special function sfr P2 = 0xA0; //8 bitPort2 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 1111,1111 sfr P2M0 = 0x96; // 0000,0000 sfr P2M1 = 0x95; // 0000,0000 24 基于单片机的PWM的LED调光设计 sfr P3 = 0xB0; //8 bitPort3 P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0 1111,1111 sfr P3M0 = 0xB2; // 0000,0000 sfr P3M1 = 0xB1; // 0000,0000 sfr P4 = 0xC0; //8 bitPort4 P4.7 P4.6 P4.5 P4.4 P4.3 P4.2 P4.1 P4.0 1111,1111 sfr P4M0 = 0xB4; // 0000,0000 sfr P4M1 = 0xB3; // 0000,0000 // 7 6 5 4 3 2 1 0 Reset Value sfr P4SW = 0xBB; //Port-4 switch - LVD_P4.6 ALE_P4.5 NA_P4.4 - - - - x000,xxxx sfr P5 = 0xC8; //8 bitPort5 - - - - P5.3 P5.2 P5.1 P5.0 xxxx,1111 sfr P5M0 = 0xCA; // 0000,0000 sfr P5M1 = 0xC9; // 0000,0000 //-------------------------------------------------------------------------------- //新一代 1T 8051系列 单片机定时器特殊功能寄存器 // 7 6 5 4 3 2 1 0 Reset Value sfr TCON = 0x88; //T0/T1 Control TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 0000,0000 //----------------------------------- sbit TF1 = TCON^7; sbit TR1 = TCON^6; sbit TF0 = TCON^5; sbit TR0 = TCON^4; sbit IE1 = TCON^3; sbit IT1 = TCON^2; sbit IE0 = TCON^1; sbit IT0 = TCON^0; //----------------------------------- sfr TMOD = 0x89; //T0/T1 Modes GATE1 C/T1 M1_1 M1_0 GATE0 C/T0 M0_1 M0_0 0000,0000 sfr TL0 = 0x8A; //T0 Low Byte 0000,0000 sfr TH0 = 0x8C; //T0 High Byte 0000,0000 sfr TL1 = 0x8B; //T1 Low Byte 0000,0000 sfr TH1 = 0x8D; //T1 High Byte 0000,0000 //-------------------------------------------------------------------------------- //新一代 1T 8051系列 单片机串行口特殊功能寄存器 // 7 6 5 4 3 2 1 0 Reset Value sfr SCON = 0x98; //Serial Control SM0/FE SM1 SM2 REN TB8 RB8 TI RI 0000,0000 //----------------------------------- sbit SM0 = SCON^7; //SM0/FE 25 基于单片机的PWM的LED调光设计 sbit SM1 = SCON^6; sbit SM2 = SCON^5; sbit REN = SCON^4; sbit TB8 = SCON^3; sbit RB8 = SCON^2; sbit TI = SCON^1; sbit RI = SCON^0; //----------------------------------- sfr SBUF = 0x99; //Serial Data Buffer xxxx,xxxx sfr SADEN = 0xB9; //Slave Address Mask 0000,0000 sfr SADDR = 0xA9; //Slave Address 0000,0000 //----------------------------------- // 7 6 5 4 3 2 1 0 Reset Value sfr S2CON = 0x9A; //S2 Control S2SM0 S2SM1 S2SM2 S2REN S2TB8 S2RB8 S2TI S2RI 00000000B sfr S2BUF = 0x9B; //S2 Serial Buffer xxxx,xxxx sfr BRT = 0x9C; //S2 Baud-Rate Timer 0000,0000 //-------------------------------------------------------------------------------- //新一代 1T 8051系列 单片机看门狗定时器特殊功能寄存器 sfr WDT_CONTR = 0xC1; //Watch-Dog-Timer Control register // 7 6 5 4 3 2 1 0 Reset Value // WDT_FLAG - EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0 xx00,0000 //----------------------- //-------------------------------------------------------------------------------- //新一代 1T 8051系列 单片机PCA/PWM 特殊功能寄存器 // 7 6 5 4 3 2 1 0 Reset Value sfr CCON = 0xD8; //PCA 控制寄存器。 CF CR - - - - CCF1 CCF0 00xx,xx00 //----------------------- sbit CF = CCON^7; //PCA计数器溢出标志,由硬件或软件置位,必须由软件清0。 sbit CR = CCON^6; //1:允许 PCA 计数器计数, 必须由软件清0。 //- //- sbit CCF1 = CCON^1; //PCA 模块1 中断标志, 由硬件置位, 必须由软件清0。 sbit CCF0 = CCON^0; //PCA 模块0 中断标志, 由硬件置位, 必须由软件清0。 //----------------------- sfr CMOD = 0xD9; //PCA 工作模式寄存器。 CIDL - - - CPS2 CPS1 CPS0 ECF 0xxx,x000 /* CIDL: idle 状态时 PCA 计数器是否继续计数, 0: 继续计数, 1: 停止计数。 CPS2: PCA 计数器脉冲源选择位 2。 CPS1: PCA 计数器脉冲源选择位 1。 CPS0: PCA 计数器脉冲源选择位 0。 CPS2 CPS1 CPS0 0 0 0 系统时钟频率 fosc/12。 26 基于单片机的PWM的LED调光设计 0 0 1 系统时钟频率 fosc/2。 0 1 0 Timer0 溢出。 0 1 1 由 ECI/P3.4 脚输入的外部时钟,最大 fosc/2。 1 0 0 系统时钟频率, Fosc/1 1 0 1 系统时钟频率/4,Fosc/4 1 1 0 系统时钟频率/6,Fosc/6 1 1 1 系统时钟频率/8,Fosc/8 ECF: PCA计数器溢出中断允许位, 1--允许 CF(CCON.7) 产生中断。 */ //----------------------- sfr CL = 0xE9; //PCA 计数器低位 0000,0000 sfr CH = 0xF9; //PCA 计数器高位 0000,0000 //----------------------- // 7 6 5 4 3 2 1 0 Reset Value sfr CCAPM0 = 0xDA; //PCA 模块0 PWM 寄存器 - ECOM0 CAPP0 CAPN0 MAT0 TOG0 PWM0 ECCF0 x000,0000 sfr CCAPM1 = 0xDB; //PCA 模块1 PWM 寄存器 - ECOM1 CAPP1 CAPN1 MAT1 TOG1 PWM1 ECCF1 x000,0000 //ECOMn = 1:允许比较功能。 //CAPPn = 1:允许上升沿触发捕捉功能。 //CAPNn = 1:允许下降沿触发捕捉功能。 //MATn = 1:当匹配情况发生时, 允许 CCON 中的 CCFn 置位。 //TOGn = 1:当匹配情况发生时, CEXn 将翻转。 //PWMn = 1:将 CEXn 设置为 PWM 输出。 //ECCFn = 1:允许 CCON 中的 CCFn 触发中断。 //ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn // 0 0 0 0 0 0 0 0x00 未启用任何功能。 // x 1 0 0 0 0 x 0x21 16位CEXn上升沿触发捕捉功能。 // x 0 1 0 0 0 x 0x11 16位CEXn下降沿触发捕捉功能。 // x 1 1 0 0 0 x 0x31 16位CEXn边沿(上、下沿)触发捕捉功能。 // 1 0 0 1 0 0 x 0x49 16位软件定时器。 // 1 0 0 1 1 0 x 0x4d 16位高速脉冲输出。 // 1 0 0 0 0 1 0 0x42 8位 PWM。 //ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn // 0 0 0 0 0 0 0 0x00 无此操作 // 1 0 0 0 0 1 0 0x42 普通8位PWM, 无中断 // 1 1 0 0 0 1 1 0x63 PWM输出由低变高可产生中断 // 1 0 1 0 0 1 1 0x53 PWM输出由高变低可产生中断 // 1 1 1 0 0 1 1 0x73 PWM输出由低变高或由高变低都可产生中断 //----------------------- sfr CCAP0L = 0xEA; //PCA 模块 0 的捕捉/比较寄存器低 8 位。 0000,0000 sfr CCAP0H = 0xFA; //PCA 模块 0 的捕捉/比较寄存器高 8 位。 27 基于单片机的PWM的LED调光设计 0000,0000 sfr CCAP1L = 0xEB; //PCA 模块 1 的捕捉/比较寄存器低 8 位。 0000,0000 sfr CCAP1H = 0xFB; //PCA 模块 1 的捕捉/比较寄存器高 8 位。 0000,0000 //----------------------- // 7 6 5 4 3 2 1 0 Reset Value sfr PCA_PWM0 = 0xF2; //PCA 模块0 PWM 寄存器。 - - - - - - EPC0H EPC0L xxxx,xx00 sfr PCA_PWM1 = 0xF3; //PCA 模块1 PWM 寄存器。 - - - - - - EPC1H EPC1L xxxx,xx00 //PCA_PWMn: 7 6 5 4 3 2 1 0 // - - - - - - EPCnH EPCnL //B7-B2: 保留 //B1(EPCnH): 在 PWM 模式下,与 CCAPnH 组成 9 位数。 PWM 模式下,与 CCAPnL 组成 9 位数。 //B0(EPCnL): 在 //-------------------------------------------------------------------------------- //新一代 1T 8051系列 单片机 ADC 特殊功能寄存器 // 7 6 5 4 3 2 1 0 Reset Value sfr ADC_CONTR = 0xBC; //A/D 转换控制寄存器 ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000 sfr ADC_RES = 0xBD; //A/D 转换结果高8位 ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2 0000,0000 sfr ADC_RESL = 0xBE; //A/D 转换结果低2位 ADCV.1 ADCV.0 0000,0000 //-------------------------------------------------------------------------------- //新一代 1T 8051系列 单片机 SPI 特殊功能寄存器 // 7 6 5 4 3 2 1 0 Reset Value sfr SPCTL = 0xCE; //SPI Control Register SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 0000,0100 sfr SPSTAT = 0xCD; //SPI Status Register SPIF WCOL - - - - - - 00xx,xxxx sfr SPDAT = 0xCF; //SPI Data Register 0000,0000 //-------------------------------------------------------------------------------- //新一代 1T 8051系列 单片机 IAP/ISP 特殊功能寄存器 sfr IAP_DATA = 0xC2; sfr IAP_ADDRH = 0xC3; sfr IAP_ADDRL = 0xC4; // 7 6 5 4 3 2 1 0 Reset Value sfr IAP_CMD = 0xC5; //IAP Mode Table 0 - - - - - MS1 MS0 0xxx,xx00 sfr IAP_TRIG = 0xC6; sfr IAP_CONTR = 0xC7; //IAP Control Register IAPEN SWBS SWRST CFAIL - WT2 WT1 WT0 0000,x000 //-------------------------------------------------------------------------------- 28 基于单片机的PWM的LED调光设计 29
本文档为【基于单片机的LED调光器的设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_594905
暂无简介~
格式:doc
大小:246KB
软件:Word
页数:43
分类:互联网
上传时间:2017-10-10
浏览量:52