您的位置 首页 汽车

MEGA8做的呼吸灯

利用mega8的PWM做了一款简单的双色呼吸灯,呼吸频率可以调节。由于程序中还有其他功能,只将呼吸灯部分程序整理如下。/*******************…

使用mega8的PWM做了一款简略的双色呼吸灯,呼吸频率能够调理。因为程序中还有其他功用,只将呼吸灯部分程序收拾如下。

/******************************************************************************
* 头文件设定
******************************************************************************/
#include
#include
#include “ADC.c”

#define ledkey (PIND & 0x08)

unsigned char KEY_Flag;
unsigned int i;

/******************************************************************************
* 函 数 名: Delay_nus(unsigned int n)
* 功用描绘: 延时函数
* 参 数: 延时参数:unsigned int n;
* 返 回 值: 无
* 备 注: …
******************************************************************************/
void Delay_nus(unsigned int n)
{
unsigned int a,b;

for (a = 0; afor (b = 0; b<8; b++);
}

/******************************************************************************
* 函 数 名: Delay_nms(unsigned int n)
* 功用描绘: 延时函数
* 参 数: 延时参数:unsigned int n;
* 返 回 值: 无
* 备 注: …
******************************************************************************/
void Delay_nms(unsigned int n)
{
unsigned int a,b;

for (a = 0; a{
Delay_nus(1000);
}
}

/******************************************************************************
* 函 数 名: KEY()
* 功用描绘: 按键函数
* 参 数: 无
* 返 回 值: 无
* 备 注: …
******************************************************************************/
void KEY(void)
{
if(ledkey == 0)//按键长按2s后发动
Delay_nus(5); //延时等候按键2S
if(ledkey == 0)//假如按键仍然按下,履行相应动作
{
KEY_Flag++;//按键标志位加1
if(KEY_Flag>3)//按键标志位只能为1或0
{
KEY_Flag=0;
}
while(ledkey == 0);//软件消抖
}
}

/******************************************************************************
* 函 数 名: delay()
* 功用描绘: 延时函数
* 参 数: 无
* 返 回 值: 无
* 备 注: …
******************************************************************************/
void delay(void)
{
unsigned char i,j;
for(i=5000;i–;i>1)
for(j=500;j–;j>1);
}

/******************************************************************************
* 函 数 名: main()
* 功用描绘: 主函数
* 参 数: 无
* 返 回 值: 无
* 备 注: …
******************************************************************************/
void main()
{
unsigned char a;
PORTB = 0XFF;
DDRD = 0XF0;
delay();

TCCR1A=0Xa2;
TCCR1B=0X1B;

ICR1 = 124;

OCR1B=1;
OCR1A=1;
while(1)
{
KEY();
a++;
OCR1A=a;
OCR1B=a;
delay();
if(a>122)
{
while(1)
{
KEY();
if(KEY_Flag == 0)
{
DDRB &=0XF2;
}
if(KEY_Flag == 1)
{
DDRB &=0XF4;
}
if(KEY_Flag == 2)
{
PORTD =0X10;
}
if(KEY_Flag == 3)
{
PORTD =0X00;
}
a–;
OCR1B=a;
OCR1A=a;
delay();
if(a==1)//最小值
{
break;//跳出while
}
}
}
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/272784.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部