单片机遥控音乐灯闪烁等功能程序(共17页)_第1页
单片机遥控音乐灯闪烁等功能程序(共17页)_第2页
单片机遥控音乐灯闪烁等功能程序(共17页)_第3页
单片机遥控音乐灯闪烁等功能程序(共17页)_第4页
单片机遥控音乐灯闪烁等功能程序(共17页)_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include /包含(bohn)51单片机相关的头文件#define uint unsigned int /重定义无符号(fho)整数类型#define uchar unsigned char /重定义无符号(fho)字符类型uchar code LedShowData=0 x03,0 x9F,0 x25,0 x0D,0 x99, /定义数码管显示数据 0 x49,0 x41,0 x1F,0 x01,0 x19;/0,1,2,3,4,5,6,7,8,9uchar code RecvData=0 x07,0 x0A,0 x1B,0 x1F,0 x0C,0 x0D,0 x0E,0 x00,0

2、x0F,0 x19;uchar IRCOM7; /接收数据缓冲区static unsigned int LedFlash; /定义闪动频率计数变量unsigned char RunFlag=0; /定义运行标志位/*完成基本数据变量定义*/ sbit LeftLed=P20; /定义前方左侧指示灯端口sbit RightLed=P07;sbit Led=P10; /定义前方右侧指示灯端口 sbit M1A=P00; /定义电机1正向端口sbit M1B=P01; /定义电机1反向端口sbit M2A=P02; /定义电机2正向端口sbit M2B=P03;sbit MUSIC=P06;sbit

3、 IRIN=P33;sbit LED1=P11;sbit LED2=P12;sbit LED3=P13;sbit LED4=P14;sbit LED5=P15;sbit LED6=P16;sbit LED7=P17;sbit LeftIR1=P31; /定义前方左侧红外探头端口sbit RightIR1=P34; /定义前方右侧红外探头端口sbit FontIR1=P30;#define LED P1 /定义电机2反向端口/*完成电机端口定义*/ typedef structunsigned char h;unsigned char l;FREQ_T;typedef structFREQ_T

4、* freq;unsigned char time;NOTE_T;#defineTIME_1_321#defineTIME_1_162#defineTIME_1_84#defineTIME_1_48#defineTIME_1_216#defineTIME_1_132extern void initialize_music(void);extern FREQ_T * s; void initialize_music(void); code FREQ_T LDO = 0 xf2,0 x4b; code FREQ_T LDOR= 0 xf3,0 x09; code FREQ_T LRE = 0 xf

5、3,0 xca; code FREQ_T LRER= 0 xf4,0 x75; code FREQ_T LMI = 0 xf5,0 x20; code FREQ_T LFA = 0 xf5,0 xb8; code FREQ_T LFAR= 0 xf6,0 x4e; code FREQ_T LSO = 0 xf6,0 xd9; code FREQ_T LSOR= 0 xf7,0 x5c; code FREQ_T LLA = 0 xf7,0 xda; code FREQ_T LLAR= 0 xf8,0 x4f; code FREQ_T LSI = 0 xf8,0 xbf; code FREQ_T

6、DO = 0 xf9,0 x26; code FREQ_T DOR= 0 xf9,0 x89; code FREQ_T RE = 0 xf9,0 xce; code FREQ_T RER= 0 xfa,0 x3f; code FREQ_T MI = 0 xfa,0 x92; code FREQ_T FA = 0 xfa,0 xe0; code FREQ_T FAR= 0 xfb,0 x2b; code FREQ_T SO = 0 xfb,0 x71; code FREQ_T SOR= 0 xfb,0 xb3; code FREQ_T LA = 0 xfb,0 xf1; code FREQ_T

7、LAR= 0 xfc,0 x2c; code FREQ_T SI = 0 xfc,0 x64; code FREQ_T HDO = 0 xfc,0 x97; code FREQ_T HDOR= 0 xfc,0 xc9; code FREQ_T HRE = 0 xfc,0 xf8; code FREQ_T HRER= 0 xfd,0 x24; code FREQ_T HMI = 0 xfd,0 x4d; code FREQ_T HFA = 0 xfd,0 x75; code FREQ_T HFAR= 0 xfd,0 x9a; code FREQ_T HSO = 0 xfd,0 xbd; code

8、 FREQ_T HSOR= 0 xfd,0 xde; code FREQ_T HLA = 0 xfd,0 xfd; code FREQ_T HLAR= 0 xfe,0 x1a; code FREQ_T HSI = 0 xfe,0 x36; code FREQ_T PAUSE=0,0; FREQ_T freq; code NOTE_T alice= &HMI,TIME_1_16, &HRER,TIME_1_16, &HMI,TIME_1_16, &HRER,TIME_1_16, &HMI,TIME_1_16, &SI,TIME_1_16, &HRE,TIME_1_16, &HDO,TIME_1_

