返回信息流/***************************************************
*PWM控制LED灯渐亮渐灭程序 控制LED模块;
*晶振为11.0592MHZ;利用定时器产生占空比可变的PWM波
*K1键 PWM 增加 占空比减小 渐暗 ,
*K2键 PWM 减少 占空比增加 渐亮 ;
*当增加或者减少到最大或者最小值的时候,蜂鸣器开始报警
****************************************************/
#include<reg52.h>
#include<intrins.h>
sbit K1=P3^2; //PWM增加键
sbit K2=P3^3; //PWM减少键
sbit BEEP=P0^0; //蜂鸣器
unsigned char PWM=0X7F; //赋初值
void Beep(); //函数声明
void delayms(unsigned char ms);
void delay(unsigned char t);
/****************************************************/
void main()
{
P1=0XFF; //P1口锁存器,
TMOD=0X21; //定时器/计数器方式控制寄存器
TH0=0XFC; //1ms时延常数,定时器计数器0(高字节)控制寄存器
TL0=0X66; //频率调节
TH1=PWM; //脉宽调节
TL1=0;
EA=1; //
ET0=1;
ET1=1;
TR0=1;
while(1)
{
do{
if(PWM!=0XFF)
{PWM++;delayms(10);}
else Beep();
}while(K1==0);
do{if(PWM!=0X21)
{PWM--;delayms(10);}
else Beep();
}while(K2==0);
}
}
/****************************************************
//定时器0中断服务程序
*******************************************************/
void timer0()
{
TR1=0;
TH0=0XFC;
TL0=0X66;
TH1=PWM;
TR1=1;
P1=0X00; //启动输出
}
/****************************************************
//定时器1中断服务程序
****************************************************/
void timer1()
{
TR1=0;
P1=0XFF; //结束输出
}
//蜂鸣器子程序
void Beep()
{
unsigned char i;
for(i=0;i<100;i++)
{
delay();
BEEP=!BEEP; //beep取反
}
BEEP=1; // 关闭蜂鸣器
delayms(100);
}
//延时子程序
void delayms(unsigned char t)
{
while(t--);
}
//延时子程序
void delay(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i=0;1<120;i++);
}
}
/************************************************************/
前辈们
这个main()函数内 while循环之前的东西是干什么的?每一句代表什么意思?
还有 定时器 的程序为什么是这样写的 ?每一句代表什么?
Beep()函数内的 BEEP取反是为了什么?
我觉得我还没有以单片机工作的思维方式去思考
谢谢啊 问题有点多
但是如果不问的话 问题还会更多。。
再次谢谢各位啦?!!!!!!!!!!!!!!!!!!谢谢
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #11828同步于 2012/3/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
【求助】单片机呼吸灯程序问题
W1039766642
2012/3/3镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
你最好去找本讲原理的书看看吧,里面会讲会清楚的。while循环之前是为中断进行设置,比如要哪种中断,中断时间等。使用不同的定时器写法有点区别,书上有写很清楚的。Beep()函数可知你使用的发声器(具体叫什么我也不记得了,相当于喇叭)是要求给脉冲才工作,所以要取反。我以前用的是给高电平就响,那就不用取反了。感觉你对中断那好像没看过还是没看懂,你再好好看书吧,多看几遍,在多练习就好了。