您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 51单片机自动控制升旗系统
/**********************51单片机升旗系统***************************//**************步进电机升旗和降旗,蜂鸣器奏国歌,******************//***************数码管显示系统时间和高度***************************/#includereg52.h#defineuintunsignedint#defineucharunsignedcharucharcodeFFW[]={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;uintcnt=0,Time=0,Length=0;uchara=0;uchartl0,th0;voiddelay(unsignedchart)//-----延时函数----------//{unsignedchart1;unsignedlongt2;for(t1=0;t1t;t1++)for(t2=0;t2770;t2++);TR0=0;}voiddelayms(unsignedintx){unsignedinta,b;for(a=x;a0;a--)for(b=124;b0;b--);}voidDTIME(intn)//延时程序{uchari;for(i=0;i50*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_count2)speed_count=2;}voiddown(void)interrupt2//减速{speed_count--;if(speed_count0)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;//外部中断0EX1=1;IT1=1;//外部中断1EA=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(++cnt%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(cnt500)cnt=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;}}}}电路原理图如下所示:
本文标题:51单片机自动控制升旗系统
链接地址:https://www.777doc.com/doc-5976349 .html