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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mouse_drive.c

?? 周立功電子鼠V1.3內(nèi)部演示版源程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
#include "Mouse_Drive.h"

void Delay(unsigned long d);
void WheelPulseIni(void);
void GPIO_Port_A_ISR(void);
void GPIO_Port_B_ISR(void);
void Timer0Ini(void);
void PwmPercent(int32 percent);
void SendInfrared(uint32 frequency);
void ForbidInfrared(void);
void LeftWheelRun(int sel);
void RightWheelRun(int sel);
void SysTickIni(void);
void SysTick_ISR(void);
void wheeljamcheck(void);
void wheelJamdispose(void);
void MouseRUNIni( int run,int puls,int percent);
void Go_Ahead(uint32 n);
void Turnleft(void);
void Turnright(void);
void Turn180L(void);
void Turn180R(void);
void MouseRUN( int run);
void Timer1Ini(void);
void Timer1A_ISR(void);
void map_xy(void);
void MappulseClear(void);
void Check_Infrared(void);
void Judge(uint32 State);
void MicroMouseInit(void);
uint32 CheckKey(void);
void LEDDisplay(uint32 number,uint32 option);
void DirDisplay(void);
/*PA*/
#define SPEED_PULSE_R		GPIO_PIN_0
#define STATE_L				GPIO_PIN_1
#define STATE_F				GPIO_PIN_2
#define STATE_R				GPIO_PIN_3
#define RWC2				GPIO_PIN_4
#define LWC2				GPIO_PIN_5
/*PB*/
#define PWM					GPIO_PIN_0		//PWM0
#define SPEED_PULSE_L		GPIO_PIN_1
//#define INF_SEND_R			GPIO_PIN_2
#define KEY					GPIO_PIN_3
#define RWC1				GPIO_PIN_4
#define LWC1				GPIO_PIN_5
#define INF_SEND			GPIO_PIN_6		//PWM1
#define LED5				GPIO_PIN_7
//PC
#define LED1				GPIO_PIN_3
#define LED2				GPIO_PIN_0
#define LED3				GPIO_PIN_1
#define LED4				GPIO_PIN_2

RUN_DATA g_Run = {0,0,0,0,0,0,0,STOP,1,0x11,50};
CHECK_MAZE Check_Maze_State[2]={0};
MAZEMAP MAP = {1,1,0,10,10};

uint32 goahead = 0;



//------------------------------------------------------------------------------------
// 函數(shù)名稱:Delay
// 函數(shù)功能:延時數(shù)量為 d 個指令周期。
// 輸入?yún)?shù):d,將要延時的時間數(shù)。
//------------------------------------------------------------------------------------
void Delay(unsigned long d)
{
	for(;d;d--);
}


//------------------------------------------------------------------------------------
// 函數(shù)名稱: WheelPulseIni
// 函數(shù)功能: 輪子脈沖檢測初始化。
//
//------------------------------------------------------------------------------------

