突然想到的一个问题,但尝试了许久,没有得出一个结论。想来问问大神的做法,借以参考。
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit PWM=P2^0;// P2.0输出pwm
uchar flag;//用于标识亮度增大/减小
uchar v;//亮度值满值255
uchar flag2;//一秒标识
uchar count;//用于一秒计数
void main()
{
flag=1;
flag2=0;
count=0;
v=0;
TMOD=0x01;//定时器0工作方式1
TH0=0xf8;//赋初值定时
TL0=0x2f;//6MHz主频下4ms
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1)
{
light(v);
if(flag2){//串口发送亮度
flag2=0;
send_byte(v);
}
}
}
void light(uint l)
{
PWM=1;
delayus(l);
PWM=0;
delayus(1000-l);
}
void delayus(uint x)
{
while(x--);
}
void tim0() interrupt 1
{
TR0=0;//赋初值时,关闭定时器
TH0=0xf8;//赋初值定时
TL0=0x2f;
TR0=1;//打开定时器
if(flag){//每ms更改v值
v++;
}
else{
v--;
}
if(v>254){
flag=0;
}
if(v<1){
flag=1;
}
count++;
if(count==250){//一秒计数
count=0;
flag2=1;
}
}
void send_byte(uchar by){
SBUF = by;
while(!TI);//等待发送完毕
TI = 0;
}
额(=_=),今天要交了对吧。
就26号
哈哈哈哈哈哈哈
我用这个程序结果是闪烁而不是呼吸灯