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

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

?? 電機無級調制控制系統.cpp

?? 關于8279的中文資料 要用到這個芯片的朋友們肯定用得著
?? CPP
字號:
/*  電機無級調速控制系統   */
#include <stdio.h>
#include <conio.h>
#include "ApiEx.h"
#pragma comment(lib,"ApiEx.lib")

#define	ioport	0x2b0		//8279 數據口
#define	ioport1	0x2b1		//8279 控制口
#define	time	0x280		//8253 定時器0口地址
#define	time1	0x281		//8253 定時器1口地址
#define	timec	0x283		//8253 控制口地址
int k;
int disled[6]={0x00,0x00,0x00,0x00,0x00,0x00};//led從右到左顯示,最左顯示功能鍵
int realkey[4]={0x00,0x00,0x00,0x00};//得到真實的按鍵值
int led[] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,
		0x39,0x5E,0x79,0x71,0x80,0x40};//0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,g,m,P,r,w,x,y,.,-
int table[]={0x1b,0x13,0x0b,0x03,0x1a,0x12,0x0a,0x02,0x19,0x11,0x09,0x01,0x18,0x10,0x08,0x00};
int keyin=0;
void key();		//鍵盤顯示
void disp();	//顯示
void int_proc();	//中斷處理程序
void motorstart();//啟動電機
void measurespeed();//測量轉速
void pidadapt();//PID調速
int funkey=0;//0表示是功能鍵,1表示數字鍵
int datakey=0;//表示之前未按功能鍵,1表示按下了功能鍵
int keydatanum=0;//表示按下數字鍵的個數
int keycdown=0;//表示按下了E鍵
int keyedown=0;//表示按下了C鍵
int keyadaptspeed=0xff;
int getspeed=0;//測得的轉速
int j=0;
int jj=0;
int d=0;//存放給定的速度換算成高電平持續時間
int saved=0;
int  keysave=0;//保存初始轉速的鍵值
BYTE  data;//存放按鍵值
BYTE data1=0x00;//存計數的低8位
BYTE data2=0x00;//存計數的高8位
int count=0;//得到定時器2的當前計數值
int count1=0;//測到的轉速值
int mspeed[2]={0x00,0x00};
void main()
{
	printf("--------------------EXP29_21_SYB---------------------\n");
	printf("Press any key to begin!\n\n");
	getch();
	printf("Press small keybord:\n");
	printf("A--please input the given speed;\n");
	printf("B--STOP MOTOR \n");
	printf("c--start the motor according the given speed;\n");
	printf("F--EXIT\n");
	if(!Startup())		/*打開設備*/
	{
		printf("ERROR: Open Device Error!\n");
		return;
	}
	PortWriteByte(ioport1,0xd3);	//8279 清零
	PortWriteByte(ioport1,0x40);	//讀FIFO存儲器命令
	PortWriteByte(ioport1,0x00);	//置鍵盤顯示模式
	PortWriteByte(ioport1,0x80);	//寫顯示緩沖區命令
	PortWriteByte(0x283,0x36);		//設置8253工作方式,定時器0工作方式3
    PortWriteByte(0x280,0x50);		//設置定時器0的初始計數值50000,低位為50
    PortWriteByte(0x280,0xc3);		//設置定時器0的初始計數值50000,高位為c3產生50ms的脈沖
    PortWriteByte(0x283,0xb0);		//設置8253工作方式,定時器2工作方式0,(計脈沖的個數)
	PortWriteByte(0x282,0xff);		//設置定時器2的初始計數值ffff,低位為ff
	PortWriteByte(0x282,0xff);		//設置定時器2的初始計數值ffff,高位為ff
    PortWriteByte(0x28b,0x81);		//設置8255工作方式,C口低四位輸入, C口高四位輸出,A口輸入,B口輸入
	PortWriteByte(0x283,0x50);		//設置8253工作方式,定時器1工作方式0
	PortWriteByte(0x281,0x0a);		//設置定時器1的初始計數值20,低位為14,定時1s 
    RegisterLocalISR(int_proc);		/*注冊中斷程序*/
EnableIntr();		/*開中斷*/
	do{
   	key();		//調鍵盤顯示子程序

if(keyin==0x0a)		//是否'a'命令,啟動輸入電機起始值
		{
			disled[5]=led[0x0a];//顯示鍵A
			for(jj=0;jj<4;jj++)//清真實的數字鍵值
			{ realkey[jj]=0;	}	
            disled[0]=led[0];//顯示給定值為00
            disled[1]=led[0];
            disled[2]=led[0];//顯示測速值為00
            disled[3]=led[0];
			funkey=0;//表示按下了功能鍵    
			keycdown=0;//表示沒有按下功能鍵E  
		    keyedown=0;//表示沒有按下功能鍵C        
			datakey=1;//表示當前按下A功能鍵
			mspeed[0]=0;//測定的速度顯示為00
			mspeed[1]=0;
	        d=0;//給定的脈寬值為0
		}

		
else if(keyin==0x0b)		//是否'b' 命令,停止電機
		{
			disled[5]=led[0x0b];//顯示鍵B
            disled[0]=led[0];//顯示給定值為00
            disled[1]=led[0];
            disled[2]=led[0];//顯示測速值為00
            disled[3]=led[0];
	        disled[4]=0x00;
			for(jj=0;jj<4;jj++)
			{
               realkey[jj]=0;
			}
			mspeed[0]=0;//測定的速度顯示為00
			mspeed[1]=0;
			funkey=0;//表示按下了功能鍵		         
			keycdown=0;//表示沒有按下功能鍵E  
		    keyedown=0;//表示沒有按下功能鍵C    			    
		    datakey=0;//表示當前沒按下A功能鍵
	        d=0;//給定的脈寬值為0
			keydatanum=0; //計錄的按下數字鍵值為0個           
			PortWriteByte(0x290,0x80);	/*D/A 輸出*/
		}

else if(keyin==0x0c)	//是否'c' 命令,按照a給定的值使電機轉動
		{	
			d=realkey[0]+realkey[1]*10;
   	        disled[5]=led[0x0e];
            disled[0]=led[realkey[0]];//顯示給定值
            disled[1]=led[realkey[1]];
            disled[2]=led[0];//顯示測速值為0
            disled[3]=led[0];
	        disled[4]=0x00;
			mspeed[0]=0;//測定的速度顯示為00
			mspeed[1]=0;
			funkey=0;//表示按下了功能鍵           
			keycdown=1;//表示沒有按下功能鍵C  
		    keyedown=0;//表示按下功能鍵E  
        	keydatanum=0; //計錄的按下數字鍵值為0個 	
	        disled[2]=led[mspeed[0]];//顯示測速值的低位
	        disled[3]=led[mspeed[1]];//顯示測速值的高位
	
	}
		else //按下的是數字鍵
		{
			mspeed[0]=0;//測定的速度顯示為00
			mspeed[1]=0;
			if ((datakey==1)&&(keycdown==0))//如果按下了A鍵之后,可以繼續按數字鍵,此時輸入的是給定的轉速值
		   {
	        
			 keycdown=0;//表示沒有按下功能鍵C 
		     keyedown=0;//表示按下功能鍵E  
	          d=0;//給定的脈寬值為0              
			  keysave=keyin;
			  keydatanum++;
			  realkey[keydatanum-1]=keyin;
              disled[keydatanum-1]=led[keysave];
              disled[2]=led[0];
              disled[3]=led[0];
              disled[4]=0x00;
		
		   }
		}
	}

while(!(keyin==0x0f));		//'f'命令,退出程序
	d=0;
    PortWriteByte(0x290,0x80);	/*D/A 輸出*/
	PortWriteByte(ioport1,0xd1);		//清顯示
    DisableIntr();	/*關中斷*/
	Cleanup();		/*關閉設備*/ 

}

void key()
{ 
	PortWriteByte(ioport1,0xd1);		//清顯示
    PortWriteByte(0x290,0x80);	/*D/A 輸出*/
	Sleep(100);
	do{
		disp();		//調顯示子程序
		if(keycdown==1)//C鍵
		{
           motorstart();//電機開始轉動
          
		   if(keyedown==1)//如果進入調速函數
		   {
                pidadapt();            
			
		   }
		}

		PortReadByte(ioport1,&data);
	}
	while(!(data&0x07));

	PortReadByte(ioport,&data);		//讀狀態
	keyin = data & 0x07;
	data = data & 0x3f;
    for(k=0;k<16;k++)
	{
		if(data==table[k])
			keyin=k;
	}
}
//數碼管顯示,最高位(最左)顯示當前功能鍵,最右兩位顯示給定值,第三、四位顯示測速值
//由void key()函數調用
void disp()
{
	PortWriteByte(ioport1,0x90);
	Sleep(100);
	PortWriteByte(ioport,disled[0]);
	PortWriteByte(ioport,disled[1]);
	PortWriteByte(ioport,disled[2]);
	PortWriteByte(ioport,disled[3]);
	PortWriteByte(ioport,disled[4]);
	PortWriteByte(ioport,disled[5]);
}
//中斷處理程序,定時1s,由void measurespeed()進入
void int_proc()
{        
	         getspeed=0;
	         data1=0x00;//存計數的低8位
             data2=0x00;//存計數的高8位
             count=0;//得到定時器2的當前計數值
             count1=0;//測到的轉速值
             PortReadByte(0x282,&data1);     //讀入計數器的低8位
             PortReadByte(0x282,&data2);     //讀入計數器的高8位
             count=data2*256+data1;
             count1=(65535-count)*2/6;         //得到轉速  
             getspeed=count1;
			 printf("getspeed=%d\n",getspeed);
             mspeed[0]=getspeed%10;//得到測到的轉速的低位
             mspeed[1]=getspeed/10;//得到測到的轉速的高位
		     disled[2]=led[mspeed[0]];//顯示測速值的低位
             disled[3]=led[mspeed[1]];//顯示測速值的高位
	         PortWriteByte(0x283,0x50);		//設置8253工作方式,定時器1工作方式0
	         PortWriteByte(0x281,0x0a);		//設置定時器1的初始計數值200,低位為c8,定時1s
    	     PortWriteByte(0x283,0xb0);		//設置8253工作方式,定時器2工作方式0,(計脈沖的個數)
	         PortWriteByte(0x282,0xff);		//設置定時器2的初始計數值ffff,低位為ff
	         PortWriteByte(0x282,0xff);		//設置定時器2的初始計數值ffff,高位為ff
             PortWriteByte(0x28b,0x0f);     //初始狀態時,PC7,393清零端置1,
             PortWriteByte(0x28b,0x0c);    //初始狀態時,PC6,393計數端置0,

}
//電機轉動函數模塊,由void key()調用
void motorstart()
{
   
   int pulse=0;
   pulse=d*128/48;
	if(pulse>128)
	{
	  PortWriteByte(0x290,0xff);	/*D/A 輸出*/
	}
	else
	{
		pulse=0x80+pulse;
	    PortWriteByte(0x290,pulse);	/*D/A 輸出*/
	}
}
//測量電機的轉速,由void key()調用
void measurespeed()
{  
}
//pid調速算法
void pidadapt()
{  
 int R=0;int es=0;int es1=0;int es2=0;
int es3=0;int es4=0;int es5=0;int es6=0;int es7=0;
int es8=0;int es9=0;int es10=0;int ies=0;int des=0;
int M=0;
int e1=0;  int S=0;
         es10=es9;        //(以下是PID控制算法)
			es9=es8;
			es8=es7;
			es7=es6;
    		es6=es5;  
			es5=es4;  
			es4=es3;
			es3=es2;
			es2=es1;
			es1=es;
			es=R-getspeed;
			ies=1*(es+es1+es2+es3+es4+es5+es6+es7+es8+es9+es10);
			des=es1-es2;
			M=int (es+0.1*des+0.0001*ies);
        motorstart();//電機開始轉動
        e1=e1+M;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费观看在线视频| 欧美日韩成人在线一区| 精品国产91久久久久久久妲己| 天天影视涩香欲综合网| 欧美日韩精品欧美日韩精品一综合| 成人深夜视频在线观看| 亚洲精品老司机| 欧美日产在线观看| 欧美影片第一页| 极品美女销魂一区二区三区免费| 欧美本精品男人aⅴ天堂| 成人高清av在线| 一区二区三区在线播放| 这里只有精品视频在线观看| 日韩av网站在线观看| 国产精品视频麻豆| 欧美日韩国产综合一区二区三区 | 欧美激情在线看| 欧美日韩美少妇| 日韩欧美成人激情| 在线观看不卡视频| 国产成人av自拍| 亚洲国产精品天堂| 国产日产欧美一区| 欧美成人精品高清在线播放| 国产欧美中文在线| 一区二区三区自拍| 久久福利视频一区二区| 性欧美疯狂xxxxbbbb| 亚洲激情自拍视频| 蜜乳av一区二区三区| 亚洲高清免费观看| 国产成人免费在线观看| 欧美亚洲日本国产| 久久久久久夜精品精品免费| 这里是久久伊人| 国产丝袜在线精品| 中文字幕精品在线不卡| 香蕉久久一区二区不卡无毒影院| 精品亚洲porn| 欧洲av在线精品| 久久色在线观看| 精品久久久久久无| 亚洲综合在线免费观看| 欧美极品另类videosde| 天堂av在线一区| 天天操天天色综合| 99国产精品视频免费观看| 懂色av中文字幕一区二区三区| 黑人巨大精品欧美一区| 久久精品国产在热久久| 色狠狠一区二区三区香蕉| 日本道色综合久久| 国产精品剧情在线亚洲| 国产精品国产精品国产专区不片| 日本成人在线电影网| 欧美性高清videossexo| 成人免费视频在线观看| 亚洲一卡二卡三卡四卡无卡久久| 国产高清成人在线| 精品免费视频.| 日韩国产精品久久久| 欧美日韩一区二区三区视频| 制服丝袜亚洲网站| 亚洲图片一区二区| 色噜噜狠狠成人网p站| 国产精品免费观看视频| 国产成人精品影视| 精品处破学生在线二十三| 激情综合五月天| 日韩欧美电影在线| 麻豆国产精品视频| 久久综合九色综合97婷婷女人| 亚洲国产va精品久久久不卡综合| 一本一道波多野结衣一区二区| 欧美乱妇15p| ww亚洲ww在线观看国产| 精品一区二区日韩| 久久久噜噜噜久久人人看| 国内精品国产成人国产三级粉色| 精品欧美一区二区三区精品久久| 捆绑变态av一区二区三区| 欧美电影免费观看高清完整版| 久久成人18免费观看| 国产欧美日本一区二区三区| 国产精品资源在线| 欧美日韩国产123区| 日本va欧美va瓶| 91精品办公室少妇高潮对白| 一区二区三区久久| 9191久久久久久久久久久| 激情五月婷婷综合| 国产精品久久午夜夜伦鲁鲁| 色94色欧美sute亚洲线路二| 天天综合色天天| 日韩精品一区二区三区在线观看| 国产黄人亚洲片| 亚洲美女偷拍久久| 日韩三级电影网址| 亚洲国产日韩a在线播放性色| 欧美精品色一区二区三区| 久久不见久久见免费视频1| 中文字幕av在线一区二区三区| 99久久综合国产精品| 欧美成人aa大片| k8久久久一区二区三区| 午夜精品久久久久久久99水蜜桃 | 一区二区三区国产豹纹内裤在线| 精品视频一区二区不卡| 国产自产视频一区二区三区| 亚洲色图清纯唯美| 不卡av在线网| 香蕉影视欧美成人| 国产精品传媒在线| 91精品国产乱码| 午夜精品视频一区| 久久久.com| 777午夜精品免费视频| 波多野洁衣一区| 久久国产剧场电影| 亚洲男人天堂av网| 国产欧美日韩在线看| 欧美日韩另类国产亚洲欧美一级| 国产美女一区二区| 国产精品私人影院| 日韩欧美区一区二| 色综合av在线| 毛片一区二区三区| 亚洲欧美视频一区| 国产亚洲欧美在线| 日韩欧美第一区| 欧美日韩一区二区三区不卡| 99国产精品久久久| 国产成人午夜片在线观看高清观看| 五月天丁香久久| 亚洲黄色在线视频| 国产精品麻豆99久久久久久| 欧美成人a∨高清免费观看| 在线播放视频一区| 欧美日韩激情一区| 欧美色图天堂网| 99久久精品久久久久久清纯| 丰满少妇久久久久久久| 国产专区欧美精品| 国产成人免费在线| 国产成人超碰人人澡人人澡| 国产在线播放一区| 黄网站免费久久| 狠狠色伊人亚洲综合成人| 久久精品国产一区二区三区免费看| 日韩av一级电影| 奇米影视7777精品一区二区| 首页欧美精品中文字幕| 日欧美一区二区| 麻豆精品视频在线观看免费| 麻豆精品视频在线观看免费| 免费观看日韩电影| 精品一区二区三区久久| 国产一区二区在线视频| 国产成人精品免费一区二区| 国产白丝精品91爽爽久久| 成人免费看的视频| 色偷偷一区二区三区| 91福利视频久久久久| 欧美日韩国产综合草草| 91精品国产丝袜白色高跟鞋| 欧美成人精品二区三区99精品| 欧美电影免费观看高清完整版| 久久免费看少妇高潮| 椎名由奈av一区二区三区| 一区二区三区四区精品在线视频| 亚洲午夜久久久久久久久久久| 婷婷丁香激情综合| 国产一区亚洲一区| 一本到不卡免费一区二区| 欧美日韩精品系列| 久久网站最新地址| 亚洲人成精品久久久久| 天堂成人国产精品一区| 国产一区二区三区四区五区入口| 国产91丝袜在线播放0| 91啦中文在线观看| 国产成人一区二区精品非洲| 成人福利视频在线看| 欧美区在线观看| 国产精品欧美精品| 亚洲国产精品久久久久秋霞影院| 免费人成黄页网站在线一区二区| 国产成人免费av在线| 欧美日韩亚洲综合在线| 26uuu亚洲| 亚洲一区二区三区影院| 久久99久久久欧美国产| 色欧美乱欧美15图片| 精品少妇一区二区三区| 久久久久久久综合| 日韩一级欧美一级| 国产一二三精品| 亚洲一区二区三区视频在线 | 精品综合久久久久久8888|