51单片机自动控制升旗系统Word文档下载推荐.docx
《51单片机自动控制升旗系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《51单片机自动控制升旗系统Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
8,0x08,0,0x04,5,0x04,
8,0x0c,8,0x04,
8,0x06,8,0x02,5,0x04,6,0x02,7,0x02,
8,0x08,8,0x08,
0,0x04,10,0x04,8,0x04,9,0x02,10,0x02,
//10,0x04,10,0x04,8,0x04,9,0x02,10,0x02,
12,0x08,12,0x08,
10,0x06,10,0x02,8,0x06,10,0x02,
12,0x06,10,0x02,9,0x08,
//12,0x10,
9,0x10,
13,0x08,12,0x08,
9,0x08,10,0x08,
12,0x04,10,0x04,0,0x04,12,0x04,
//12,0x04,10,0x04,10,0x04,12,0x04,
10,0x04,9,0x02,10,0x02,8,0x08,
10,0x08,0,0x08,
//10,0x08,10,0x08,
5,0x06,6,0x04,8,0x04,8,0x04,
10,0x06,10,0x02,12,0x04,12,0x04,
9,0x04,9,0x02,9,0x02,6,0x08,
9,0x0c,5,0x04,
10,0x0c,10,0x04,
12,0x10,
8,0x06,10,0x02,12,0x04,12,0x04,
10,0x06,8,0x02,12,0x08,
10,0x04,0,0x04,8,0x04,0,0x04,
//10,0x04,10,0x04,8,0x04,8,0x04,
5,0x08,8,0x08,
8,0x08,0,0x08,
//8,0x08,
0xff,0xff,
ucharspeed_count=2;
ucharflag=0;
bittimer_flag=0;
bitMOTOR_FFW_FLAG=0;
bitMOTOR_REV_FLAG=0;
sbitK1=P3^0;
//正转
sbitK2=P3^1;
//反转
sbitK5=P3^4;
//停止
sbitled1=P2^0;
sbitled2=P2^1;
sbitled3=P2^2;
sbitled4=P2^3;
sbitled5=P2^4;
sbitled6=P2^5;
sbitbeep=P3^7;
voidsmg_display();
voidK1_stop_state();
voidK2_stop_state();
voidK5_stop_state();
voidmusic();
ucharnum1=0,num2=0,num3=0;
uintcnt=0,Time=0,Length=0;
uchara=0;
uchartl0,th0;
voiddelay(unsignedchart)//-----延时函数----------//
{
unsignedchart1;
unsignedlongt2;
for(t1=0;
t1<
t;
t1++)
for(t2=0;
t2<
770;
t2++);
TR0=0;
}
voiddelayms(unsignedintx)
{
unsignedinta,b;
for(a=x;
a>
0;
a--)
for(b=124;
b>
b--);
}
voidDTIME(intn)//延时程序
uchari;
for(i=0;
i<
50*n;
i++)
;
voidtimer0()interrupt1
beep=~beep;
TL0=tl0;
TH0=th0;
TR0=1;
voidtimer1_init()
//定时器初始化
TH1=(65536-8000)/256;
TL1=(65536-8000)%256;
ET1=0;
/*voidtimer0(void)interrupt1
TH0=th[speed_count];
TL0=tl[speed_count];
timer_flag=1;
voidup(void)interrupt0//加速
speed_count++;
if(speed_count>
2)speed_count=2;
voiddown(void)interrupt2//减速
speed_count--;
if(speed_count<
0)speed_count=0;
}*/
voidT1_time()interrupt3//定时器函数
TH1=(65536-8000)/256;
TL1=(65536-8000)%256;
num1++;
num2++;
num3++;
smg_display();
voidSETP_MOTOR_FFW()//电机正转
uchari;
P1=FFW[i];
DTIME(5);
i++;
if(i==8)i=0;
voidSETP_MOTOR_REV()//电机反转
P1=REV[i];
i++;
voidmain()
ucharN=10;
TMOD=0x11;
ET0=1;
EX0=1;
IT0=1;
//外部中断0
EX1=1;
IT1=1;
//外部中断1
EA=1;
timer1_init();
while
(1)
if(K1==0)
{
if(MOTOR_FFW_FLAG==0)
{
flag=1;
TR1=1;
smg_display();
music();
}
}
elseif(K2==0)
{
if(MOTOR_REV_FLAG==0)
flag=2;
elseif(K5==0)
P0=0xfb;
P1=0x03;
voidsmg_display()
{
switch(++cnt%6)
case0:
P2|=0xff;
led1=0;
P0=SZ[Time/10];
break;
case1:
led2=0;
P0=SZ[Time%10];
/*case2:
led3=0;
P0=SZ[Time%100%10];
*/
case3:
led4=0;
P0=SZ[Length/100];
case4:
led5=0;
P0=SZ[Length/10%10];
case5:
led6=0;
P0=SZ[Length%100%10];
DTIME
(1);
if(cnt>
500)
cnt=0;
if(flag!
=1&
&
flag!
=2)
Time=0;
}
if(flag==1)
if(K5==0)
{
K5_stop_state();
}
ET1=1;
if(num3==5)
num3=0;
SETP_MOTOR_FFW();
}
if(num1==100)
num1=0;
Time++;
if(Time==43)
{
a=Length;
MOTOR_FFW_FLAG=1;
MOTOR_REV_FLAG=0;
K1_stop_state();
}
if(num2==24)
num2=0;
Length++;
if(flag==2)
SETP_MOTOR_REV();
Time--;
if(Time==0)
a++;
MOTOR_FFW_FLAG=0;
MOTOR_REV_FLAG=1;
K2_stop_state();
Length--;
}
voidK1_stop_state()
DTIME
(2);
P2|=0xff;
P0=SZ[a/100];
P0=SZ[a/10%10];
P0=SZ[a%100%10];
if(K2==0){flag=2;
break;
voidK2_stop_state()
if(K1==0){flag=1;
voidK5_stop_state()
P2|=0xff;
led1=0;
P0=SZ[0];
while
(1);
voidmusic()
unsignedchark;
ET0=1;
if(yyjjxq[k]==0xff)
beep=1;
TR0=0;
delayms(50);
else
if(yyjjxq[k]==0x00)
delay(yyjjxq[k+1]);
k+=2;
else
{
th0=FreqTab[yyjjxq[k]]/256;
tl0=FreqTab[yyjjxq[k]]%256;
TR0=1;
delay(yyjjxq[k+1]);
}
}
电路原理图如下所示: