求单片机大神帮忙设计一个电路,51单片机制作led呼吸灯的

要求是4个按键控制4个呼吸灯的开关,还有一个总按键控制控制他们的呼吸频率快慢,c语言和仿真电路,求各位帮帮忙。
775781530 满意有红包

    proteus仿真按理来说是不可能达得到效果的,因为这种仿真得有非常快的处理速度。我刚动手试了下和自己的想法相同,LED只会间断的闪烁。我是用AVR单片机,用51也是一样的。我这个程序也在实物试过效果很好。

*
@演示定时器1的快速PWM输出
@利用快速PWM输出控制LED的亮度变化,达到呼吸灯的效果
*/

#include<iom8a.h>
#include"port_set.h"
#include"delay.h"

/*********************************************
@函数功能:定时器1初始化
@说明:定时器初始化为快速PWM,TOP为8位(0x00FF)
时钟输入为系统时钟
匹配时OC1A输出0,在TOP时输出1
OC1B为普通端口
输入捕捉触发沿选择下降沿触发捕捉
捕捉中断禁止,通道A比较中断禁止
通道B比较中断禁止,溢出中断禁止
*********************************************/
void Timer1_Init(void)
{
TCCR1A = 0x81;
TCCR1B = 0x89;
OCR1A = (unsigned int)0x0;
OCR1B = (unsigned int)0x0;
ICR1  = (unsigned int)0x0;
TCNT0 = (unsigned int)0x0;
SFIOR |= 0x1;
TIMSK |= 0x0;
}

void main(void)
{
unsigned char ocr = 0;    //比较值
signed char ddr_flag = 1; //比较值的增长方向

IO_SET_OUT(B,1); //T1的比较输出端口设置为输出
Timer1_Init();

while(1)
{
delay_ms(5);//延时一定时间改变一次比较值
ocr += ddr_flag;

OCR1A = (unsigned int)ocr;

/*改变比较值的增长方向*/
if(ocr>0xFE)
ddr_flag = -1;
else if(ocr<0x1)
ddr_flag = 1;
}
}

温馨提示:答案为网友推荐,仅供参考
相似回答