void WheelPulseIni(void)
{
	// 配置引腳為輸入
   	GPIODirModeSet(GPIO_PORTA_BASE, SPEED_PULSE_R, GPIO_DIR_MODE_IN);	
 	GPIODirModeSet(GPIO_PORTB_BASE, SPEED_PULSE_L, GPIO_DIR_MODE_IN);	
    // 配置引腳下降沿和上升沿觸發(fā)中斷
   	GPIOIntTypeSet(GPIO_PORTA_BASE,SPEED_PULSE_R,GPIO_BOTH_EDGES);
	GPIOIntTypeSet(GPIO_PORTB_BASE,SPEED_PULSE_L,GPIO_BOTH_EDGES);
    // 初始化禁止引腳輸入中斷
	//GPIOPinIntDisable(GPIO_PORTA_BASE,SPEED_PULSE_R);
 	//GPIOPinIntDisable(GPIO_PORTB_BASE,SPEED_PULSE_L);
	// 使能引腳輸入中斷
	GPIOPinIntEnable(GPIO_PORTA_BASE,SPEED_PULSE_R);
	GPIOPinIntEnable(GPIO_PORTB_BASE,SPEED_PULSE_L);
   	// 使能GPIO PA口和GPIO PB口中斷
	IntEnable(INT_GPIOA);
   	IntEnable(INT_GPIOB);
}
//------------------------------------------------------------------------------------
// 函數(shù)名稱: GPIO_Port_A_ISR
// 函數(shù)功能: 右輪檢測脈沖中斷處函數(shù)
//
//------------------------------------------------------------------------------------
void GPIO_Port_A_ISR(void)
{
	uint8 IntStatus;
	IntStatus = GPIOPinIntStatus(GPIO_PORTA_BASE,true);		// 讀PA口中斷狀態(tài)
	if(IntStatus&SPEED_PULSE_R)								// 是否為左輪脈沖中斷
	{
		GPIOPinIntClear(GPIO_PORTA_BASE,SPEED_PULSE_R);		// 清中斷
		if(g_Run.MouseStop)
			LEDDisplay(5 , 2);					// 車體停止后,如果輪子轉(zhuǎn)動則閃爍LED
			
		g_Run.RightTime = g_Run.SysTick;						// 計(jì)錄當(dāng)前系統(tǒng)(相對)時鐘
		if(g_Run.COM_Run == GO_ON)
		{
			MAP.rightpulse ++;
		}
 		g_Run.RightPulse++;								// 脈沖加1計(jì)數(shù)
		if( g_Run.RightPulse>=g_Run.PulseCount)				// 脈沖計(jì)數(shù)已滿或溢出
			if( !(g_Run.WheelStop&0x01))                          // 輪子為轉(zhuǎn)動狀態(tài)則將其停止
			{
				RightWheelRun(0);			     // 右輪停止
				g_Run.RightPulse -= g_Run.PulseCount;							// 脈沖計(jì)數(shù)清零
				//g_Run.RightPulse = 0;
			}
	}
}
//------------------------------------------------------------------------------------
// 函數(shù)名稱: GPIO_Port_B_ISR
// 函數(shù)功能: 左輪檢測脈沖中斷處函數(shù)
//
//------------------------------------------------------------------------------------
void GPIO_Port_B_ISR(void)
{
	unsigned char IntStatus;
	IntStatus = GPIOPinIntStatus(GPIO_PORTB_BASE,true);		// 讀PA口中斷狀態(tài)
	if(IntStatus&SPEED_PULSE_L)							// 是否為右輪脈沖中斷
	{
	  	GPIOPinIntClear(GPIO_PORTB_BASE,SPEED_PULSE_L);	// 清中斷
		if(g_Run.MouseStop)
			LEDDisplay(1, 2);					// 車體停止后,如果輪子轉(zhuǎn)動則閃爍LED
			
		g_Run.LeftTime = g_Run.SysTick;						// 計(jì)錄當(dāng)前系統(tǒng)(相對)時鐘
		if(g_Run.COM_Run == GO_ON)
		{
   			MAP.leftpulse++;
		}
   		g_Run.LeftPulse++;                                   // 脈沖加1計(jì)數(shù)
		if(g_Run.LeftPulse>=g_Run.PulseCount)				// 脈沖計(jì)數(shù)已滿或溢出
			if(!(g_Run.WheelStop&0x10))						// 輪子為轉(zhuǎn)動狀態(tài)則將其停止
			{
				LeftWheelRun(0);							// 左輪停止
				g_Run.LeftPulse -= g_Run.PulseCount;							// 脈沖計(jì)數(shù)清零
				//g_Run.LeftPulse = 0;
			}
	}
}

