做了个万年历 , 闹钟响的时候要呼吸灯,计时一个中断,呼吸灯一个中断。
但时当计时的中断执行时呼吸灯就不会出现呼吸的效果了要怎么办。
下面是我认为的有关部分函数:
TMOD=0x21; //用timer1产生PWM波 , timer0负责时钟的计数
TH0=(65536-46082)/256;
TL0=(65536-46082)%256;
EA=1;
ET0=1;
TR0=1;
TH1 = 0xf4;//246 产生50KHz的方波 11.0592hz 10.85us一次中断 256- 244 = 12US
TL1 = 0xf4;
ET1 = 1;
TR1 = 1;
void time0() interrupt 1//定时器0设置为模式1,50毫秒的定时
{
TH0=(65536-46082)/256; // 46082 * 1.085 = 50000US = 50ms
TL0=(65536-46082)%256;
count++;//时钟
}
void Timing()//定时启动 错误一定要用到中断函数 为什么陷入循环跳不出来,中断程序不执行
{
if(shi==s&&fen==f)
{
//beep = 0;
//主要由此模块控制占空比
if(pwmi < pwmj)
{
LED1 = 1; //灯灭
}
else
{
LED1 = 0; //灯亮
}
}
else LED1 = 1;
}
void Timer1() interrupt 3 //闹钟中断程序 时钟走时呼吸灯中断被影响
{
pwmi++;
if(pwmi == 255) //i的最大值255用来控制呼吸灯呼吸一次的时间长短
{
pwmi = 0;
if(flag)//flag用来判断呼吸灯由亮变暗(flag等于1)
{
pwmj++;
if(pwmj == 250) //此处j的值用来调节呼吸灯最暗时的程度,值越大,暗的程度越大
{
flag = 0;
}
}
else //还是由暗变亮(flag等于0)
{
pwmj--;
if(pwmj == 50)//此处j的值用来调节呼吸灯最亮时的程度,值越小,亮度越大
{
flag = 1;
}
}
}
}
但时当计时的中断执行时呼吸灯就不会出现呼吸的效果了要怎么办。
下面是我认为的有关部分函数:
TMOD=0x21; //用timer1产生PWM波 , timer0负责时钟的计数
TH0=(65536-46082)/256;
TL0=(65536-46082)%256;
EA=1;
ET0=1;
TR0=1;
TH1 = 0xf4;//246 产生50KHz的方波 11.0592hz 10.85us一次中断 256- 244 = 12US
TL1 = 0xf4;
ET1 = 1;
TR1 = 1;
void time0() interrupt 1//定时器0设置为模式1,50毫秒的定时
{
TH0=(65536-46082)/256; // 46082 * 1.085 = 50000US = 50ms
TL0=(65536-46082)%256;
count++;//时钟
}
void Timing()//定时启动 错误一定要用到中断函数 为什么陷入循环跳不出来,中断程序不执行
{
if(shi==s&&fen==f)
{
//beep = 0;
//主要由此模块控制占空比
if(pwmi < pwmj)
{
LED1 = 1; //灯灭
}
else
{
LED1 = 0; //灯亮
}
}
else LED1 = 1;
}
void Timer1() interrupt 3 //闹钟中断程序 时钟走时呼吸灯中断被影响
{
pwmi++;
if(pwmi == 255) //i的最大值255用来控制呼吸灯呼吸一次的时间长短
{
pwmi = 0;
if(flag)//flag用来判断呼吸灯由亮变暗(flag等于1)
{
pwmj++;
if(pwmj == 250) //此处j的值用来调节呼吸灯最暗时的程度,值越大,暗的程度越大
{
flag = 0;
}
}
else //还是由暗变亮(flag等于0)
{
pwmj--;
if(pwmj == 50)//此处j的值用来调节呼吸灯最亮时的程度,值越小,亮度越大
{
flag = 1;
}
}
}
}