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

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

?? rainwipereeprom v20.c

?? 利用L293D驅動步進電機
?? C
字號:
/********************************
名稱:雨刷控制器
日期:2007-06-23
作者:Mavinger
版本:
V1.0:2007-07-8 ,創建此版本

V2.0:2006-11-5 ,修改外部晶振為11.0592M


硬件:
1.控制單片機: 12C5052AD
2.步進電機驅動器: L293D




********************************/

#include "../code/STC12C5410AD.h"
//#include "../code/STC89C51RC.h"
#include <INTRINS.h>
#include <math.h>
#include <stdio.h>

//數據類型定義
typedef unsigned char byte;
typedef unsigned int  word;
typedef unsigned long dword;

//24M
//#define  Timer_H    0xFF		//0.1ms
//#define  Timer_L    0x38
#define  Timer_H    0xFF		//0.01ms
#define  Timer_L    0xEC

#define RunDegree   350
#define HighSpeed   2
#define LowSpeed    5
#define FordRun			1
#define BackRun			0


//電機驅動控制

//input
sbit Run_Mode	=P3^5; 
sbit Stop_Mode	=P3^4;
sbit Speed_Mode	=P3^3;

//output
sbit Step_EN1	=P1^7;
sbit Step_EN2	=P1^6;

sbit Out_A0  	=P1^3;
sbit Out_A1     =P1^2; 
sbit Out_B0     =P1^1; 
sbit Out_B1     =P1^0; 


#define Open	1
#define Close   0
#define ON      1
#define OFF     0

#define OK  1
#define Error 0


/*---命令---*/
#define READ_Data_Memory_Command			 0x01     /*  字節讀應用程序區和數據存儲區   */
#define PROGRAM_Data_Memory_Command          0x02        /*  字節編程應用程序區和數據存儲區 */
#define SECTOR_ERASE_Data_Memory_Command     0x03        /*  扇區擦除應用程序區和數據存儲區 */

#define Wait_Time 		 0x05      //CPU等待時間 20M:0x01    40M: 0x00
#define In_One_Sector  512    //扇區大小: 512字節

/*------ISP_CONTR -----------*/
#define ResetToISP   0x60    /* MCU 軟復位至ISP程序區*/
#define AllowFlash   0x80    /*允許ISP/IAP操作*/
#define StartAtISP   0x40  
#define OnReset      0x20


/*產品參數處于Data Flash的首地址*/
#define STEPBLOCK_ORIGIN	0x2800   //0x2C000x9400

bit MotorDir;
bit Runflag,Stopflag;

word stepsave,Degreesave;
byte np;

const byte forward[]=
{0xB8,0xFA,0x72,0xF6,0xB4,0xF5,0x71,0xF9};

const byte backward[]=
{0xF9,0x71,0xF5,0xB4,0xF6,0x72,0xFA,0xB8};

const word code Default_Degree=400;
const word code Default_RunSpeed=30;
const word code Default_StepNum=300;
const word code Default_StopSpeed=1;
const word code Default_RunStep=0;	
const word code Default_Diretion=1;
const word code Default_Market=0x88;
const word code Default_EndFlag=1;				//已歸位
/*
data struct
{
	word Degree;				//角度
	word Diretion;			//方向
	word StepNum;				//總步數
	word RunStep;				//未運行步數
	word RunSpeed;			//運行時間
	word StopSpeed;			//轉換方向間隔時間
	word Market;				//標志位
  word EndFlag;
}Stepblock;
*/
xdata struct
{
	word Diretion;			//方向
	word RunStep;				//未運行步數
	word Market;				//標志位
	word EndFlag;
}Stepblock;

xdata step_cnt1;


void StepRun(byte StepDir,word Speednum);



void Initial(void)
{
	//AUXR=AUXR & 0x7F;  				//T0x12=0; 系統時鐘12分頻,即 T=12/6=2us
	AUXR=0x00;
	
  TMOD=0x01;						//C/T1作定時用,16位模式	

	TH0=0xFF;
	TL0=0x38;
	ET0=1;
	TR0=1;


	P1M0=0;		//P1M0=0,P1M1=0,P1口為準雙向口
	P1M1=0;
	P3M0=0;
	P3M1=0;
	EA=1;
}

void InitialUART(void)
{
    SCON = 0X50;     
    TMOD = 0X21;        
	  TH1 = 0xF3;			//Baudrate:4800
    //TH1=0xFA;				//9600
	  TR1 = 1 ;         
    TI=1;
}


