STC12C5A60S2制作呼吸灯C语言程序怎么写 5
1个回答
展开全部
呼吸灯的程序:
/****************************************************************************
功能:LED灯慢慢变暗,再慢慢变亮。
用定时器模拟的PWM调制。
单片机:AT89S52
******************************************************************************/
#include <reg52.h>
#define V_TH0 0XFF //设定定时器0,高8位的初值
#define V_TL0 0XF6 //设定定时器0,低8位的初值
#define V_TMOD 0X01 //设定定时器0的工作方式为:方式1(计数位数是16位 //,由TL0作为低8位、TH0作为高8位)
#define uchar unsigned char
#define uint unsigned int
void init_sys(); //系统初始化函数
void delay(uint); //延时函数
unsigned char ZKB; //占空比
void main (void)
{
init_sys(); //初始化
while(1)
{
for(ZKB=5;ZKB<40;ZKB=ZKB+2) //每调节一次占空比,就延时大概8ms左右,这使得LED现象更明显
{
delay(8);
}
for(ZKB=40;ZKB>5;ZKB=ZKB-2)
{
delay(8);
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
void init_sys() /*系统初始化函数*/
{
/*定时器初始化*/
TMOD=V_TMOD;
TH0=V_TH0;
TL0=V_TL0;
TR0=1;
ET0=1;
EA=1;
}
void timer0(void) interrupt 1 using 2
{
static uchar click=0; //中断次数计数器变量
TH0=V_TH0; //重新恢复定时器初始值
TL0=V_TL0;
++click; //每计数10次,产生一个中断,并且click增加一个
if (click>=100)
click=0; //计满一百次,这重新计数。
/*因为计一次数的时间是1us,10次产生一个中断,也就是一个中断10us。100个中断为1ms。
则,可以在这100个数中随便取值,用于表示占空比的多少,占空比的范围为(1~100)*/
if (click<=ZKB) //当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整
P1=0x00; //P1口接的是LED灯
else
P1=0xff;
}
此程序的总中断时间为100ms,即频率为:100KHZ,占空比从5 变为40(即5%~25%)。
宿兴电子
2024-11-28 广告
2024-11-28 广告
联系我们一、有无震荡源 无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 二、价格不同 有源蜂鸣器往比无源蜂鸣器贵,就是因为里面多个震荡...
点击进入详情页
本回答由宿兴电子提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询