9、16, &LA,TIME_1_8, &PAUSE,TIME_1_16, &DO,TIME_1_16, &MI,TIME_1_16, &LA,TIME_1_16, &SI,TIME_1_8, &PAUSE,TIME_1_16, &MI,TIME_1_16, &SOR,TIME_1_16, &SI,TIME_1_16, &HDO,TIME_1_8, &PAUSE,TIME_1_16, &MI,TIME_1_16, &HMI,TIME_1_16, &HRER,TIME_1_16, &HMI,TIME_1_16, &HRER,TIME_1_16, &HMI,TIME_1_16, &SI,TIME_1_

10、16, &HRE,TIME_1_16, &HDO,TIME_1_16, &LA,TIME_1_8, &PAUSE,TIME_1_16, &DO,TIME_1_16, &MI,TIME_1_16, &LA,TIME_1_16, &SI,TIME_1_8, &PAUSE,TIME_1_16, &MI,TIME_1_16, &HDO,TIME_1_16, &SI,TIME_1_16, &LA,TIME_1_8, &PAUSE,TIME_1_16, &SI,TIME_1_16, &HDO,TIME_1_16, &HRE,TIME_1_16, &HMI,TIME_1_16, &HMI,TIME_1_8,

11、 &SO,TIME_1_16, &HFA,TIME_1_16, &HMI,TIME_1_16, &HRE,TIME_1_16, &HRE,TIME_1_8, &FA,TIME_1_16, &HMI,TIME_1_16, &HRE,TIME_1_16, &HDO,TIME_1_16, &HDO,TIME_1_8, &MI,TIME_1_16, &HRE,TIME_1_16, &HDO,TIME_1_16, &SI,TIME_1_16, &SI,TIME_1_8, &MI,TIME_1_16, &HMI,TIME_1_16, &MI,TIME_1_16, &HMI,TIME_1_16, &MI,T

12、IME_1_16, &HMI,TIME_1_16, &HRER,TIME_1_16, &HMI,TIME_1_16, &HRER,TIME_1_16, &HMI,TIME_1_16, &HRER,TIME_1_16, &HMI,TIME_1_16, &HRER,TIME_1_16,; /定义(dngy)红外接收端口/*完成(wn chng)红外接收端口的定义*/#define ShowPort P2 /定义(dngy)数码管显示端口extern void ControlCar(uchar CarType); /声明小车控制子程序void interrupt_timer1(void) inter

