⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sl3010_2.c

📁 单片机开发资料光盘-双龙-686M.zip
💻 C
📖 第 1 页 / 共 2 页
字号:
/*******************************************/
/*            广州天河双龙电子公司         */
/*            http://www.sl.com.cn         */
/*     020-85510191,87578852,87578872      */
/*              nikko@sl.com.cn            */
/*******************************************/

//pd3,pd2,pd1,pd0 短路块全部接上
//       按下遥控器<A>(保持 0.5s)        进入遥控机器人运行环境 
//       按下遥控器<B>(保持 0.5s)        进入悬崖车机器人运行环境 
//       按下遥控器<C>(保持 0.5s)        进入音乐车机器人运行环境 
//       按下遥控器<D>(保持 0.5s)        进入霓虹灯机器人运行环境 

//pd3,pd2,pd1,pd0 短路块没有全部接上
//       按下遥控器<A>(保持 0.5s)        机器人走四方形
//       按下遥控器<B>(保持 0.5s)        机器人走“8”字 
//       按下遥控器<C>(保持 0.5s)        寻迹机器人运行环境 
//       按下遥控器<D>(保持 0.5s)        追光机器人运行环境 

//将  sl3010.c 文件拷贝到 icc avr 安装目录的<include>文件夹
//sl3010.c 是sl3010机器人的子函数库
//程序中调用此文件后 #include <sl3010.c>
//可直接调用里面的函数和变量

#include <io8515v.h>
#include <macros.h>
#include <sl3010.c>
#include <eeprom.h>

static unsigned char led_data[]=
    {//设置LED广告灯数据表
     0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,
     0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,
     0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,
     0x00,0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,
     0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1,
     0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x8f,0xc7,0xe3,0xf1,
     0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,
     0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,
     0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,
     0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,
     0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,
     0x0a,0x0a
    };
unsigned char pa,timers;
unsigned int led_delayms=600;
	 //定义为字符型变量
void led_car(void)
{
 PORTA = 0x24;//0010,0100
 
 work_status = 0x40;//置对应的工作状态标志
 
 mic_startup();       //等待声控启动
 
 while (1)
 	{
	 pa = 0x00;
	 for(timers=0;timers<4;timers++)
	    {//8 LED 整体亮灭闪烁
	     PORTA=pa;
	     delay_ms(led_delayms*2);
		 pa=~pa;
		}
	 
	 pa = 0x01;
	 for(timers=0;timers<8;timers++)
	    {
	     PORTA=~pa;
	     delay_ms(led_delayms/2);
		 pa=pa<<1;
		}
		
	 pa = 0x80;
	 for(timers=0;timers<8;timers++)
	    {
	     PORTA=~pa;
	     delay_ms(led_delayms/2);
		 pa=pa>>1;
		}

	 pa = 0x01;
	 for(timers=0;timers<8;timers++)
	    {
	     PORTA=~pa;
	     delay_ms(led_delayms/2);
		 pa=pa|(pa<<1);
		}
	
	 pa = 0x7f;
	 for(timers=0;timers<8;timers++)
	    {
	     PORTA=~pa;
	     delay_ms(led_delayms/2);
		 pa=pa & (pa>>1);
		}
		
	 pa = 0x80;
	 for(timers=0;timers<8;timers++)
	    {
	     PORTA=~pa;
	     delay_ms(led_delayms/2);
		 pa=pa|(pa>>1);
		}

	 pa = 0xfe;
	 for(timers=0;timers<8;timers++)
	    {
	     PORTA=~pa;
	     delay_ms(led_delayms/2);
		 pa=pa & (pa<<1);
		}
		
	 pa = 0x03;
	 for(timers=0;timers<4;timers++)
	    {
	     PORTA=~pa;
	     delay_ms(led_delayms/2);
		 pa=pa<<2;
		}
		
	 pa = 0xc0;
	 for(timers=0;timers<4;timers++)
	    {
	     PORTA=~pa;
	     delay_ms(led_delayms/2);
		 pa=pa>>2;
		}
		
	 pa = 0x03;
	 for(timers=0;timers<4;timers++)
	    {
	     PORTA=~pa;
	     delay_ms(led_delayms/2);
		 pa=pa | (pa<<2);
		}

	 pa = 0x3f;
	 for(timers=0;timers<4;timers++)
	    {
	     PORTA=~pa;
	     delay_ms(led_delayms/2);
		 pa=pa & (pa>>2);
		}
		
	 pa = 0xc0;
	 for(timers=0;timers<4;timers++)
	    {
	     PORTA=~pa;
	     delay_ms(led_delayms/2);
		 pa=pa | (pa>>2);
		}
		
	 pa = 0xfc;
	 for(timers=0;timers<4;timers++)
	    {
	     PORTA=~pa;
	     delay_ms(led_delayms/2);
		 pa=pa & (pa<<2);
		}

     for(timers=0;;timers++)
	    {
		 pa = led_data[timers];
		 if(pa == 0x0a){break;}
		 PORTA = pa;
		 delay_ms(led_delayms/2);
		}
		
	 pa = 0x55;
	 for(timers=0;timers<16;timers++)
	    {//8 LED 流水灯
	     PORTA=pa;
	     delay_ms(led_delayms);
		 pa=~pa;
		}

     led_delayms = led_delayms - 200;
	 if(led_delayms == 200)
	   {
	    led_delayms = 800;
	   }
	}
}

