CC单片机用定时器产生LED渐亮渐灭解读_第1页
CC单片机用定时器产生LED渐亮渐灭解读_第2页
CC单片机用定时器产生LED渐亮渐灭解读_第3页
CC单片机用定时器产生LED渐亮渐灭解读_第4页
CC单片机用定时器产生LED渐亮渐灭解读_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CC单片机用定时器产生LED渐亮渐灭解读第1页/共22页方法一:延时亮延时灭灭延时(周期减亮延时)亮判断:改变亮度的时间到了吗?增加亮时间/减少亮时间NY第2页/共22页#include<ioCC2530.h>#defineuintunsignedint#defineucharunsignedchar#defineLED1P1_0//定义LED1为P1.0口控制/****************************//初始化程序*****************************/voidInitLed(void)//初始化函数{P1DIR|=0x01;//P1_0定义为输出

LED1=1;//LED1灯初始化熄灭}voidys(ucharh)//延时{uchari,j;for(i=0;i<h;i++)for(j=0;j<200;j++);//改变判断语句可以改变周期(有闪烁感时,改小)}/***************************主函数***************************/voidmain(void){ucharh=0;//h越大越亮

ucharzt=1;//zt为1是渐亮,为2是渐灭

uintjs=0;InitLed();//调用初始化函数

第3页/共22页while(1){if(h>0)//不是最暗时(最暗时不亮)

{LED1=0;//亮

ys(h);//占空比为ys(h)/ys(254);}if(h<254)//不是最亮时(最亮时不灭)

{LED1=1;//灭

ys(254-h);//周期为ys(254);(改变254时可以改变周期,但是会改变亮度的精度)

}js++;if(js>=4)//改变占空比的时间(感觉渐亮渐灭太快可以改大)

{js=0;if(zt==1)//渐亮状态

h=h+1;else//渐暗状态

h=h-1;if(h==0)//最暗时

zt=1;//设置状态为渐亮

if(h==254)//最亮时

zt=2;//设置状态为渐灭}}}第4页/共22页方法二:定时器+通道输出比较方法:T1CC0T1CCn向上比较输出1,向下比较输出0。0x0000~T1CC0是周期T1CCn~T1CC0是灭时间第5页/共22页启动定时器基本要求:1.选择定时器。2.定时器工作方式。3.定时器的溢出值(T1CC0)。4.启动定时器。T1自由运行0xFFFF第6页/共22页设置定时器设置T1CTL-定时器1的控制和状态P10500000001T1CTL=0x01;周期=65536*1/16Mhz

4ms~~第7页/共22页了解T1STAT-定时器1状态P105OVFIF:定时器T1溢出中断标志(T1STAT&0x20>0时,定时器T1溢出)CHnIF:定时器T1通道n中断标志(定时器通道在T1CCn时),假如T1CC0T1CCn是通道2,T1STAT&0x04>0时,灯就灭了。第8页/共22页输出比较模式1.输出的引脚,P1.0设置为输出。P1的8个引脚对应8个设置位,最高位为P1.7设置位,最低位为P1.0设置位。P1DIR=0x01;为了避免直接赋值会冲掉P1的其它输出口,所以用“按位或”比较好。P1DIR=P1DIR|0x01;P1DIR|=0x01;第9页/共22页输出比较模式2.外设I/o引脚。定时器T1备用位置2P1.0通道2信息:P1.0、定时器T1、备用位置2、通道2、外设功能第10页/共22页输出比较模式PERCFG=01000000B;=0x40;3.外设控制。第11页/共22页输出比较模式4.输出的引脚,P1.0设置为外设功能P1的8个引脚对应8个设置为最高位为P1.7设置位,最低位为P1.0设置位。P1SEL=0x01;为了避免直接赋值会冲掉P1的其它外设功能口,所以用“按位或”比较好。P1SEL=P1SEL|0x01;P1SEL|=0x01;第12页/共22页输出比较模式5.设置T1CCTL2-定时器1通道2捕获/比较控制10100100T1CCTL2=0x64;T1CC0T1CC2第13页/共22页输出比较模式6.设置T1CC2-定时器1通道2捕获/比较值。先写低位,再写高位T1CC2L=0xFF;T1CC2H=h;第14页/共22页程序初始P1DIR|=0x01;//P1.0设置为输出LED1=1;//灭T1CTL=0x01;//定时器1的控制和状态PERCFG=0X40;//外设控制P1SEL|=0x01;//P1.0设置为外设功能T1CCTL2=0x64;//定时器1通道2比较控制T1CC2L=0xFF;//定时器通道2比较值T1CC2H=h;第15页/共22页程序初始化判断:通道2有没有中断(1周期一次)清除中断标志,js++;判断:改变亮度的时间到没判断:状态是不是渐亮h=h+1;h=h-1;通道2比较值重装判断:是不是最亮状态改为渐灭判断:是不是最暗状态改为渐亮YNNNNNYYNYY第16页/共22页#include<ioCC2530.h>#defineuintunsignedint#defineucharunsignedchar//定义控制LED灯的端口#defineLED1P1_0//定义LED1为P10口控制ucharh=0x00;//h越大越亮//函数声明voidInitLed(void);//初始化P1口voidInitT1();//初始化定时器T1/****************************//初始化程序*****************************/voidchushiLed(void){P1DIR|=0x01;//P1_0定义为输出LED1=1;//LED1灯初始化熄灭}//定时器初始化voidchushiT1()//系统不配置工作时钟时默认是2分频,即16MHz{T1CTL=0x01;//1分频,自动重装0X0000-0XFFFFP105PERCFG=0X40;//定时器T1选择外设位置2P77P1SEL|=0x01;//P1.0选择外设功能T1CCTL2=0x64;//定时器T1通道2向上比较置1,比较模式P107T1CC2L=0xFF;T1CC2H=h;}第17页/共22页voidmain(void){ucharjs=0;uchara=1;//a=1为渐亮,a=2为渐灭。chushiLed();//调用初始化函数chushiT1();while(1){if((T1STAT&0x04)>0)//灭{T1STAT=T1STAT&0xfb;//清除中断标志js++;if(js>=1)//改变亮度的时间{js=0;//清零if(a==1)//渐亮h=h+1;else//渐灭h=h-1;T1CC2L=0xff;//重装比较值T1CC2H=h;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论