13、rupt 3 static unsigned char count=0; static unsigned char countb=0; static unsigned char i=0; unsigned char k; TH1=0X70;/20msTL1=0X00;count+;if(count=5) count=0;countb+;if(countb=alicei.time)countb=0;k=i+1;if(k = sizeof(alice)/sizeof(NOTE_T)k=0;freq.h=alicek.freq-h;freq.l=alicek.freq-l;i+;if(i=(size

14、of(alice)/sizeof(NOTE_T)i=0; void interrupt_timer0(void) interrupt 1TH0=freq.h;/60HzTL0=freq.l;if(freq.h | freq.l)MUSIC=!MUSIC; void initialize_music(void) TMOD|=0X01; /T0 16bit MODE; TMOD|=0X10; freq.h=alice0.freq-h; freq.l=alice0.freq-l; TH0=freq.h; TL0=freq.l; TF0=0; TR0=1; /start timer0 ET0=1; /

15、Timer0 interrupt enable TF1=0; TR1=1; ET1=1; EA=1; /interrupt enable void delay(unsigned char x) /0.14mS延时程序(chngx) unsigned char i; /定义(dngy)临时变量 while(x-) /延时时间(shjin)循环 for (i = 0; i13; i+) /14mS延时 void Delay() /定义(dngy)延时子程序 uint DelayTime=30000; /定义(dngy)延时时间变量 while(DelayTime-); /开始进行延时循环 retu

16、rn; /子程序返回void Delay1()unsigned int DelayTime=50000; /定义可变延时函数while(DelayTime-); /定义前方左侧指示灯端口 void Delay6(unsigned int DelayTime) while(DelayTime-); void Delay2()unsigned int DelayTime=2000; /定义可变延时函数 while(DelayTime-);Led= Led; if(ShowPort=LedShowData3) RightLed=1;LeftLed=LeftLed; if(ShowPort=LedSh

17、owData4) LeftLed=1;RightLed=RightLed; /定义前方左侧指示灯端口 return ; /延时函数进入倒计时void Delay5() /定义机器人调转子时间子程序 unsigned int DelayTime=20000; /定义机器人转弯时间变量 while(DelayTime-); /机器人转弯循环 MUSIC=!MUSIC; /蜂鸣器闪响 return;void Delay7()unsigned int DelayTime=2000; /定义可变延时函数 while(DelayTime-);LED1= LED1 ; if(ShowPort=LedShow

18、Data3) RightLed=1;LeftLed=LeftLed; if(ShowPort=LedShowData4) LeftLed=1; RightLed=RightLed; /定义前方(qinfng)左侧指示灯端口 return ; /延时函数(hnsh)进入倒计时void Delay8()unsigned int DelayTime=2000; /定义(dngy)可变延时函数 while(DelayTime-);LED2= LED2; if(ShowPort=LedShowData3) RightLed=1;LeftLed=LeftLed; if(ShowPort=LedShowDa

19、ta4) LeftLed=1; RightLed=RightLed; /定义前方左侧指示灯端口 return ; /延时函数进入倒计时void Delay9()unsigned int DelayTime=2000; /定义可变延时函数 while(DelayTime-);LED3= LED3; if(ShowPort=LedShowData3) RightLed=1;LeftLed=LeftLed; if(ShowPort=LedShowData4) LeftLed=1; RightLed=RightLed; /定义前方左侧指示灯端口 return ; /延时函数进入倒计时void Dela

20、y10()unsigned int DelayTime=2000; /定义可变延时函数 while(DelayTime-);LED4= LED4 ; if(ShowPort=LedShowData3) RightLed=1;LeftLed=LeftLed; if(ShowPort=LedShowData4) LeftLed=1; RightLed=RightLed; /定义前方左侧指示灯端口 return ; /延时函数进入倒计时 void Delay11()unsigned int DelayTime=2000; /定义可变延时函数 while(DelayTime-);LED5= LED5

21、; if(ShowPort=LedShowData3) RightLed=1;LeftLed=LeftLed; if(ShowPort=LedShowData4) LeftLed=1; RightLed=RightLed; /定义前方(qinfng)左侧指示灯端口 return ; /延时函数(hnsh)进入倒计时void Delay12()unsigned int DelayTime=2000; /定义(dngy)可变延时函数 while(DelayTime-);LED6= LED6 ; if(ShowPort=LedShowData3) RightLed=1;LeftLed=LeftLed

22、; if(ShowPort=LedShowData4) LeftLed=1;RightLed=RightLed; /定义前方左侧指示灯端口 return ; /延时函数进入倒计时void Delay13()unsigned int DelayTime=2000; /定义可变延时函数 while(DelayTime-);LED7= LED7 ; if(ShowPort=LedShowData3)RightLed=1;LeftLed=LeftLed; if(ShowPort=LedShowData4) LeftLed=1;RightLed=RightLed; /定义前方左侧指示灯端口 return

23、 ; /延时函数进入倒计时void pao() Delay2(); Delay2(); Led=1; Delay7(); Delay7(); LED1=1; Delay8(); Delay8(); LED2=1; Delay9(); Delay9(); LED3=1; Delay10(); Delay10(); LED4=1; Delay11(); Delay11(); LED5=1; Delay12(); Delay12(); LED6=1; Delay13(); Delay13(); LED7=1;void Flash1() unsigned int CountData=0; while(

24、1) if(CountData90) Delay6(5000); else if(CountData100) CountData=0; CountData=CountData+1; LeftLed=1; Led=Led; LED1= LED1 ; LED2= LED2 ; LED3= LED3 ; LED4= LED4 ; LED5= LED5 ; LED6= LED6 ; LED7= LED7 ; RightLed=RightLed; if(IRIN=0) break; void Flash2() unsigned int CountData=0; while(1) if(CountData

25、90) Delay6(5000); else if(CountData100) CountData=0; CountData=CountData+1; Led=Led; LED1= LED1 ; LED2= LED2 ; LED3= LED3 ; LED4= LED4 ; LED5= LED5 ; LED6= LED6 ; LED7= LED7 ; LeftLed=LeftLed; RightLed=1; if(IRIN=0) break; void bzang() LeftLed=LeftIR1; /前方左侧指示(zhsh)灯指示出前方左侧红外探头 RightLed=RightIR1; M1

26、A=1; /避障子(zhng zi)程序 while(1) if(FontIR1=1&LeftIR1=0& RightIR1=1) ControlCar(4); Delay5(); Delay5(); ControlCar(1); MUSIC=1; else if(FontIR1=1&LeftIR1=1& RightIR1=0) ControlCar(3); Delay5();Delay5(); ControlCar(1); MUSIC=1; else if(FontIR1=1&LeftIR1=1& RightIR1=1) M1A=1; /将电机(dinj)1正向端口置高 M2A=1; Del

27、ay5(); MUSIC=1; else if(FontIR1=1&LeftIR1=0& RightIR1=0) ControlCar(1); Delay5(); MUSIC=1; else if(FontIR1=0& LeftIR1=0 & RightIR1=1) ControlCar(2); Delay5(); ControlCar(4); Delay5(); ControlCar(1); MUSIC=1; else if(FontIR1=0&LeftIR1=1& RightIR1=0) ControlCar(2); Delay5(); ControlCar(3); Delay5(); C

28、ontrolCar(1); MUSIC=1; else if(FontIR1=0&LeftIR1=0& RightIR1=0) ControlCar(2); Delay5(); Delay5(); ControlCar(5); MUSIC=1; else if(FontIR1=0 & LeftIR1=1& RightIR1=1) ControlCar(2); Delay5(); Delay5(); Delay5(); ControlCar(3); Delay5();Delay5();Delay5();Delay5();Delay5(); ControlCar(1);MUSIC=1;if(IRI

29、N=0) break; void ControlCar(uchar CarType) /定义(dngy)小车控制子程序 M1A=0; /将电机(dinj)1正向电平置低 M1B=0; /将电机(dinj)1反向电平置低 M2A=0; /将电机2正向电平置低 M2B=0; Delay(); /将电机2反向电平置低 switch(CarType) /判断小车控制指令类型 case 1: /前进 /判断是否是前进 M1A=1; /将电机1正向端口置高 M2A=1; LeftLed=0; /定义前方左侧指示灯端口 RightLed=0; ShowPort=LedShowData1; /数码管显示前进状

30、态 break; /退出判断 case 2: /后退(hutu) /判断是否是后退 M1B=1; /将电机(dinj)1反向端口置高 M2B=1; LeftLed=1; /定义前方(qinfng)左侧指示灯端口 RightLed=1; /将电机2反向端口置高 ShowPort=LedShowData2; /数码管显示后退状态 /将前方左侧指示灯置低(亮) break; /退出判断 case 3: /左转 /判断是否是左转 M1B=1; /将电机1反向端口置高 M2A=1; /将电机2正向端口置高 ShowPort=LedShowData3; /数码管显示左转状态 /将前方左侧指示灯置低(亮)

31、break; /退出判断 case 4: /右转 /判断是否是右转 M1A=1; /将电机1正向端口置高 M2B=1; /将电机2反向端口置高 ShowPort=LedShowData4; /数码管显示右转状态 /将前方右侧指示灯置低(亮) break; /退出判断 case 5: /停止 /判断是否是右转 M1A=0; /将电机1正向端口置高 M2B=0; M1B=0; /将电机1反向端口置高 M2A=0; /将电机2反向端口置高 ShowPort=LedShowData5; /数码管显示右转状态 /将前方右侧指示灯置低(亮) break; /退出判断 default: /默认情况下的判断

32、break; /直接退出判断 void IR_IN() interrupt 2 using 0 /定义INT2外部中断函数 unsigned char j,k,N=0; EX1 = 0; /关闭外部中断,防止再有信号到达 delay(15); /延时时间,进行红外消抖 if (IRIN=1) /判断红外信号是否消失 EX1 =1; /外部(wib)中断开return; /返回(fnhu) while (!IRIN) /等IR变为高电平,跳过9ms的前导(qindo)低电平信号。 delay(1); /延时等待 for (j=0;j4;j+) /采集红外遥控器数据 for (k=0;k=30)

33、/判断计数器累加值 EX1=1; /打开外部中断功能 return; /返回 IRCOMj=IRCOMj 1; /进行数据位移操作并自动补零 if (N=8) /判断数据长度 IRCOMj = IRCOMj | 0 x80; /数据最高位补1 N=0; /清零位数计录器 if (IRCOM2!=IRCOM3) /判断地址码是否相同 EX1=1; /打开外部中断 return; /返回 for(j=0;j10;j+) /循环进行(jnxng)键码解析 if(IRCOM2=RecvDataj) /进行(jnxng)键位对应 P2=LedShowDataj; /数码管显示相应(xingyng)数码

34、switch(IRCOM2) case 0 x1A: /全力前进 ControlCar(1); LeftLed=0; /定义前方左侧指示灯端口 RightLed=0; LED=0; /定义前方左侧指示灯端口 break; case 0 x05: /全力后退 ControlCar(2);LED=LED; break; case 0 x01: /全力左转 ControlCar(3);Flash2(); break; case 0 x03: /全力右转 ControlCar(4); Flash1() ; break; case 0 x12: /电源 ControlCar(5); LeftLed=1; /定义前方左侧指示灯端口 RightLed=1; /停止 break; case 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论