开源 呼吸灯代码 呼吸灯代码

#include <reg52.h>
sbit LED = P2^3; //我手头的实验板是LED接在P2^5口上,且赋0时是点亮
#define PWM_MAX 100//定义初始PWM值为0,以后我们可以改变PWM值就可以控制灯的亮度,根据时间反复改变PWM值就是呼吸灯了unsigned char PWM = 10; //定义PWM对比值,这个我们不用管,程序自动控制unsigned char PWM_Match = 0;//以下变量用途后面说明unsigned char Breath_Speed = 150;unsigned char Breath_Count = 0; unsigned char Breath_Direction = 0;
void delay(unsigned char t){unsigned char i,j; for(i=0; i<t; i++){ for(j=0; j<120; j++);}}
void main(){TMOD = 0x01; //设置定时器0工作方式为16位定时器TH0 = 0xFF;TL0 = 0x9C; //设定初值ET0 = 1; //使能定时器TR0 = 1; //使能定时器中断EA = 1; //打开全局中断while(1){//上面我们说了如何控制亮度,实现呼吸有两种方法,比较好理解的就是在main函数的while里写了,先看代码//第一个for实现"呼",LED逐渐变亮,就是i的值每隔一段时间增加1.第二个for实现吸//PWM = i其实是废话,不用i直接写PWM就是了,但是为了直观嘛
//下面说第二种方法,先说上面这种方法的弊端//延时函数,每执行到延时函数,单片机就不能干别的事了,程序停在了延时函数上,得等延时时间到了才能执行下面的函数//如果你还想用按键控制呼吸灯的速度的话,这个方法就显得不好了//第二种方法,我们可以仍在定时器中断中处理呼吸过程。大家转到定时器中断函数中看吧。
//使用第二种方法的话,如果你想通过按键控制呼吸灯速度,就可以在下面写按键代码了,改变Breath_Speed值即可改变呼吸灯速度}}

//定时器0中断函数//定时器原理:设定TH0和TL0两个寄存器并开启定时器使能后,//单片机在每个工作周期自动将这两个寄存器加1,直到溢出,//如果打开定时器中断和全局中断,溢出时将引发中断,//即暂停中断前运行的程序代码,转入中断函数代码,即下面的代码void time_int0() interrupt 1{TH0 = 0xFF;TL0 = 0x9C;//设定定时器初值(12MHZ晶振,100ns),定时器0只能通过程序重新定义初值
//------------------------------------PWM_Match++; //让PWM对比值自加1if(PWM_Match > PWM_MAX) PWM_Match = 0;//判断是否超出,if(PWM > PWM_Match){LED = 0; //如果PWM大于PWM对比值,则点亮LED}else{ LED = 1; //否则熄灭}
//以上为PWM处理代码(当然这个代码可以更为优化,这里主要为阐明原理)//PWM控制亮度原理是:通过控制LED点亮时间和熄灭时间的比值来控制亮度//由于点亮和熄灭的切换频率很快,人眼看不到LED闪烁,只能感觉到亮度发生变化//点亮的时间越长,熄灭时间越短,人眼感觉越亮//程序中,使用在0到PWM_MAX之间不断变化的PWM_Match来进行对比//我们设定的PWM值越大,就会有更多的机会被点亮


//呼吸灯的第二种处理办法//先说头上定义的几个变量:Breath_Speed表明呼吸速度(相当于延时时间),越大速度越慢//Breath_Count表示当前计数量,结和Breath_Speed使用//Breath_Direction表示呼吸方向,为0表示吸,为1表示呼
[开源]呼吸灯代码 呼吸灯代码
//如果使用第一种方法,一定记得屏蔽这里的相关代码,否则就冲突了if(Breath_Count == Breath_Speed){Breath_Count = 0; //一定记得归零//这种结构其实是用定时器做长时间延时的通用做法
//以下处理呼吸if(Breath_Direction == 0) //根据方向决定应该执行何种操作{PWM++;if(PWM > PWM_MAX)Breath_Direction = 1; //呼到尽头,接下来该吸了。。。}else{PWM--;if(PWM == 0) Breath_Direction = 0;}//处理呼吸结束}Breath_Count++; //Count自加1,这样每次执行到这里时,count自加,直到等于Speed时,才执行实际的操作(呼吸处理),相当于延时了}

  

爱华网本文地址 » http://www.aihuau.com/a/25101017/328536.html

更多阅读

单位代码或组织机构代码查询 新组织机构代码查询

单位代码或组织机构代码查询——简介组织机构代码证—社会经济活动中的通行证。代码是“组织机构代码”的简称。组织机构代码作用相当于单位的身份证号。如果想知道某个单位或组织是否合法或者想知道其机构代码,可以通过以下方式查

完美国际代码怎么改 完美国际刺客妖孽代码

1.如何修改代码   首先得找到代码路径,通过安装磁盘打开完美国际文件夹,然后打开element文件夹,接着打开userdata文件夹,最后打开character文件夹。好了,你这时看到18个文件,这些就是代码文件了。  路径显示:安装磁盘:完美世界国际版el

cf神秘营地卡灯教程 cf神秘之岛bug教程

首先拿副武器或近身武器(推荐开始最好用刀),在楼梯上选择好角度(角度最重要),跳的时候普通跳就可以,视角尽可能抬高点,自己多练习。卡灯有规律的选择关卡,比如20,29留一个,让一楼卡最好,并且一楼最好是房主。20等关卡灯时,其他人在灯房上,卡灯的

声明:《开源 呼吸灯代码 呼吸灯代码》为网友你惯的分享!如侵犯到您的合法权益请联系我们删除