错误实在太多,逐一改正,但还是无法猜actual_value这个没有声明的变量。楼主自己定义后就能通过编译,但不能确定程序能够正常运行。
- #include "reg51.h"
- #include "math.h"
- #include "string.h"
- sbit moto1=P1^0;
- sbit moto2=P1^1;
- sbit ENA=P1^2;
- sbit plus=P1^3;
- sbit minus=P1^4; //加减速
- sbit LSA=P0^0;
- sbit LSB=P0^1;
- sbit LSC=P0^2; //数码管显示
- int a=0,b=0,c=0,d=0;
- float real_speed,final_speed=150,offset,offset_1; //从左到右为实际速度,期望速度,速度差值
- float uk=0,uk1=0,uks=0; //电压
- float kp=5,ki=1.5,kd=0.9; //比例积分微分常数(后两个应该是用不到的,但还是写了)
- unsigned char code NUM[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管数值显示
- unsigned short int z,duty,pulse=0;
- void delay(unsigned short int z) //程序运行前延时
- {
- while(z--);
- }
- void timerset() //定时器计时器初值设置
- {
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;
- TH1=(65536-100)/256;
- TL1=(65536-100)%256;
- TMOD=0x11;
- EA=1;
- ET0=1;
- TR0=1;
- ET1=1;
- TR1=1;
- IT0=1;
- EX0=1;
- }
- void ASR()
- {
- offset=final_speed-real_speed;
- uk=uk1+kp*(offset-offset_1)+ki*offset;
- if(uk>=250)
- uk=250;
- if(uk<=0)
- uk=0;
- offset_1=offset;
- uk1=uk;
- }
- void Timer0()interrupt 1
- {
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;
- a++;
- if(a==10)
- {
- TR0=0;
- EX0=0;
- real_speed = 600.0*pulse/260.0;
- ASR();
- pulse = 0;
- a=0;
- TR0=1;
- EX0=1;
- }
- }
- void Timer1()interrupt 3
- {
- TH1=(65536-100)/256;
- TL1=(65536-100)%256;
- if(b < duty)
- {
- ENA=1;
- }
- else
- {
- ENA=0;
- }
- b++;
- if(b>=100)
- {
- b=0;
- }
- }
- void Outcome() interrupt 0
- {
- pulse++;
- }
- void change_speed()
- {
- if(plus==0)
- {
- delay(5000);
- if(plus==0)
- {
- while(plus==0);
- final_speed=final_speed+10;
- if(final_speed>=230)
- {
- final_speed = 230;
- }
- }
- }
- if(minus==0)
- {
- delay(5000);
- if(minus==0)
- {
- while(minus==0);
- final_speed= final_speed-10;
- if(final_speed<=0)
- {
- final_speed=0;
- }
- }
- }
- }
- void display()
- {
- unsigned char i,qian,bai,shi,ge;
- qian = (unsigned char)actual_value %10000/1000;
- bai = (unsigned char)actual_value %1000/100;
- shi = (unsigned char)actual_value %100/10;
- ge = (unsigned char)actual_value %10;
- for(i=0;i<4;i++)
- {
- switch(i)
- {
- case(0):
- LSA=0;LSB=0;LSC=0;P2=NUM[qian];break;
- case(1):
- LSA=1;LSB=0;LSC=0;P2=NUM[bai];break;
- case(2):
- LSA=0;LSB=1;LSC=0;P2=NUM[shi];break;
- case(3):
- LSA=1;LSB=1;LSC=0;P2=NUM[ge];break;
- }
- delay(100);
- P2=0x00;
- }
- }
- void main()
- {
- ENA=1;
- moto1=1;
- moto2=0;
- timerset();
- while(1)
- {
- change_speed();
- display();
- }
- }
复制代码
|