钻石会员 
 
主题
回帖0
积分13727
阅读权限50
注册时间2009-5-6
最后登录1970-1-1
在线时间 小时
 
 
 
 
 | 
 
准备山寨磁动力jun66大虾做的5位测速表,可编译的时候在for(i=0;i<5;i++) disbuf=0;行出现错误 C213: left side of asn-op not an lvalue 
不太懂单片机,请教诸位如何解决,谢谢! 
  
源程序如下: 
#include <AT892051.H> 
#include <math.h> 
#define uchar unsigned char 
#define uint unsigned int   
bit FLAG=0;  
uchar code seg[]={0x42,0xEE,0x54,0x64,0xE8,0x61,0x41,0xE6,0x40,0x60};  //0,1,2,3,4,5,6,7,8,9, 
uchar disbuf[]={0,0,0,0,0}; 
sbit led1=P3^5; 
sbit led2=P3^3; 
sbit led3=P3^2; 
sbit led4=P3^1; 
sbit led5=P3^0; 
uint discount=0; 
uint timecount=0;//定时的次数 
uint x; 
 
void delay(void){   
unsigned char i=10; 
while(i--); 
} 
void t1_serv() interrupt 3 
{  
  TH1=236;//(65536-tm)/256;uint tm=5000;//5000 wei dingshide shijian 
  TL1=120;//(65536-tm)%256;  244/72/304 
  timecount ++;  //200 次为1秒计数  600则相对于3秒钟的计数,那么测1min时则要乘以20 
    if(timecount==600)  
     {  
   FLAG=1; 
   TR0=0;    //关闭定时器 
   timecount=0; 
  }    
}     
void main() 
{  
    
   uint i=0; 
   TMOD=0x15; 
   TH0=0; 
   TL0=0; 
   TH1=244;//(65536-tm)/256; 
   TL1=72;//(65536-tm)%256; 
   TR0=1; 
   TR1=1; 
   ET0=1; 
   ET1=1; 
   EA=1; 
   while(1) 
  {  
   if(FLAG==1) 
    {  
   FLAG=0; 
   x=TH0<<8|TL0; 
   x=x*20;   //对应上面定时器的值 
   /******** 数据修正,由于晶振的偏差,所以需要更精准的转速需要在这里进行数据修正 
   比如在我测试的时候晶振是12.031416M,那么他的偏差就是1500转/min时少1,那么我就在 
   下面进行加1处理,加600是因为考虑到4舍5入的道理,比如当测到1400转时很接近1500了 
   那么应该加1的,但1400/1500是为0没有起到修正的作用,所以1500×60%=900时可以考虑 
   加1,那么数据需要加600刚好达到1500.所以加600的4舍5入值。见下修正值。其他晶振值 
   时可以通过类似方法进行修正。 
   ****************/ 
   x=x+(x+600)/1500 ;// 数据修正 
    for(i=0;i<5;i++) disbuf=0; 
     i=0;   
    while(x/10)      /*数字逐个赋值给数组*/ 
  {  
    disbuf=x%10; 
    x=x/10; 
    i++; 
   }            /*    */ 
    disbuf=x; 
    TH0=0; 
       TL0=0; 
    TR0=1; 
       
     } 
    led1=0;   
P1=seg[disbuf[0]]; 
led5=1;   
delay();   //延时 
    led5=0;   
    P1=seg[disbuf[1]]; 
    led4=1; 
delay();   //延时 
    led4=0;    
    P1=seg[disbuf[2]]; 
    led3=1;  
delay();   //延时 
    led3=0;  
    P1=seg[disbuf[3]]; 
    led2=1;  
delay();   //延时 
    led2=0;  
    P1=seg[disbuf[4]]; 
    led1=1;  
delay();   //延时 
     
     
   } 
   
} |   
 
 
 
 |