//------------------------------------------------------------------------------------
// 函數(shù)名稱: Timer0Ini
// 函數(shù)功能: 定時器0初始化。
//
//------------------------------------------------------------------------------------
void Timer0Ini(void)
{
	SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); 						// 使能定時器0模塊

 	GPIODirModeSet(GPIO_PORTB_BASE, LWC1|RWC1 , GPIO_DIR_MODE_OUT);		// 控制引腳輸出
	GPIOPinWrite(GPIO_PORTB_BASE, LWC1|RWC1 , 0xff);					// GPIO輸出高電平
	GPIODirModeSet(GPIO_PORTA_BASE, LWC2|RWC2 , GPIO_DIR_MODE_OUT);		// 控制引腳輸出
 	GPIOPinWrite(GPIO_PORTA_BASE, LWC2|RWC2 , 0xff);					// GPIO輸出高電平

	GPIODirModeSet(GPIO_PORTB_BASE, PWM | INF_SEND, GPIO_DIR_MODE_HW);
 	/* 定時器配置*/
	TimerConfigure(TIMER0_BASE,TIMER_CFG_16_BIT_PAIR
	  				|TIMER_CFG_A_PWM|TIMER_CFG_B_PWM);					// 16位PWM輸出
	/*PWM*/
	TimerControlLevel(TIMER0_BASE,TIMER_A,true);						// PWM初始化有效信號為低電平
	TimerLoadSet(TIMER0_BASE,TIMER_A,40000);
	TimerMatchSet(TIMER0_BASE,TIMER_A,20000);				// 設(shè)置占空比
	TimerEnable(TIMER0_BASE,TIMER_A);	 								// 使能定時器A
	/*INF_SEND*/
	TimerControlLevel(TIMER0_BASE,TIMER_B,true);						// PWM初始化有效信號為低電平
	TimerDisable(TIMER0_BASE,TIMER_B);							// 禁止定時器
}
//------------------------------------------------------------------------------------
// 函數(shù)名稱: PwmPercent
// 函數(shù)功能: 設(shè)置占空比。
//
//------------------------------------------------------------------------------------
void PwmPercent(int32 percent)
{
	int32 LoadValue;
	LoadValue = (int32)400*percent;
	TimerMatchSet(TIMER0_BASE,TIMER_A,LoadValue);				// 設(shè)置占空比
	//g_Run.percent = percent;
}
//------------------------------------------------------------------------------------
// 函數(shù)名稱: SendInfrared
// 函數(shù)功能: 發(fā)送紅外線。
// 輸入?yún)?shù): frequency,紅外線調(diào)制頻率
//------------------------------------------------------------------------------------
void SendInfrared(uint32 frequency)
{
	uint32 LoadValue;
	if(frequency == 38000)
		LoadValue = 263;
	else
		LoadValue = (uint32)10000000/frequency;
	TimerLoadSet(TIMER0_BASE,TIMER_B,LoadValue*2);
	TimerMatchSet(TIMER0_BASE,TIMER_B,LoadValue);				// 設(shè)置占空比
	TimerEnable(TIMER0_BASE,TIMER_B);	 						// 使能定時器B
}
//------------------------------------------------------------------------------------
// 函數(shù)名稱: ForbidInfrared
// 函數(shù)功能: 禁止發(fā)送調(diào)制紅外線。
//
//------------------------------------------------------------------------------------
void ForbidInfrared(void)
{
	TimerDisable(TIMER0_BASE,TIMER_B);							// 禁止定時器
}
//------------------------------------------------------------------------------------
// 函數(shù)名稱: LeftWheelRun
// 函數(shù)功能: 左輪控制函數(shù)。
// 輸入?yún)?shù): sel,選擇輪子的控制方式:0為停止,1為輪子向前,2為輪子向后。
//			 percen,占空比,其最大值為99,最小值為1,對于輪子的停止控制該參數(shù)無效。
//------------------------------------------------------------------------------------
void LeftWheelRun(int sel)
{
	switch(sel)
	{
		/*輪子停止轉(zhuǎn)動*/
		case 0:
			GPIOPinWrite(GPIO_PORTA_BASE,LWC2, 0xff);					// 控制引腳輸出高電平
			GPIOPinWrite(GPIO_PORTB_BASE,LWC1, 0xff);					// GPIO輸出高電平
			g_Run.WheelStop |= 1<<4;									// 標(biāo)記當(dāng)前狀態(tài)為停止
			break;
		/*左輪向前*/
		case 1:
			GPIOPinWrite(GPIO_PORTA_BASE,LWC2, 0xff);					// PA4輸出高電平
			GPIOPinWrite(GPIO_PORTB_BASE,LWC1, 0x00);					// GPIO輸出高電平
			g_Run.WheelStop &= 0xef;							// 向前運(yùn)行
			g_Run.WheelStop |= 0x80;
			break;
		/*左輪向后*/
		case 2:
			GPIOPinWrite(GPIO_PORTA_BASE,LWC2, 0x00);					// PA4輸出低電平
			GPIOPinWrite(GPIO_PORTB_BASE,LWC1, 0xff);					// GPIO輸出高電平
			g_Run.WheelStop &= 0x6f;							// 向后運(yùn)行
			break;
		case 3:
			GPIOPinWrite(GPIO_PORTA_BASE,LWC2, GPIOPinRead(GPIO_PORTA_BASE,LWC2)^LWC2);					// PA4輸出低電平
			GPIOPinWrite(GPIO_PORTB_BASE,LWC1, GPIOPinRead(GPIO_PORTB_BASE,LWC1)^LWC1);					// GPIO輸出高電平

	}
}
//------------------------------------------------------------------------------------
// 函數(shù)名稱: RightWheelRun
// 函數(shù)功能: 右輪控制函數(shù)。
// 輸入?yún)?shù): sel,選擇輪子的控制方式:0為停止,1為輪子向前,2為輪子向后。
//			 percen,占空比,其最大值為99,最小值為1,對于輪子的停止控制該參數(shù)無效。
// 全局變量: g_Run.WheelStop,標(biāo)記當(dāng)前狀態(tài)。
//------------------------------------------------------------------------------------
void RightWheelRun(int sel)
{
	switch(sel)
	{
		/*輪子停止轉(zhuǎn)動*/
		case 0:
			GPIOPinWrite(GPIO_PORTA_BASE,RWC2,0xff);					// 控制引腳輸出高電平
			GPIOPinWrite(GPIO_PORTB_BASE,RWC1,0xff);					// GPIO輸出高電平
			g_Run.WheelStop |= 1;
			break;
		/*右輪向后*/
		case 2:
			GPIOPinWrite(GPIO_PORTA_BASE,RWC2,0xff);					// 控制引腳輸出高電平
			GPIOPinWrite(GPIO_PORTB_BASE,RWC1,0x00);					// GPIO輸出高電平
			g_Run.WheelStop &= 0xf6;
			break;
		/*右輪向前*/
		case 1:
			GPIOPinWrite(GPIO_PORTA_BASE,RWC2,0x00);					// 控制引腳輸出高電平
			GPIOPinWrite(GPIO_PORTB_BASE,RWC1,0xff);					// GPIO輸出高電平
			g_Run.WheelStop &= 0xfe;
			g_Run.WheelStop |= 0x08;
			break;
		case 3:
			GPIOPinWrite(GPIO_PORTA_BASE,RWC2,GPIOPinRead(GPIO_PORTA_BASE,RWC2)^RWC2);					// 控制引腳輸出高電平
			GPIOPinWrite(GPIO_PORTB_BASE,RWC1,GPIOPinRead(GPIO_PORTB_BASE,RWC1)^RWC1);					// GPIO輸出高電平
	}
}
//------------------------------------------------------------------------------------
// 函數(shù)名稱: SysTickIni
// 函數(shù)功能: 系統(tǒng)節(jié)拍定時器初始化。
//
//------------------------------------------------------------------------------------

