亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? zhudang0617.c

?? 自主移動機器人控制程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*------------------------------------------------
//阻擋機器人程序
//時間:2004年6月11日
//C口2/3/4/5為兩個主電機的控制
//PORTD 6/7是橫走電機控制,通過兩個繼電器實現PD6低電平是在左邊場地,
  PD7低電平在右邊場地
//PORTA 光電尋線,加上橫線數線
//PORTD 2/3 分別是數線和停止檢測

------------------------------------------------*/
/**************宏定義區****************************/
#include <iom16v.h>
#include <macros.h>
#include <eeprom.h>
/**************全局變量***************************/
//按鍵顯示
const char DISCODE[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
                       0x7c,0x39,0x5e,0x79,0x71,0x00,0x40,0x63,0x70,0x46};
unsigned char  Disp_Buff[]={0,0,0,0,};					  
unsigned char  disp_key_count =0;                       //LED掃描計數
char  key_num =0x0f;
char  old_key_num =0;
char  new_key_num =0;
char  key_buff[] ={0,0,0,0};      
int   key_down_time =0;
char  key_delay =0;
int   time_count_sys =0;                        //系統時間計數,1ms為單位
//delay time
unsigned int delay_time_count =0;

//motor
unsigned char pwm_count =0; 
unsigned char speed =0;
unsigned char  L_speed =0;
unsigned char  R_speed =0;
const unsigned char  SPEED_H[] ={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
const unsigned char  SPEED_M[] ={0,0,1,2,3,4,5,6,7,8, 9,10,11,12,13,14};
const unsigned char  SPEED_L[] ={0,0,0,0,0,0,0,1,2,3, 4, 5, 5, 6, 7, 8};
//follow_line
char follow_line_en =0;
//ADC
unsigned int temp =0;
unsigned char adc_channel =0;
unsigned int adc_value1_buff[] ={0,0,0,0,0,0,0,0,};
unsigned int adc_value2_buff[] ={0,0,0,0,0,0,0,0,};
unsigned int adc_value[] ={0,0,0,0,0,0,0,0,};
unsigned int adc_value_buff[] ={0,0,0,0,0,0,0,0,};

unsigned char adc_start_flag =0;
unsigned char adc_get_count =0;
unsigned char adc_value_flag =0;
//H line count
unsigned char line_H_cont =0;
unsigned char line_cont_juge =0;
unsigned char line_cont_en =0;
unsigned char line_H_en =0;
//V Line count
unsigned char V_Line_juge =0;
unsigned char Line_V =0;
unsigned char V_cont_en =0;//開啟橫線數線
unsigned char V_Line_en =0;
//stop juge
unsigned char stop_cont_juge =0;
unsigned char stop_cont =0;
unsigned char stop_juge_en =0;
unsigned char stop_en =0;
//過程變量
unsigned char prog_step =0;
unsigned char robot_go =0;
unsigned char DirectSelect =0;
unsigned char ModelSelect =0;
//中斷
#pragma  interrupt_handler timer0_ovf:10
//#pragma  interrupt_handler int0_ovf:2
/**************函數申明***************************/
/*  初始化  */
void init_devices(void);
void port_init(void);
//void init_ext(void);
void timer_init(void);
void adc_init(void);
//display & key
void send_data_disp(unsigned char send_data) ;
/*  過程控制函數  */
void followline(unsigned char go_speed,unsigned char direct);
void robot_stop(void);
void Line_Count(void);
void Stop_juge(void);
void Hand_A_open(void);
void Line_V_cont(void);
/*  比賽策略函數     */
void MODEL_A(void);
void MODEL_B(void);
void MODEL_B(void);
void MODEL_B(void);
/**************子函數區***************************/
//----------------------------------------
/*  初始化函數  */
void  port_init(void)
{
      DDRA  = 0x00;           
 	  PORTA = 0x00;           //光電管AD
 	  DDRB  = 0B11100000;
 	  PORTB = 0B00011111;
 	  DDRC  = 0B11111100;				   					 
 	  PORTC = 0B11111100;          //               
 	  DDRD  = 0B11110000;	        //PD5
 	  PORTD = 0B11111111;
}
void timer_init(void)
{	 	
      TCCR0 =3;		 //32分頻
	  TCNT0 =0x83;
      TIMSK =0x41;			   //open timer0  and timer2	中斷使能			   
}
void adc_init(void)
{
      ADMUX = 0;                  //ADC第0通道輸入
 	  ADCSRA = 0B10010001;//2分頻 //0b10010011;        //開ADC,并8分頻
}
void init_ext(void)
{
 	 GICR=0x00;	   			   	//INT0、INT1、INT2請求外中斷觸發 									
 	 MCUCR = 0b00001010;        //開中斷0、1,下降沿觸發脈沖
// 	 MCUCSR &= 0b10111111;		//外中斷2下降沿觸發
 	 GIFR=0Xff;	  	   			//中斷標志寄存器置1清零
 	 //GICR=0B11000000;          //開外中斷
}
void init_devices(void)

{
      CLI(); 		   	   		 //關中斷  
 	  port_init();				 //端口初始化
     // init_ext();				 //外中斷初始化
 	  adc_init();                 //adc init
	  timer_init();				 //定時器初始化
	  SEI();						 //開中斷
}
void disp_bit(char disCodeIndex,char bitChoose)     
{//按位顯示
      PORTB &= 0B11011111;//下拉RCK
   	  send_data_disp(bitChoose);//送位選
   	  send_data_disp(DISCODE[disCodeIndex]);//送段碼
   	  PORTB |= 0B00100000;//反向RCK
}
void send_data_disp(unsigned char send_data)       
{//向595送數據串
      unsigned char count;
   	  for(count =0;count<8;count++)
   	  {
            if(((send_data<<count)&0x80 )==0)
	     	      PORTB &=0B01111111;
      		else
	     	      PORTB |=0B10000000;
	  		PORTB |=0B01000000;//送時鐘SCK
      		PORTB &=0B10111111;
   	  }
}
void Disp_key_group(void)    
{ //顯示和鍵值獲取,使用時只需對Disp_Buff[] 刷新。
      disp_key_count++;
	  if(disp_key_count>3)    //4個LED的板子(disp_key_count>3)
	        disp_key_count =0;
	  disp_bit(Disp_Buff[disp_key_count],1 <<disp_key_count);
      if((PINB & 1) ==0)//有鍵按下
	        key_buff[disp_key_count] =1;
      else 
		    key_buff[disp_key_count] =0;
}
void Key_num(void)
{// 鍵值處理及去抖 
      if(key_buff[disp_key_count] ==1)
	        new_key_num =disp_key_count;
      else 
            new_key_num =0x0f;
  	  if((old_key_num ==0x0f) && (new_key_num !=0x0f) && (key_delay ==0))//判斷按鍵正按下
            key_num =new_key_num;
      else if ((old_key_num !=0x0f) && (new_key_num ==old_key_num))//判斷按鍵持續按下
      {
            key_num =0x0f ;//持續按鍵時不再給出鍵值,只給出空鍵值。   
	        key_down_time++;//記錄按鍵持續按下時間
      }//稍微修改一下可以得到比較完整的鍵盤返回碼
           else 
  		   {   
	 	         if((old_key_num !=0x0f) && (new_key_num ==0x0f))//按鍵釋放
     	       	 {  
           	   	       key_num =0x0f;
	       	   	       key_down_time =0;//按鍵時間變量清零
		   	   	 	   key_delay=50;//去抖動延時50ms
     	   	   	 }
  		   }
      old_key_num =new_key_num;
}
/* ADC */
Get_ADC_value(char channel)
{    //ADC讀入
      ADMUX =channel;
   	  ADCSRA |=0B01000000;
   	  while((ADCSRA &0B00010000) ==0);
   	  temp =ADC;
   	  ADCSRA |=0B00010000;
   	  return temp;
}
/*  ADC value Flag get :和與之閾值比較得到判斷標志    */
void ADC_valueFlag_get(void)
{
      char i;
	  for(i =0;i <8;i++)
  	  { 
  	        char tempa;
  	  		if(adc_value_buff[i] >=adc_value[i])
	  		{
	  		      tempa =(1<<i);
	  			  adc_value_flag |=tempa;
	  		}
  	  		else
	 		{
	 		      tempa =~(1<<i);
	 		      adc_value_flag &=tempa;
	 		}
      }
}  
/*  ms精確延時函數  */
void delay(unsigned int n)
{//延時
      delay_time_count =n;
	  while(delay_time_count >0);
}
//----------------------------------------------
/*   機器人行走  */
void ADC_base_get(void)
{//閾值采集
      char i;
	  Disp_Buff[2] =17;
	  Disp_Buff[3] =17;
	  for(i =0;i <8;i++)
	        Get_ADC_value(i);//處次采樣,防止ADC誤差
	  for(i =0;i <8;i++)
	  {
	       adc_value1_buff[i] =Get_ADC_value(i);//第一次采樣
	  }
	  while(prog_step ==1)
	  {
		   Disp_Buff[0] =adc_value1_buff[0]/64;
	       Disp_Buff[1] =1;
	  }
	  for(i =0;i <8;i++)
	  {
	        adc_value2_buff[i] =Get_ADC_value(i);//第二次采樣
   	  }
	  Disp_Buff[0]=adc_value2_buff[0]/64;//顯示第二次采樣值
	  Disp_Buff[1] =2;
	  for(i =0;i <8;i++)
	  {
	        adc_value[i] =(adc_value1_buff[i]+adc_value2_buff[i])/2;//計算中值
      }
	  EEPROMWriteBytes(0x0000,adc_value,16);     //閾值存入EEPROM中
	  delay(600);
	  prog_step =0;//跳回初始狀態
}
//follow line

void followline(unsigned char go_speed,unsigned char direct)
{   //尋線主函數
      if(direct ==1)
  	  {
            switch(adc_value_flag)
      		{
                  case 0b00011000://全部在白線上機器人直走
	     		  	   L_speed =SPEED_H[go_speed];
	     		 	   R_speed =SPEED_H[go_speed];
	     		  	   break;
	        	  case 0b00011100://稍微在白線的左邊,機器人向右微調
	     		  	   L_speed =SPEED_H[go_speed];
	     		 	   R_speed =SPEED_M[go_speed];  
	        	 	   break;
				  case 0b00001100://稍微在白線的左邊,機器人向右微調
	     		  	   L_speed =SPEED_H[go_speed];
	     		 	   R_speed =SPEED_M[go_speed];  
	        	 	   break;
				  case 0b00001110://稍微在白線的左邊,機器人向右調整
	     		  	   L_speed =SPEED_H[go_speed];
	     		 	   R_speed =SPEED_L[go_speed];  
	        	 	   break;
				  case 0b00000110://稍微在白線的左邊,機器人向右調整
	     		  	   L_speed =SPEED_H[go_speed];
	     		 	   R_speed =SPEED_L[go_speed];  
	        	 	   break;
				  case 0b00000111://稍微在白線的左邊,機器人向右調整
	     		  	   L_speed =SPEED_H[go_speed];
	     		 	   R_speed =SPEED_L[go_speed];  
	        	 	   break;
				  case 0b00000011://稍微在白線的左邊,機器人向右調整
	     		  	   L_speed =SPEED_H[go_speed];
	     		 	   R_speed =SPEED_L[go_speed];  
	        	 	   break;	   	   
				  case 0b00111000://稍微在白線的右邊,機器人向左微調
	     		  	   L_speed =SPEED_M[go_speed];
	     		 	   R_speed =SPEED_H[go_speed]; 
	     		 	   break; 
				  case 0b00110000://稍微在白線的右邊,機器人向左微調
	     		  	   L_speed =SPEED_M[go_speed];
	     		 	   R_speed =SPEED_H[go_speed]; 
	     		 	   break; 	        
                  case 0b01110000://在白線的右邊,機器人向左調整
	     		  	   L_speed =SPEED_L[go_speed];
	     		 	   R_speed =SPEED_H[go_speed];
	     		 	   break;
				  case 0b01100000://在白線的右邊,機器人向左調整
	     		  	   L_speed =SPEED_L[go_speed];
	     		 	   R_speed =SPEED_H[go_speed];
	     		 	   break;
			      case 0b11100000://在白線的右邊,機器人向左調整
	     		  	   L_speed =SPEED_L[go_speed];
	     		 	   R_speed =SPEED_H[go_speed];
	     		 	   break;
				  case 0b11000000://在白線的右邊,機器人向左調整
	     		  	   L_speed =SPEED_L[go_speed];
	     		 	   R_speed =SPEED_H[go_speed];
	     		 	   break;	   		   	   
	       		 default:
	   	 		 	   break;      
      		}
    }
}

void motor_PWM(void)
{
    if(pwm_count <L_speed)
	{
	   PORTC &=0b11111011;
	}
	else
	{
	   PORTC |=0b00000100;
	}
    if(pwm_count <R_speed)
	{
	   PORTC &=0b11101111;
	}
	else
	{
	   PORTC |=0b00010000;
	}
}
void ROBOT_GO(unsigned L_SPEED,unsigned R_SPEED)
{
    L_speed =L_SPEED;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美视频在线观看| 国产欧美日韩不卡免费| 欧洲国内综合视频| 成人久久久精品乱码一区二区三区 | 亚洲成人综合在线| 国产精品人成在线观看免费| xnxx国产精品| 制服丝袜中文字幕一区| 欧美亚洲高清一区| 欧美午夜一区二区三区免费大片| 北岛玲一区二区三区四区| 国产东北露脸精品视频| 捆绑紧缚一区二区三区视频| 日产欧产美韩系列久久99| 亚洲综合清纯丝袜自拍| 亚洲一区二区欧美| 视频精品一区二区| 久久99久久99精品免视看婷婷 | 精品一区二区三区影院在线午夜 | 一区二区三国产精华液| 亚洲欧美自拍偷拍| 国产精品日韩精品欧美在线| 久久久久一区二区三区四区| 3atv一区二区三区| 日韩精品一区二区三区三区免费 | 午夜视频一区在线观看| 欧美a级一区二区| 国产伦精一区二区三区| 懂色av一区二区在线播放| 成人福利视频网站| 91久久精品一区二区三区| 欧美日韩久久一区| 精品国产伦一区二区三区观看方式 | 久久精品国产99久久6| 国产一区二区伦理片| 99国产麻豆精品| 精品国产sm最大网站| 国产日产欧美一区| 亚洲国产成人高清精品| 国产一区二区不卡| 欧美在线观看一区二区| 久久尤物电影视频在线观看| 亚洲日本在线天堂| 精品综合免费视频观看| www.日韩精品| 26uuu亚洲综合色| 亚洲国产欧美在线| 99久久精品免费| 国产天堂亚洲国产碰碰| 久久不见久久见免费视频1| 在线视频综合导航| 国产日韩欧美a| 国内不卡的二区三区中文字幕| 欧美视频第二页| 亚洲精品日产精品乱码不卡| 国产高清精品在线| 日韩美女视频在线| 日本vs亚洲vs韩国一区三区| 97se亚洲国产综合自在线观| 91 com成人网| 性久久久久久久久| 日本道色综合久久| 亚洲精品第一国产综合野| 成人av在线影院| 成人欧美一区二区三区小说| 成人白浆超碰人人人人| 国产欧美精品一区aⅴ影院| 国产a久久麻豆| 亚洲国产成人自拍| 99久久国产综合精品女不卡| 亚洲日本在线a| 91成人在线精品| 丝袜脚交一区二区| 日韩欧美高清一区| 国产一区亚洲一区| 国产三级一区二区三区| 91精品黄色片免费大全| 六月丁香综合在线视频| 久久蜜桃av一区二区天堂 | 欧美日韩午夜在线视频| 精品一区二区在线免费观看| 国产精品视频你懂的| 91色九色蝌蚪| 久久99精品久久只有精品| 国产精品国模大尺度视频| 欧美精品亚洲二区| 国产乱码精品一区二区三区av | 伦理电影国产精品| 亚洲日韩欧美一区二区在线| 欧美肥大bbwbbw高潮| 粉嫩欧美一区二区三区高清影视| 亚洲男人的天堂在线观看| 91精品国产91久久综合桃花| 成人性生交大片免费| 日韩国产一二三区| 亚洲人成网站在线| 久久综合狠狠综合久久激情| 欧美日韩亚洲综合一区| 波多野结衣的一区二区三区| 精品夜夜嗨av一区二区三区| 亚洲福利电影网| 久久99精品国产麻豆不卡| 亚洲成人7777| 亚洲一区av在线| 国产精品电影一区二区| 日韩午夜在线影院| 欧美性生活大片视频| 成人av免费网站| 粉嫩绯色av一区二区在线观看| 韩国精品久久久| 久久精品国产澳门| 麻豆成人久久精品二区三区小说| 亚洲国产精品久久不卡毛片| 亚洲精品视频免费观看| 国产精品不卡一区二区三区| 日本一二三四高清不卡| 国产三级欧美三级| 国产视频一区不卡| 国产午夜一区二区三区| 国产欧美日韩在线| 欧美国产精品中文字幕| 国产夜色精品一区二区av| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩精品专区在线影院重磅| 久久人人97超碰com| 国产片一区二区三区| 国产欧美日韩在线| 亚洲精品高清视频在线观看| 五月激情综合婷婷| 极品销魂美女一区二区三区| 国产宾馆实践打屁股91| caoporn国产一区二区| 日本丶国产丶欧美色综合| 91精品国产一区二区人妖| 久久久亚洲综合| 亚洲专区一二三| 精品一区二区三区香蕉蜜桃| 91蜜桃免费观看视频| 91精品国产综合久久蜜臀| 国产农村妇女毛片精品久久麻豆| 亚洲女人的天堂| 美美哒免费高清在线观看视频一区二区| 国产精品一区二区视频| 欧洲人成人精品| 久久久99精品免费观看不卡| 亚洲一区二区三区中文字幕在线| 国内国产精品久久| 欧美性极品少妇| 久久久91精品国产一区二区精品 | 视频一区视频二区中文| 91影视在线播放| 久久久青草青青国产亚洲免观| 亚洲二区在线观看| aa级大片欧美| 国产视频在线观看一区二区三区 | 亚洲成人三级小说| 99国产精品视频免费观看| 久久一区二区三区国产精品| 丝袜诱惑亚洲看片| 色综合天天性综合| 亚洲色欲色欲www在线观看| 国产黄色成人av| 欧美经典一区二区| 国产福利精品导航| 国产拍欧美日韩视频二区| 国内不卡的二区三区中文字幕| 日韩三级在线免费观看| 美日韩一区二区三区| 日韩视频国产视频| 久久精品999| 久久久久国产精品厨房| 精品影院一区二区久久久| 欧美成人bangbros| 国产一区二区三区香蕉| 国产嫩草影院久久久久| 色婷婷激情一区二区三区| 一区二区三区**美女毛片| 欧美日韩一区二区三区视频| 日韩激情视频网站| 久久色在线观看| 92国产精品观看| 天天影视网天天综合色在线播放| 日韩欧美专区在线| 国产精品亚洲一区二区三区妖精 | 国内成人精品2018免费看| 久久久久99精品一区| 99久久久精品| 日韩av中文字幕一区二区| 国产欧美精品一区二区三区四区 | 成人晚上爱看视频| 亚洲一区二区三区四区在线 | 欧美午夜精品久久久久久孕妇| 青青草精品视频| 国产精品理论在线观看| 欧美亚洲国产一区二区三区| 国产精品99久久久| 午夜伊人狠狠久久| 亚洲国产精品av| 精品日韩av一区二区| 日本高清不卡一区|