//1ms*N 延時
void Delay1MS(word delay1ms)
{
	word cnt;
	byte cnt1; 
	

	for(cnt=0;cnt<delay1ms;cnt++)
	{
		for(cnt1=0;cnt1<200;cnt1++)
		//for(cnt1=0;cnt1<2;cnt1++)
		_nop_();
	}
}



//---------------------EEPROM --------------------------------
/*------------------
打開ISP/IAP功能
--------------------*/
void ISP_IAP_Enable(void)
{
	EA	=	0;	/* 關中斷 */
	ISP_CONTR	=	ISP_CONTR & 0x18;       /* 0001,1000 */
	ISP_CONTR	=	ISP_CONTR | Wait_Time;
	ISP_CONTR	=	ISP_CONTR | 0x80;       /* 1000,0000 */	
}


/*------------------
關閉ISP/IAP功能
--------------------*/
void ISP_IAP_Disable(void)
{
	ISP_CONTR	=	ISP_CONTR & 0x7f;	/* 0111,1111 */
	ISP_TRIG	=	0x00;
	EA			=   1;                	/* 開中斷 */
}

/*------------------
字節讀
輸入: 16位地址
返回: 一個字節數據
--------------------*/
byte Byte_Read(word byte_addr)
{
	ISP_ADDRH=(byte)(byte_addr >> 8);
	ISP_ADDRL=(byte)(byte_addr & 0x00ff);

	ISP_CMD	=ISP_CMD&0xf8;        // 1111,1000  等待模式
	ISP_CMD	=ISP_CMD|READ_Data_Memory_Command;   //0000,0001 讀數據 
	ISP_IAP_Enable();
	ISP_TRIG=0x46;
	ISP_TRIG=0xb9;
	_nop_();
	_nop_();

	ISP_IAP_Disable();
	return (ISP_DATA);	
}


void flash_Block_Read(byte *dest, word src, word count)
{
	word idata i;
	
	for(i = 0; i < count; i++)
	{
		*(dest + i) = Byte_Read(src+i);
	}
}


/*------------------
扇區擦除
輸入: 16位地址
返回:=1  Erase success
--------------------*/
byte Sector_erase(word sector_addr)
{
	word idata get_sector_addr	=	0;
	get_sector_addr			=	(sector_addr & 0xfe00); // 1111,1110,0000,0000; 取扇區地址
	ISP_ADDRH        		=	(byte)(get_sector_addr >> 8);
	ISP_ADDRL		        =	0x00;
	ISP_CMD	=	ISP_CMD	&	0xf8;	// 1111,1000 
	ISP_CMD	=	ISP_CMD	| SECTOR_ERASE_Data_Memory_Command;	// 0000,0011 
	ISP_IAP_Enable();
	ISP_TRIG	=	0x46;        // 觸發ISP_IAP命令
	ISP_TRIG	=	0xb9;        // 觸發ISP_IAP命令 
	_nop_();
	_nop_();
	
	ISP_IAP_Disable();
	return OK;	
}



/*------------------
寫數據進 數據Flash存儲器, 只在同一個扇區內寫,不保留原有數據
begin_addr,被寫數據Flash開始地址;counter,連續寫多少個字節; array[],數據來源
--------------------*/
byte Sequential_write_flash_in_one_sector(word begin_addr, byte *array, word counter)
{
	word	idata	i	=	0;
	word	idata	in_sector_begin_addr	=	0;
	word	idata sector_addr	=	0;

	// 判是否是有效范圍,此函數不允許跨扇區操作 

	if(counter > In_One_Sector)
		return	Error;
	in_sector_begin_addr = begin_addr & 0x01ff;         // 0000,0001,1111,1111 
	if((in_sector_begin_addr + counter) > In_One_Sector)
		return Error;

    //擦除 要修改/寫入 的扇區 
	sector_addr	=	(begin_addr & 0xfe00);	// 1111,1110,0000,0000; 取扇區地址 
	ISP_ADDRH	=	(byte)(sector_addr >> 8);
	ISP_ADDRL	=	0x00;
	ISP_CMD		=	ISP_CMD	&	0xf8;		// 1111,1000 
	ISP_CMD		=	ISP_CMD	|	SECTOR_ERASE_Data_Memory_Command;	// 0000,0011 
	ISP_IAP_Enable();
	ISP_TRIG	=	0x46;        //觸發ISP_IAP命令
	ISP_TRIG	=	0xb9;        // 觸發ISP_IAP命令 
	_nop_();
	_nop_();

	for(i = 0; i< counter; i++)
	{
		//寫一個字節
		ISP_ADDRH	=	(byte)(begin_addr >> 8);
		ISP_ADDRL	=	(byte)(begin_addr & 0x00ff);
		ISP_DATA	=	*array;
		ISP_CMD		=	ISP_CMD	&	0xf8;	//1111,1000
		ISP_CMD		=	ISP_CMD	|	PROGRAM_Data_Memory_Command;		//0000,0010
		ISP_TRIG	=	0x46;	// 觸發ISP_IAP命令 
		ISP_TRIG	=	0xb9;	// 觸發ISP_IAP命令 
    _nop_();
		_nop_();                   // 讀回來

		ISP_DATA	=	0x00;
		ISP_CMD		=	ISP_CMD	&	0xf8;	// 1111,1000 
		ISP_CMD     =	ISP_CMD	|	READ_Data_Memory_Command;	// 0000,0001
		ISP_TRIG	=	0x46;	// 觸發ISP_IAP命令 
		ISP_TRIG	=	0xb9;	// 觸發ISP_IAP命令 
		_nop_();
		_nop_();		

		//  比較對錯 if(ISP_DATA != *array)
		if(ISP_DATA != *array)
		{
			ISP_IAP_Disable();
			return Error;
		
		}
        begin_addr++;
				array++;
	}
	ISP_IAP_Disable();
	return	OK;	
}


