钻石会员
主题
回帖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(); //延时
}
} |
|