/*******************************************/
/*              电子音乐演示程序           */
/*******************************************/
// 在 icc avr 所在目录的 <include>文件夹中有 "sl3010.c" 文件
//使用说明:音乐输出端口:PORTC.0,音乐数据存放
//于AT90S8515 的EEPROM存贮器中。
// 可以用并口下载软件写入新的音乐文件
//PA口为音乐灯,当不同的音乐节奏,点亮不同的灯。


/* 		  音乐数据  	  */
/* 四分之一拍为0x10, 二分之一拍为0x20, 一拍为0x40*/
/* 低1-1 2-2 3-3 4-4 5-5 6-6 7-7 */
/* 中1-8 2-9 3-A 4-B 5-C 6-D 7-E */
/* 高1-F*/								  	
#pragma data:eeprom
unsigned char sound[]={ 0x2a,0x2a,0x4a,0x2a,0x2a,0x4a,0x2a,0x2c,0x28,0x29,
	  		   			0x4a,0x4a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,
						0x2a,0x29,0x29,0x28,0x49,0x4c,0x2a,0x2a,0x4a,0x2a,
						0x2a,0x4a,0x2a,0x2c,0x28,0x29,0x4a,0x4a,0x2b,0x2b,
						0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2c,0x2c,0x2b,0x29,
						0x48,0x48,
						
						0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,0x46,0x46,
                        0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,0x4a,0x4a,
						0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,0x2a,0x28,
						0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,0x46,0x46,
						0x46,0x46,0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,
						0x46,0x46,0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,
						0x4a,0x4a,0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,
						0x2a,0x28,0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,
						0x46,0x46,0x46,0x46,0x00
						};
#pragma data:data							  		  						  
/*	  		    音阶表				*/	
const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,TI,DO_H,
			    	 	RE_H,MI_H,FA_H,SO_H,LA_H,TI_H,DO_HH};
/*			  音阶重装常数			*/						
unsigned int toneconst;								  							   						 				 	 	 

#pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
void timer1_ovf_isr(void)
	 {
	  TCNT1=toneconst;
	  PORTC^=1;
	 }	 	 