void UploadBlock(void)
{
	flash_Block_Read((byte *)&Stepblock, STEPBLOCK_ORIGIN, sizeof(Stepblock)); 
}

byte UpdateBlock(void)
{
	Sector_erase(STEPBLOCK_ORIGIN);
	return(Sequential_write_flash_in_one_sector(STEPBLOCK_ORIGIN,(byte *)&Stepblock,sizeof(Stepblock)));
}


byte ResetBlock(void)
{	
//	Stepblock.Degree=Default_Degree;
	Stepblock.Diretion=Default_Diretion;
//	Stepblock.StepNum=Default_StepNum;
	Stepblock.RunStep=Default_RunStep;     //...
//	Stepblock.RunSpeed=Default_RunSpeed;
//	Stepblock.StopSpeed=Default_StopSpeed;
	Stepblock.Market=Default_Market;
	Stepblock.EndFlag=Default_EndFlag;  
	return(UpdateBlock());
}

byte ReturnSet(void)
{	
	Stepblock.Diretion=FordRun;
	Stepblock.RunStep=0;     
	Stepblock.Market=Default_Market;
	Stepblock.EndFlag=1;  
	return(UpdateBlock());
}


void ReadBlock(void)
{	
	word stepcnt;
	word step1;

	step1=RunDegree/0.9;
	step1=step1-Stepblock.RunStep;


	UploadBlock();
/*	if(Stepblock.Market!=Default_Market)
	{	
		printf("Stepblock.Market!=Default_Market\n");
		ResetBlock();
	}
	else*/
	if(Stepblock.Market!=Default_Market)
	{
		Stepblock.Diretion=0x01;
		Stepblock.RunStep=10;
		Stepblock.EndFlag=0x00;

		printf("Stepblock.Market=Default_Market\n");
		if((!Stepblock.EndFlag) && Stepblock.RunStep)				//未歸位
		{
		
				if(Stepblock.Diretion==0x01)   //正轉
				{
					//for(stepcnt=0;stepcnt<Stepblock.RunStep;stepcnt++)
					for(stepcnt=0;stepcnt<130;stepcnt++)
  				{
						StepRun(BackRun,10);				//反轉歸位					
					}
				}
				else if(Stepblock.Diretion==0x00)   //反轉
				{
					for(stepcnt=0;stepcnt<300;stepcnt++)
					{
						StepRun(BackRun,10);				//反轉歸位					
					}

				}			
				ResetBlock();	
		}
		
	}
}


void MotorRst(void)
{
	Step_EN1=1;
	Step_EN2=1;
	Out_A0=0;
	Out_A1=0;
	Out_B0=0;
	Out_B1=0;
}

void MotorSet(void)
{
	P1=0xB8;
	Delay1MS(1);
}


void StepRun(byte StepDir,word Speednum)		// One step run
{

	if(StepDir & 0x01)
	{	 
		MotorDir=1;
		if(np==0)
			np=7;
		else 
			np--;
		P1=forward[np];
		Delay1MS(Speednum);	
	}
	else
	{
		MotorDir=0;
		if(np==0)
			np=7;
		else 
			np--;
		P1=backward[np];
		Delay1MS(Speednum);	
	}		
}

void RunNumRecord(word runnum)
{
		Stepblock.RunStep=runnum;  
		UpdateBlock();	
}




