mega8做的呼吸灯-凯发旗舰

×
嵌入式 > 嵌入式开发 > 详情

mega8做的呼吸灯

发布时间:2024-03-14 发布时间:
|
利用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
}
}
}
}
}



『本文转载自网络,凯发旗舰的版权归原作者所有,如有侵权请联系删除』

热门文章 更多
74ls164功能及工作原理
网站地图