基于单片机的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