void SysTickIni(void)
{
	SysTickPeriodSet(SysCtlClockGet()/1000);
 	SysTickEnable();
 	SysTickIntEnable();
}
//------------------------------------------------------------------------------------
// 函數(shù)名稱: SysTick_ISR
// 函數(shù)功能: 定時中斷掃描。
// 
//------------------------------------------------------------------------------------

void SysTick_ISR(void)						
{
	static uint32 l = 0,r =0;
	g_Run.SysTick++;					// 系統(tǒng)時鐘節(jié)拍加1,每中斷自加1
   	if((g_Run.WheelStop&0x11)==0x11 )	 	// 如果車已停止
	{
		if(g_Run.MousePulCount)			// 總剩余脈沖數(shù)是否為0,否,則分段運(yùn)行
		{				
			if(g_Run.MousePulCount>MAX_PER_PULS)		// 脈沖數(shù)大于分段運(yùn)行脈沖數(shù)
			{						// 運(yùn)行分段脈沖數(shù)
				g_Run.PulseCount = MAX_PER_PULS;
				MouseRUN(g_Run.COM_Run);
				g_Run.MousePulCount -= g_Run.PulseCount;	// 總脈沖數(shù)減已走脈數(shù)
			}
			else						// 剩余脈沖數(shù)少于或等于分段運(yùn)行脈沖數(shù)
			{						// 運(yùn)行總剩余脈沖數(shù)
				g_Run.PulseCount = g_Run.MousePulCount;
				MouseRUN(g_Run.COM_Run);
				g_Run.MousePulCount =0;
			}
			if(g_Run.COM_Run == GO_ON)
			{
				if(Check_Maze_State[0].left_1)
				{
					g_Run.RightPulse++;
					l++;
					Check_Maze_State[0].left_1 = 0;
				}
				else
				{
					if(l)
					{
						if(l<4)
						{
							g_Run.LeftPulse ++;
							l--;
						}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费在线视频一区 二区| 91精品国产综合久久精品性色 | 日韩激情视频网站| 欧美色图片你懂的| 婷婷夜色潮精品综合在线| 91精品国产综合久久福利软件| 日本中文字幕一区二区有限公司| 欧美一区二区福利视频| 六月丁香综合在线视频| 久久免费精品国产久精品久久久久| 高清不卡一区二区| 亚洲老妇xxxxxx| 91精品国产乱| 国产一区二区三区在线观看免费视频 | 欧美v亚洲v综合ⅴ国产v| 日本视频一区二区| 精品久久久久久亚洲综合网 | 日韩黄色片在线观看| 欧美三级中文字幕在线观看| 亚洲一区二区欧美日韩| 欧美亚洲国产bt| 天堂在线亚洲视频| 久久久久国产免费免费| 成人av资源站| 日韩经典一区二区| 久久先锋影音av| 亚洲成av人片www| 久久午夜电影网| 成人中文字幕在线| 自拍偷拍欧美精品| 精品视频一区 二区 三区| 日韩av网站免费在线| 精品国产自在久精品国产| 国产成人av资源| 亚洲欧美日韩久久| 在线91免费看| 国产综合久久久久久久久久久久 | 91小宝寻花一区二区三区| 一区二区高清免费观看影视大全 | 久久草av在线| 国产欧美综合在线| 91美女精品福利| 日韩av成人高清| 国产人成一区二区三区影院| 91蜜桃婷婷狠狠久久综合9色| 视频一区中文字幕| 国产日产欧产精品推荐色| 在线观看亚洲专区| 男男视频亚洲欧美| 国产精品成人一区二区三区夜夜夜 | 欧美日韩国产片| 国产麻豆视频精品| 夜夜嗨av一区二区三区网页| 欧美mv日韩mv国产网站| 91视视频在线观看入口直接观看www | 5566中文字幕一区二区电影| 成人爱爱电影网址| 免费欧美日韩国产三级电影| 亚洲欧洲另类国产综合| 欧美一区二区人人喊爽| www.日韩av| 国产原创一区二区| 一区二区三区小说| 91精品国产综合久久香蕉的特点| 成人黄页在线观看| 久久99精品久久久久久久久久久久| 亚洲人成网站在线| 国产亚洲精品福利| 日韩一区二区三区电影在线观看| 91丨porny丨国产| 成人性生交大片免费看视频在线| 人人精品人人爱| 亚洲一区二区精品3399| 亚洲精品一区二区三区香蕉| 99久久精品免费看| 国产一区二区三区电影在线观看| 午夜精品福利在线| 一区二区三区四区在线免费观看 | 日本欧美在线观看| 亚洲午夜一二三区视频| 亚洲视频在线观看三级| 久久久天堂av| 国产精品美女久久久久aⅴ国产馆| 日韩免费在线观看| 精品国产第一区二区三区观看体验| 欧美日韩日日摸| 欧美优质美女网站| 91成人免费网站| 一本色道久久综合亚洲91| 成人免费看的视频| 成人小视频在线观看| 成人一区二区三区中文字幕| 国产一区二区三区在线看麻豆| 卡一卡二国产精品| 蜜桃一区二区三区在线| 午夜欧美视频在线观看| 国产精品免费久久久久| 国产精品妹子av| 中文字幕一区二区三区乱码在线| 国产精品欧美综合在线| 中文字幕在线不卡一区二区三区| 亚洲天堂福利av| 亚洲最色的网站| 午夜亚洲福利老司机| 五月天一区二区| 美脚の诱脚舐め脚责91 | 亚洲精品乱码久久久久久久久| 国产精品久久久久永久免费观看| 亚洲精品一区二区三区影院| 日韩欧美电影一二三| 久久色在线观看| 国产日韩精品视频一区| 国产精品乱子久久久久| 亚洲天堂av一区| 亚洲精品一二三四区| 男女男精品网站| 成人一区二区三区在线观看| 99视频精品在线| 欧美日韩亚洲丝袜制服| 日韩欧美一二三| 国产日韩欧美精品一区| 国产精品久久久久久久午夜片| 亚洲综合自拍偷拍| 免费的国产精品| 成人性视频网站| 欧美日韩在线播放一区| 久久久久久久久久久黄色| 国产精品不卡视频| 午夜国产不卡在线观看视频| 极品少妇xxxx精品少妇偷拍 | 日韩美女一区二区三区四区| 国产精品美女久久久久久| 亚洲国产精品麻豆| 狠狠色综合播放一区二区| av中文字幕在线不卡| 欧美一区二区三区视频在线| 国产欧美一区二区精品婷婷| 婷婷六月综合网| 99这里只有久久精品视频| 欧美一级搡bbbb搡bbbb| 中文字幕一区二区三区视频| 免费看日韩精品| 色婷婷综合五月| 欧美精品一区二区三区在线播放| 中文字幕一区二区三区精华液 | 久久天堂av综合合色蜜桃网| 亚洲观看高清完整版在线观看| 国产乱人伦偷精品视频不卡| 欧美性生活大片视频| 国产精品网站一区| 亚洲午夜一二三区视频| 国产成人aaa| 欧美一区二区精美| 亚洲影院理伦片| 国产宾馆实践打屁股91| 日韩欧美国产综合| 亚洲自拍偷拍九九九| 色综合中文综合网| 7777精品伊人久久久大香线蕉完整版| 国产午夜亚洲精品羞羞网站| 久久精品国产精品亚洲红杏| 欧美在线你懂的| 久久综合久久综合九色| 蜜桃一区二区三区在线| 欧美日韩国产综合久久| 亚洲综合色视频| 93久久精品日日躁夜夜躁欧美| 国产精品视频在线看| 国产一区欧美二区| 日韩欧美卡一卡二| 一区二区三区丝袜| 不卡一卡二卡三乱码免费网站| 日韩欧美不卡在线观看视频| 亚洲成av人片在线观看无码| 一本一道久久a久久精品| 国产精品美女久久久久久| 国产999精品久久| 国产午夜精品在线观看| 国产一区日韩二区欧美三区| 日韩欧美一区二区免费| 日韩精品电影在线| 91精品国产91综合久久蜜臀| 一区二区高清视频在线观看| 一本色道久久加勒比精品| 亚洲欧美偷拍卡通变态| av一本久道久久综合久久鬼色| 亚洲天堂福利av| 在线亚洲一区二区| 国产欧美日韩精品一区| 国产精品一区二区三区四区| 精品国产一区二区三区久久久蜜月 | 欧美激情资源网| 懂色av噜噜一区二区三区av| 中文一区一区三区高中清不卡| 国产suv一区二区三区88区| 国产日韩欧美在线一区| 国产丶欧美丶日本不卡视频| 日本一区二区三级电影在线观看| 成人av片在线观看| 一区二区三区四区激情|