总问题:无法通过单片机设置蜂鸣器发声时长,蜂鸣器发声的时候LCD读秒暂停响完后跳到正常时间
具体问题:代码设定的数值不能实现目的,例如:设置的发声5000毫秒在执行的时候远小于5000毫秒
代码目的;单片机独立按键按下的时候切换蜂鸣器发声时长,到设定时间时蜂鸣器响同时LCD正常计时
注意:引用文件里的代码正常
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "Timer0.h"
#include "Key.h"
#include "Buzzer.h"
unsigned char Sec,Min,Hour;
unsigned char Keynumber,LCDmode,a,Buzzer_number,Buzzer_time;
void main()
{
LCD_Init();
Timer0_Init();
LCD_ShowString(1,1,"Clock:");
LCD_ShowString(2,3,":");
LCD_ShowString(2,6,":");
LCD_ShowString(1,9,"Buzzer:");
while(1)
{
LCD_ShowNum(2,1,Hour,2);
LCD_ShowNum(2,4,Min,2);
LCD_ShowNum(2,7,Sec,2);
LCD_ShowNum(2,11,Buzzer_number,2);
Keynumber=Key();
if (Keynumber!=0)
{
if(Keynumber==1)
LCDmode++;
if(LCDmode==1)
{
if(Keynumber==2)
Hour++;
if(Keynumber==3)
Hour--;
}
if(LCDmode==2)
{
if(Keynumber==2)
Min++;
if(Keynumber==3)
Min--;
}
if(LCDmode==3)
{
if(Keynumber==2)
Sec++;
if(Keynumber==3)
Sec--;
}
if(LCDmode==4)
{
if(Keynumber==2)
Buzzer_number=5;
Buzzer_time=5000;
if(Keynumber==3)
Buzzer_number=10;
Buzzer_time=10000;
if(Keynumber==4)
Buzzer_number=15;
Buzzer_time=15000;
}
if(LCDmode==5)
{if(Keynumber==4)
TR0=!TR0;
}
LCDmode%=5;
}
if(Hour==01&&Min==01&&Sec==10)
{
Buzzer_Time(Buzzer_time);
}
}
}
void Timer0_Routine() interrupt 1
{ static unsigned int T0count;
TL0 = 0x18;
TH0 = 0xFC;
T0count++;
if(T0count>=1000)
{
T0count=0;
Sec++;
if(Sec>=60)
{Sec=0;
Min++;
}
if(Min>=60)
{Min=0;
Hour++;
}
if(Hour>=24)
{Hour=0;
}
}
}