您好,欢迎光临本网站![请登录][注册会员]  
文件名称: laoshidianji
  所属分类: C/C++
  开发工具:
  文件大小: 4kb
  下载次数: 0
  上传时间: 2014-04-12
  提 供 者: u0146*****
 详细说明: /////将键盘改到了PC口, ///在程序开始时,设定速度值,此时通强电,按下确认键(BAK),进入循环控制程序 ///在调速过程中可以改变给定值,不用按确认键。 #include #include #include #include #define uchar unsigned char #define uint unsigned int ////////////////////////////// #define LEDA XBYTE[0xdcff] #define LEDB XBYTE[0xddff] #define PORTC XBYTE[0xdeff] #define PORTCON XBYTE[0xdfff] ////////////////////////////// sbit LE=P3^3; sbit pwm_out=P1^6; sbit dir=P1^7; //////////////////////// uint pwm_h,pwm_l; static uint u_h;//占空比% st atic uint set_n; //设定的转速 static uint sn; //////////////////////// uint at=0; uchar ct=0; uchar cn=0; //at时间累积次数,cn脉冲次数 uchar temp; //////////////////////// static signed int e1,e0; static signed int dif_u_h; //占空比变化值 //////////////////////// void pwm(); void count_timer(); void counter(); void display();//显示 void pid(); void msec(unsigned int x) /*延时单位毫秒 */ {unsigned int j; while(x--){ for(j=0;j<150;j++) {;} } } void main() { _nop_(); _nop_(); pwm_out=0; msec(400); ///////////////// cn=0; at=0; set_n=0; sn=0; e0=0; e1=0; _nop_(); //////////////// dir=1; u_h=0; pwm_h=u_h; pwm_l=500-u_h; //////////////// TMOD=0x12; TH0=0xd8; TL0=0xd8; TH1=0xfc; TL1=0x18; IT0=1; //INT0下降沿触发 EA=1; ET0=1; ET1=1; EX0=1; TR1=1; TR0=1; PT0=1; PORTCON=0x89; //写8255控制字 while(1) { temp=PORTC; msec(10); temp=temp&0x7f; _nop_(); if(temp!=0x7f) { _nop_(); if(temp==0x7e)set_n=250; if(temp==0x7d)set_n=500; if(temp==0x7b)set_n=750; if(temp==0x77)set_n=1000; if(temp==0x2f)dir=1; if(temp==0x1f)dir=0; if(temp==0x3f) break; } } u_h=(set_n+60)/11.8; while(1){ temp=PORTC; msec(10); temp=temp&0x7f; _nop_(); if(temp!=0x7f) { _nop_(); if(temp==0x7e)set_n=250; if(temp==0x7d)set_n=500; if(temp==0x7b)set_n=750; if(temp==0x77)set_n=1000; if(temp==0x2f)dir=1; if(temp==0x1f)dir=0; } if(at>5000) { sn=0; display(); } // display(); _nop_(); _nop_( ); if(ct>=80) { if(set_n!=0)pid(); ct=0; } _nop_( ); } } void pwm() interrupt 1 using 2 // 40us { _nop_(); if(pwm_h==0) {pwm_out=0; pwm_l=pwm_l-1; if(pwm_l==0) {pwm_h=u_h; pwm_l=500-u_h; } } else { pwm_out=1; pwm_h=pwm_h-1;} } void count_timer() interrupt 3 using 3 // 1ms { at=at+1; ct=ct+1; TH1=0xfc; TL1=0x18; TR1=1; } void pid() { e1=set_n-sn; dif_u_h=0.46*(e1-e0)+0.04*e1; u_h=u_h+dif_u_h; e0=e1; if(u_h>499)u_h=499; } void counter() interrupt 0 using 1 { uchar ch_cn; cn=cn+1; if(sn<300)ch_cn=4; if((300<=sn)&&(sn<600))ch_cn=6; if(600<=sn)ch_cn=12; if(cn==ch_cn) { sn=ch_cn*5000/at; cn=0; at=0; display(); } } void display() { uchar bdata a,b=0; uchar bdata num,ten,hun,tho=0; tho=sn/1000; //BCD运算 hun=(sn00)/100; ten=(sn0)/10; num=sn; a=ten*16+num; b=tho*16+hun; if(a==0&&b==0) //灭零 {a=0xf0;b=~b;} if((0
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: dianji
 输入关键字,在本站1000多万海量源码库中尽情搜索: