找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2280|回复: 13
收起左侧

新人求助,这个程序有五十多个错误,怎么搞?

[复制链接]
ID:162665 发表于 2017-1-21 22:11 | 显示全部楼层 |阅读模式
题目是要求数码管显示60秒,然后熄灭。然后LED从左往右循环点亮。然而我搞了好久都没搞定。。。。  

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char;
#define uint unsigned int;
sbit LED = P1;
sbit we = P2^7;
sbit du = P2^6;
uchar ledflow = 0x7f;
uchar a,b,ge,shi;
unsigned  char sum[]={
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄灭
                0x00  //自定义
                }
void main()
{
   void delay(uint z);
   void display(uchar i);
   TMOD = 0x10;
   TH1 = (65536-46082)/256;
   TL1 = (65536-46082)%256;
   TR1 = 1;
   while(1)
{
   
if(TF1 == 1)
   {
     TF1 = 0;
     TH1 = (65535-11285)/256;
     TL1 = (65535-11285)%256;
     a=a+1;
   }
if(a == 20)
   { a = 0;
   display(b);
   b=b+1;
    }
if(b == 60)
  {
   
     we = 1;
     P0 = 0xff;
     we = 0;    //打开位选,才能打开或关闭数码管
     TR1 = 1;   //关闭定时器     
      P1 = ledflow;
     ledflow=_crol_(ledflow,1);
  }
}
}
void delay(uint z)
{
    uint x,y;
    for(x = z; x > 0; x--)
        for(y = 120; y > 0 ; y--);
}

void display(uchar i)   
{   
     shi = i/10;
     ge = i%10;
   
     P0 = 0xff;
     we = 1;     
     P0 = 0xfd;
     we = 0;

     du = 1;
     P0 = sum[shi];
     du = 0;
     delay (1);

     P0 = 0xff;
     we = 1;
     P0 = 0xfe;
     we = 0;
     
     du = 1;
     P0 = sum[ge];
     du = 0;
     delay(1);
}


回复

使用道具 举报

ID:162691 发表于 2017-1-22 12:14 | 显示全部楼层
有提示的。
首先数组结束后要有“;”
其次定义函数要在main函数的前头,而不是main函数的里头
另外,最大的问题是#define语句(不能有“;”结束)
回复

使用道具 举报

ID:162691 发表于 2017-1-22 12:16 | 显示全部楼层
  void delay(uint z);     void display(uchar i);
回复

使用道具 举报

ID:162691 发表于 2017-1-22 12:35 | 显示全部楼层
#define uchar unsigned char;——最后不能有“;”
回复

使用道具 举报

ID:162691 发表于 2017-1-22 12:36 | 显示全部楼层
  void delay(uint z);     void display(uchar i); 不能放在main函数中定义,应在main函数之前
回复

使用道具 举报

ID:162691 发表于 2017-1-22 12:37 | 显示全部楼层
0x00,  //熄灭                 0x00  //自定义                 }
回复

使用道具 举报

ID:162691 发表于 2017-1-22 12:38 | 显示全部楼层
0x00,  //熄灭                 0x00  //自定义    }——数组定义的最后要加“;”
回复

使用道具 举报

ID:162665 发表于 2017-1-22 15:13 | 显示全部楼层
407871699 发表于 2017-1-22 12:38
0x00,  //熄灭                 0x00  //自定义    }——数组定义的最后要加“;”

数组写长了给忘了 ,谢谢
回复

使用道具 举报

ID:162665 发表于 2017-1-22 15:14 | 显示全部楼层
407871699 发表于 2017-1-22 12:35
#define uchar unsigned char;——最后不能有“;”

记住了 ,宏定义后面不加 “;” 谢谢啦
回复

使用道具 举报

ID:162665 发表于 2017-1-22 15:16 | 显示全部楼层
407871699 发表于 2017-1-22 12:36
void delay(uint z);     void display(uchar i); 不能放在main函数中定义,应在main函数之前

我没有在mian函数中定义函数 , 只是引用(我在void delay 后面加了“;“)。谢谢啦
回复

使用道具 举报

ID:162665 发表于 2017-1-22 15:16 | 显示全部楼层
407871699 发表于 2017-1-22 12:37
0x00,  //熄灭                 0x00  //自定义                 }

已改正 谢谢
回复

使用道具 举报

ID:162718 发表于 2017-1-22 16:55 | 显示全部楼层
不会有那么多错误吧,楼上的已经说啦,有些错误
最好把main函数写在最后,其他函数就可以不要声明了,只有中断函数是可以写在main后面还不要声明的
回复

使用道具 举报

ID:162736 发表于 2017-1-22 17:32 | 显示全部楼层
这么短的程序,50多个错误是肯定没有的,不要被这个数字吓倒了。实际可能就几个错误,然后由这几个引起新的“错误”,所以看过来很多。新人在学习时,纠正错误,一定要记得从第排在最前的错误的开始,把它纠正掉,也许就纠正了一大片。
回复

使用道具 举报

ID:162841 发表于 2017-1-24 22:59 来自手机 | 显示全部楼层
宏定义后面不要分号
回复

使用道具 举报

ID:478073 发表于 2019-3-16 08:01
也不知道是从哪里拷贝出来的代码,标点符号中英文的都没看出来。一上来就想要结果。还是省省吧,好好的再查一下!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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