一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3414|回复: 3

[其他综合] 求助:测速表程序的编译问题

[复制链接]
发表于 2012-3-4 10:37 | 显示全部楼层 |阅读模式
准备山寨磁动力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();   //延时
   
   
   }
  
}
发表于 2012-3-4 11:53 | 显示全部楼层
本帖最后由 199003326 于 2012-3-4 14:15 编辑

disbuf=0;

数组怎么能等于0呢?

看意思应该是写成“disbuf=0;”吧?
回复

使用道具 举报

发表于 2012-3-4 12:04 | 显示全部楼层
disbuf[i]=0;
回复

使用道具 举报

 楼主| 发表于 2012-3-4 12:16 | 显示全部楼层
disbuf=0;
apple88888 发表于 2012-3-4 12:04 https://www.yleee.com.cn/images/common/back.gif

谢谢apple8888,改成disbuf=0能通过编译,包括后边几个disbuf语句,等晚上做块板子试试。
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-4 20:17 , Processed in 0.031678 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表