void music_car(void)
 	 {
	  unsigned char temp,temp1;
	  unsigned int sound_add=0;

 	  PORTA = 0x18; //0001,1000

	  work_status = 0x30;  //置对应的工作状态标志
	  
	  SEI();
	  
	  mic_startup();       //等待声控启动
	  
	  TCCR1A = 0x00;
	  TCCR1B =(1<<CS11);//8分频
	  temp1=EEPROMread((int)&sound[sound_add]);
	  while(temp1!=0)
 	  		{
			temp=temp1; 
			temp&=0x0f;
			  //PA口为音乐灯
			  if(temp==1 || temp==2 || temp==3 || temp==4){PORTA = 0xfe;}
              if(temp==5 || temp==6){PORTA = 0xfc;}
              if(temp==7 || temp==8 ){PORTA = 0xf8;}
              if(temp==9){PORTA = 0xf0;}
              if(temp==10){PORTA = 0xe0;}
              if(temp==11){PORTA = 0xc0;}
			  if(temp==12){PORTA = 0x80;}
              if(temp==13||temp==14 || temp==15){PORTA = 0x00;}

			if(temp!=0)
			  {
			   TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
			   temp--;			   
        	   toneconst=TONETABLE[temp];
			   TCNT1=toneconst;
 			  }
			temp=temp1;
			temp>>=4;
			temp&=0x0f;
			delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
			TIMSK&=~(1<<TOIE1);
			sound_add++;
			temp1=EEPROMread((int)&sound[sound_add]); 
			}
		delay_ms(1000);	                                         	
	 }	 	 	 	 
	  
//PORTD = 0xA0;//前行//1010 0000        //PORTA = 0xC3;//1100,0011
//PORTD = 0x90;//左转//1001 0000快速左转//PORTA = 0x33;//0011,0011
//PORTD = 0x80;//左转//1000 0000慢速左转//PORTA = 0xF3;//1111,0011
//PORTD = 0x60;//右转//0110 0000快速右转//PORTA = 0xCC;//1100,1100
//PORTD = 0x20;//右转//0010 0000慢速右转//PORTA = 0xCF;//1100,1111
//PORTD = 0x50;//后退//0101 0000        //PORTA = 0x3C;//0011,1100

//PC3声控启动
//  用PD7~PD4来作为电机驱动端

#define xuanya_delayms  300
 
unsigned char pa,pb,pc,pd;

void xuanya_car(void)
{
 PORTA = 0xa5;//1010,0101

 work_status = 0x20;//置对应的工作状态标志
 
 mic_startup();       //等待声控启动
 
 while(1)
   {//左(pc7)  中(pc6)  右(pc5)
    
	sw_touch();          //检测轻触开关
	
	pc = PINC & 0x10;
	if(pc == 0x00)
	  {//后退//左转
	   backward();//后退
	   delay_ms(xuanya_delayms);
	   turn_right();//左转
	   delay_ms(xuanya_delayms/2);
	  }
    pc = PINC & 0xE0;
    if(pc == 0x40)
	  {//后退//左转
	   backward();//后退
	   delay_ms(xuanya_delayms);
	   turn_right();//左转
	   delay_ms(xuanya_delayms/2);
	  }
	if(pc == 0x80)
	  {//后退//左转
	   backward();//后退
	   delay_ms(xuanya_delayms);
	   turn_right();//左转
	   delay_ms(xuanya_delayms/2);
	  }
	if(pc == 0x20)
	  {//后退//左转
	   backward();//后退
	   delay_ms(xuanya_delayms);
	   turn_right();//左转
	   delay_ms(xuanya_delayms/2);
	  }
	if(pc == 0xc0)
	  {//后退//左转
	   backward();//后退
	   delay_ms(xuanya_delayms);
	   turn_right();//左转
	   delay_ms(xuanya_delayms/2);
	  }
	if(pc == 0x60)
	  {//后退//左转
	   backward();//后退
	   delay_ms(xuanya_delayms);
	   turn_right();//左转
	   delay_ms(xuanya_delayms/2);
	  }
	if(pc == 0xE0)
	  {
       //刹车 //led灯为流水灯
       stop();
       PORTA = 0x3C;
       delay_ms(xuanya_delayms);
	   PORTA = 0xC3;
       delay_ms(xuanya_delayms);
	  } 
	else
	  {
	    forward();//前行
	  }
   }
}

void remote_car()
{//遥控车程序
 unsigned char remote_in;
 
 PORTA = 0x0f;
 
 work_status = 0x60;//置对应的工作状态标志
 
 mic_startup();//等待声控启动函数
 
 while(1)
     {
	  
	  sw_touch();//检测轻触开关
	  
	  remote_in = PINB & 0x0F;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -