资源描述:
《直流电机转速测量与控制程序》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、直流电机转速测量与控制程序#include"reg51.h"#include"absacc.h"#defineLEDLen6#defineTick10//10x100us=1msunsignedintC100us;//100us记数单元xdataunsignedcharCS0832_at_0xb000;xdataunsignedcharOUTBIT_at_0x8002;//位控制口xdataunsignedcharOUTSEG_at_0x8004;//段控制口xdataunsignedcharIN_at_0x8001;//键盘读入口unsignedcharLEDBuf[LEDLe
2、n];//显示缓冲codeunsignedcharLEDMAP[]={//八段管显示码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};codeunsignedcharKeyTable[]={//键码定义0x16,0x15,0x14,0xff,0x13,0x12,0x11,0x10,0x0d,0x0c,0x0b,0x0a,0x0e,0x03,0x06,0x09,0x0f,0x02,0x05,0x08,0x00,0x01,0x04,0x07};longintn;unsig
3、nedcharflag;unsignedcharDA;unsignedcharKey_temp;unsignedchark_TEMP[2];voidtime1_int(void);voiddelay(unsignedcharCNT){unsignedchari;while(CNT--!=0)for(i=50;i!=0;i--);}unsignedcharTestKey(){OUTBIT=0;//输出线置为0return(~IN&0x0f);//读入键状态(高四位不用)}unsignedcharGetKey(){unsignedcharPos;unsignedchari;unsig
4、nedchark;i=6;Pos=0x20;//找出键所在列do{OUTBIT=~Pos;Pos>>=1;k=~IN&0x0f;}while((--i!=0)&&(k==0));//键值=列x4+行if(k!=0){i*=4;if(k&2)i+=1;elseif(k&4)i+=2;elseif(k&8)i+=3;OUTBIT=0;dodelay(10);while(TestKey());//等键释放return(KeyTable[i]);//取出键码}elsereturn(0xff);}voidDisplayLED(){unsignedchari;unsignedcharPos;
5、unsignedcharLED;Pos=0x20;//从左边开始显示for(i=0;i>=1;//显示下一位}OUTBIT=0;//关所有八段管}voidtime1_int(void)interrupt3{C100us--;if(C100us==0){C100us=Tick;TR0=0;TR1=0;n=TH0*256+TL0;TH0=0;TL0=0;TH1=255-50;TL1=255-50;flag=1;
6、TR0=1;TR1=1;}}voidmain(){unsignedchari=0;//TMOD=0X05;//T0计数方式C100us=Tick;n=0;TMOD=0X15;TH0=0;TL0=0;TH1=255-50;//定时100USTL1=255-50;ET1=1;//开中断EA=1;while(1){if(TestKey()){Key_temp=GetKey()&0x0f;LEDBuf[i]=LEDMAP[Key_temp];k_TEMP[i]=Key_temp;i++;if(i==2){i=0;break;}}}Key_temp=k_TEMP[0]*10+k_TEMP[
7、1];DA=0x2f;CS0832=DA;TR0=1;TR1=1;while(1){while(flag){LEDBuf[4]=LEDMAP[n/10];LEDBuf[5]=LEDMAP[n%10];if(n>Key_temp){DA--;CS0832=DA;}if(n