void MotorTurn(byte StepDir,word Speednum,word Degree)	//方向,速度,度數
{
	word degreecnt;
	word stepcnt;

	degreecnt=Degree/0.9;
	Degreesave=degreecnt;	
	
	for(stepcnt=0;stepcnt<degreecnt;stepcnt++)
	{
		StepRun(StepDir,Speednum);
		
		//if(!Stop_Mode)
		//{
		step_cnt1=stepcnt;
		RunNumRecord(stepcnt);
	//	UploadBlock();
	//	printf("RunStep:%d\n",Stepblock.RunStep);	
	//	}
	}
}


void MotorReturn(byte StepDir,word Speednum)
{
	word stepcnt;
	word savecnt;

	savecnt=Degreesave-stepsave;

	for(stepcnt=0;stepcnt<savecnt;stepcnt++)
	{
		StepRun(StepDir,Speednum);
	}
}


main()
{
	xdata word cnt;

	Initial();
	InitialUART();
	ReadBlock();


  Run_Mode=1;
	Stop_Mode=1;
	Speed_Mode=1;
  
  stepsave=0;
  Degreesave=0;

  printf("Program beginning.....\n");
	printf("Diretion:%d\n",Stepblock.Diretion);
	printf("RunStep:%d\n",Stepblock.RunStep);
	printf("Market:%d\n",Stepblock.Market);
	printf("EndFlag:%d\n",Stepblock.EndFlag);
	cnt=Stepblock.RunStep;

	while(1)
	{	
		if(!Run_Mode)
		{
			Runflag=1;
			if(!Speed_Mode)
			{
				Stepblock.Diretion=FordRun;
				MotorTurn(FordRun,LowSpeed,RunDegree);		//正轉
				Delay1MS(200);
				Stepblock.Diretion=BackRun;
				MotorTurn(BackRun,LowSpeed,RunDegree);		//反轉
				MotorRst();
				ReturnSet();
			}
			else
			{
				Stepblock.Diretion=FordRun;
				MotorTurn(FordRun,HighSpeed,RunDegree);		//正轉
				Delay1MS(200);
				Stepblock.Diretion=BackRun;
				MotorTurn(BackRun,HighSpeed,RunDegree);		//反轉
				MotorRst();
				ReturnSet();
			}
		}
		else
		{
			MotorSet();
		}
	}
}

