51单片机自动控制升旗系统.docx

上传人:b****6 文档编号:7126659 上传时间:2023-01-20 格式:DOCX 页数:14 大小:37.44KB
下载 相关 举报
51单片机自动控制升旗系统.docx_第1页
第1页 / 共14页
51单片机自动控制升旗系统.docx_第2页
第2页 / 共14页
51单片机自动控制升旗系统.docx_第3页
第3页 / 共14页
51单片机自动控制升旗系统.docx_第4页
第4页 / 共14页
51单片机自动控制升旗系统.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

51单片机自动控制升旗系统.docx

《51单片机自动控制升旗系统.docx》由会员分享,可在线阅读,更多相关《51单片机自动控制升旗系统.docx(14页珍藏版)》请在冰豆网上搜索。

51单片机自动控制升旗系统.docx

51单片机自动控制升旗系统

/**********************51单片机升旗系统***************************/

/**************步进电机升旗和降旗,蜂鸣器奏国歌,******************/

/***************数码管显示系统时间和高度***************************/

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharcodeFFW[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//正转的步码

ucharcodeREV[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//反转的步码

ucharth[]={0x0f,0x5d,0xab};//3个定时器值,高8位

uchartl[]={0xa0,0xc0,0xe0};//3个定时器值,低8位

codeucharSZ[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管

unsignedintcodeFreqTab1[]={

64216,64360,64489,64547,64654,64752,64837,

64876,64948,65012,65042,65095,65144,65186,

65206,65242,65274,65289,65135,65340,65361,

};

unsignedintcodeFreqTab[]={//简谱对应的简谱码、T值

65535,64260,64400,64524,64579,64685,64778,64860,

64898,64968,65030,65057,65110,65157,65198,

65217,65252,65283,65297,65323,65346,65367,

};

unsignedcharcodeyyjjxq[]={

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,

8,0x0c,8,0x04,

10,0x0c,10,0x04,

12,0x10,

8,0x06,10,0x02,12,0x04,12,0x04,

13,0x08,12,0x08,

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,

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,

5,0x08,8,0x08,

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;

uintt=0,Time=0,Length=0;

uchara=0;

uchartl0,th0;

voiddelay(unsignedchart)//-----延时函数----------//

{

unsignedchart1;

unsignedlongt2;

for(t1=0;t1

for(t2=0;t2<770;t2++);

TR0=0;

}

voiddelayms(unsignedintx)

{

unsignedinta,b;

for(a=x;a>0;a--)

for(b=124;b>0;b--);

}

voidDTIME(intn)//延时程序

{

uchari;

for(i=0;i<50*n;i++)

;

}

voidtimer0()interrupt1

{

TR0=0;

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()//电机反转

{

uchari;

P1=REV[i];DTIME(5);

i++;

if(i==8)i=0;

}

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;

TR1=1;

smg_display();

}

}

elseif(K5==0)

{

P0=0xfb;

P1=0x03;

}

}

}

voidsmg_display()

{

switch(++t%6)

{

case0:

P2|=0xff;

led1=0;

P0=SZ[Time/10];

break;

case1:

P2|=0xff;

led2=0;

P0=SZ[Time%10];

break;

/*case2:

P2|=0xff;

led3=0;

P0=SZ[Time%100%10];

break;*/

case3:

P2|=0xff;

led4=0;

P0=SZ[Length/100];

break;

case4:

P2|=0xff;

led5=0;

P0=SZ[Length/10%10];

break;

case5:

P2|=0xff;

led6=0;

P0=SZ[Length%100%10];

break;

}

DTIME

(1);

if(t>500)

t=0;

if(flag!

=1&&flag!

=2)

{

Time=0;

}

if(flag==1)

{

if(K5==0)

{

K5_stop_state();

}

ET1=1;

TR1=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)

{

if(num3==5)

{

num3=0;

SETP_MOTOR_REV();

}

if(num1==100)

{

num1=0;

Time--;

if(Time==0)

{

a=Length;

a++;

MOTOR_FFW_FLAG=0;

MOTOR_REV_FLAG=1;

K2_stop_state();

}

}

if(num2==24)

{

num2=0;

Length--;

}

}

}

voidK1_stop_state()

{

while

(1)

{

P2|=0xff;

led1=0;

P0=SZ[Time/10];

DTIME

(2);

P2|=0xff;

led2=0;

P0=SZ[Time%10];

DTIME

(2);

/*case2:

P2|=0xff;

led3=0;

P0=SZ[Time%100%10];

break;*/

P2|=0xff;

led4=0;

P0=SZ[a/100];

DTIME

(2);

P2|=0xff;

led5=0;

P0=SZ[a/10%10];

DTIME

(2);

P2|=0xff;

led6=0;

P0=SZ[a%100%10];

DTIME

(2);

if(K2==0){flag=2;break;}

}

}

voidK2_stop_state()

{

while

(1)

{

P2|=0xff;

led1=0;

P0=SZ[Time/10];

DTIME

(2);

P2|=0xff;

led2=0;

P0=SZ[Time%10];

DTIME

(2);

/*case2:

P2|=0xff;

led3=0;

P0=SZ[Time%100%10];

break;*/

P2|=0xff;

led4=0;

P0=SZ[a/100];

DTIME

(2);

P2|=0xff;

led5=0;

P0=SZ[a/10%10];

DTIME

(2);

P2|=0xff;

led6=0;

P0=SZ[a%100%10];

DTIME

(2);

if(K1==0){flag=1;break;}

}

}

voidK5_stop_state()

{

P2|=0xff;

led1=0;

P0=SZ[0];

while

(1);

}

voidmusic()

{

unsignedchark;

ET0=1;

while

(1)

{

if(yyjjxq[k]==0xff)

{

beep=1;

TR0=0;

delayms(50);

}

else

{

if(yyjjxq[k]==0x00)

{

TR0=0;

delay(yyjjxq[k+1]);

k+=2;

}

else

{

th0=FreqTab[yyjjxq[k]]/256;

tl0=FreqTab[yyjjxq[k]]%256;

TR0=1;

delay(yyjjxq[k+1]);

k+=2;

}

}

}

}

电路原理图如下所示:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1