void Timer0(void) reentrant  interrupt 1
{
		TH0=Timer_H;
		TL0=Timer_L;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品三级电影| 日韩一区二区免费在线电影| 精品一区二区三区在线视频| 婷婷综合在线观看| 亚洲国产综合在线| 图片区小说区区亚洲影院| 亚洲福中文字幕伊人影院| 亚洲天堂av老司机| 亚洲最大成人综合| 午夜精品久久久久| 久久国产精品99久久久久久老狼 | 国产日韩欧美精品一区| 久久这里只有精品首页| 久久久99精品免费观看| 国产精品毛片久久久久久| 亚洲色图在线播放| 亚洲午夜激情网站| 精品一区二区三区在线观看| 国产激情一区二区三区四区| 国产不卡视频一区| 色婷婷综合久久久久中文| 精品视频一区二区不卡| 欧美变态tickle挠乳网站| 久久久久久久久久看片| 中文字幕一区二区不卡| 亚洲午夜久久久久中文字幕久| 天涯成人国产亚洲精品一区av| 极品少妇xxxx精品少妇| 99久久免费精品高清特色大片| 欧美在线观看视频一区二区三区 | 麻豆一区二区99久久久久| 国产在线日韩欧美| 色狠狠色噜噜噜综合网| 欧美一卡2卡三卡4卡5免费| 国产欧美精品日韩区二区麻豆天美| 亚洲日本在线a| 久久99国产乱子伦精品免费| 成人的网站免费观看| 欧美一区国产二区| 亚洲天堂网中文字| 国内精品视频666| 欧美午夜不卡在线观看免费| 久久久久88色偷偷免费| 亚洲成在线观看| 国产精品综合一区二区三区| 欧美色偷偷大香| 国产精品免费视频一区| 奇米777欧美一区二区| 成人精品免费网站| 日韩精品一区二区三区swag| 一二三四社区欧美黄| 大美女一区二区三区| 91精品国产色综合久久久蜜香臀| 国产精品国产三级国产普通话99 | 国精品**一区二区三区在线蜜桃| 成人免费看的视频| 精品少妇一区二区三区| 亚洲sss视频在线视频| 91污在线观看| 国产精品天天摸av网| 国产在线一区观看| 日韩一级片在线观看| 亚洲伊人伊色伊影伊综合网| www.欧美色图| 国产色产综合色产在线视频| 久久国产综合精品| 日韩一区二区高清| 视频一区国产视频| 欧美影院精品一区| 夜夜亚洲天天久久| 色香蕉久久蜜桃| 自拍偷拍欧美激情| 91麻豆精东视频| 亚洲私人黄色宅男| 91女厕偷拍女厕偷拍高清| 中文字幕电影一区| www.久久久久久久久| 国产精品伦一区| 99精品视频在线免费观看| 亚洲国产高清不卡| 99在线视频精品| 亚洲另类春色国产| 在线区一区二视频| 亚洲国产一区视频| 制服丝袜中文字幕亚洲| 裸体歌舞表演一区二区| 精品久久人人做人人爱| 国产高清不卡二三区| 国产精品日产欧美久久久久| 99久久99久久精品免费看蜜桃| 亚洲视频狠狠干| 欧美日韩dvd在线观看| 美女一区二区三区在线观看| 久久中文娱乐网| 91麻豆精品秘密| 青青草精品视频| 欧美国产丝袜视频| 欧美色窝79yyyycom| 蜜桃一区二区三区在线| 欧美激情一区三区| 91久久精品国产91性色tv| 日本美女一区二区三区| 国产日韩亚洲欧美综合| 在线视频一区二区免费| 麻豆传媒一区二区三区| 中文字幕不卡在线播放| 99热这里都是精品| 亚洲成人精品在线观看| 久久综合久久鬼色| 在线一区二区三区四区五区| 伦理电影国产精品| **欧美大码日韩| 日韩美一区二区三区| 99视频在线观看一区三区| 爽爽淫人综合网网站| 中文字幕国产精品一区二区| 欧美三级资源在线| 成人精品一区二区三区中文字幕| 香蕉成人啪国产精品视频综合网| 久久久久久久综合色一本| 欧美视频精品在线观看| 成人少妇影院yyyy| 免费在线观看视频一区| 一区二区高清在线| 中文字幕第一区| 欧美一区二区三区四区五区 | 国产精品久久久久久久久果冻传媒| 91免费版在线看| 国产乱码精品1区2区3区| 一区二区三区毛片| 国产精品九色蝌蚪自拍| 精品99久久久久久| 91精品欧美福利在线观看| 91色综合久久久久婷婷| 成人免费福利片| 国产呦萝稀缺另类资源| 青青青伊人色综合久久| 亚洲成人在线免费| 一区二区三区成人在线视频| 国产精品久久久久影院亚瑟| 精品国偷自产国产一区| 欧美一级日韩不卡播放免费| 欧美亚洲动漫另类| 欧美性猛交xxxx乱大交退制版 | 欧美日韩五月天| 91亚洲精品乱码久久久久久蜜桃| 国产精品69毛片高清亚洲| 美女网站在线免费欧美精品| 麻豆91在线观看| 日本中文字幕不卡| 日本中文在线一区| 免费观看在线综合| 七七婷婷婷婷精品国产| 蜜桃91丨九色丨蝌蚪91桃色| 日韩电影免费一区| 久久99久久久久久久久久久| 看电视剧不卡顿的网站| 美女视频黄久久| 国产一区三区三区| 国产一区日韩二区欧美三区| 国产一区二区三区黄视频| 国产另类ts人妖一区二区| 国产剧情一区二区| av在线这里只有精品| 色综合久久综合网欧美综合网 | 性做久久久久久久免费看| 亚洲影院久久精品| 日韩高清不卡一区二区| 青青草成人在线观看| 久久精品国产亚洲5555| 国产精品中文字幕欧美| 成人久久视频在线观看| 99re热视频这里只精品| 在线精品视频一区二区| 91精选在线观看| 久久精品夜色噜噜亚洲aⅴ| 国产女人水真多18毛片18精品视频 | 国产精品久久久久影院亚瑟| 亚洲精品少妇30p| 日韩国产精品久久| 国产宾馆实践打屁股91| 精品日本一线二线三线不卡| 国产亚洲福利社区一区| 一区二区三区不卡视频在线观看| 五月综合激情网| 国产精品自拍一区| 欧美在线观看一区| 久久久久久久av麻豆果冻| 亚洲免费在线播放| 另类小说综合欧美亚洲| 99re亚洲国产精品| 日韩欧美国产成人一区二区| 国产精品国产三级国产普通话蜜臀 | 色婷婷亚洲精品| 日韩一区二区三区在线观看| 国产精品不卡视频| 精品一区二区免费看| 欧美亚洲一区三区| 国产欧美日韩精品在线| 日韩综合小视频|