找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1435|回复: 3
收起左侧

51单片机编译的时候出现一大堆错误?

[复制链接]
ID:656393 发表于 2020-4-4 15:46 | 显示全部楼层 |阅读模式
本帖最后由 liyihang 于 2020-4-4 16:50 编辑

51单片机 麻烦大佬帮忙看看这些问题怎么解决
电路工程文件和源程序在附件里
要实现的功能如下:
密码检测状态:系统启动时,进入密码检测状态,默认显示PA----
                      若正确输入4位密码时,进入学号显示状态
                      若输入密码错误,数码管显示EE----,蜂鸣器在密码错误时发生报警,仍处于密码检测状态
学号显示状态:学号显示nE+学号后四位,一直闪烁直到离开本状态
                      按下按键*,可实现工作状态切换

编译时错误如下图所示:                    
error.png
单片机源程序如下:
  1. #include<reg51.h>

  2. sbit BEEP=P2^3;
  3. sbit DACS=P2^4;
  4. sbit DAWR=P2^5;
  5. sbit DULA=P2^6;
  6. sbit WELA=P2^7;

  7. //共阴数码管段码
  8. unsigned char code segCC[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  9. //共阳数码管段码
  10. unsigned char code segCA[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

  11. //延时函数
  12. void Delay(unsigned int i)
  13. {
  14.         unsigned int j;
  15.         while(i--)
  16.         {
  17.                         for(j=0;j<32;j++);                //延时
  18.         }
  19. }

  20. //3-1、增加状态变量,修改显示函数Display0()
  21. unsigned char segWE6[]={0x01,0x02,0x04,0x08,0x10,0x20};
  22. unsigned char segDU6[]={0x8C,0x88,0xBF,0xBF,0xBF,0xBF};
  23. unsigned char segDU2[]={0xAB,0x86,0xC0,0xF9,0xA4,0xB0};

  24. //关键性变量
  25. unsigned char sysflg; //系统状态变量,0-密码检测,1-密码错误检测,2-学号显示,3-DAC转换
  26. //-----------------------显示密码检测界面-----------------------//
  27. void Display0()
  28. {
  29.         char i;
  30.         for(i=0;i<6;i++)
  31.         {
  32.         DULA=0;WELA=0;
  33.         P0=segWE6[i];WELA=1;WELA=0;
  34.         P0=segDU6[i];DULA=1;DULA=0;
  35.         Delay(5);
  36.         }
  37. }

  38. //按键扫描函数,返回值为对应的按键编码
  39. unsigned char GetKey()
  40. {        unsigned char i,j,k=0,l;
  41.         unsigned char KeyScanCode[]={0xef,0xdf,0xbf,0x7f};                //行列扫描的行列码
  42.         unsigned char KeyCodeTable[]={0xee,0xed,0xeb,0xde,0xdd,0xdb,0xbe,0xbd,0xbb,0x7e,0x7d,0x7b};
  43.         
  44.         P3=0x0f;
  45.         if(P3!=0x0f)                //如果有按键被按下
  46.         {
  47.                 for(i=0;i<4;i++)                //依次进行扫描
  48.                 {
  49.                         P3=KeyScanCode[i];
  50.                         for(j=0;j<3;j++)
  51.                         {
  52.                                 k=i*3+j;                                                //计算对应的按键编码
  53.                                 if(P3==KeyCodeTable[k])
  54.                                 {
  55.                                         l=k+1;                                                        //根据键值调整到对应按键
  56.                                         if(l==11)        l=0;                //按键0,调整键值为0
  57.                                         if(l==12)        l=11;                //按键#,调整键值为11,按键*键值仍为10
  58.                                         return        l;                                        //返回按键编码
  59.                                 }
  60.                         }
  61.                 }
  62.         }
  63.         else
  64.         {
  65.                 return 0xFF;                                        //或者返回0xff
  66.         }
  67. }

  68. void main()
  69. {
  70.         //-----数码管显示部分-----//
  71.         if(sysflg==0)
  72.         {
  73.                 segDU6[0]=0x8C;
  74.                 segDU6[1]=0x88;
  75.                 Display0();
  76.         }
  77.         else if(sysflg==1)
  78.         {
  79.                 segDU6[0]=0x86;
  80.                 segDU6[1]=0x86;
  81.                 Display0();
  82.                 BEEP=0;
  83.                 Delay(5);
  84.                 BEEP=1;
  85.                 Delay(3);
  86.         }
  87.         //-----按键检测部分-----//
  88.         keyA=GetKey();
  89.         if(keyB!=keyA)
  90.         {
  91.                 keyB=keyA;
  92.                 if((keyA>=0) && (keyA<10) && (sysflg<=1))
  93.                 {                                                        }
  94.                 else if(keyA==10)
  95.                 {                                                        }
  96.                 else if(keyA==11)
  97.                 {                                                        }
  98.         }
  99. }

  100.         //存储的密码
  101.   unsigned char code pwd[]={1,2,3,4};
  102.                 if((keyA>=0) && (keyA<10) && ((sysflg<=1))
  103.                 {
  104.                         segDU6[segidx+2]=segCA[keyA];
  105.                         if(keyA!=pwd[segidx])        errflg=1;
  106.                         segidx++;
  107.                         if(segidx==4)
  108.                         {
  109.                                 segidx=0;
  110.                                 if(errflg==1)        sysflg=1;
  111.                                 else if(errflg==1)        sysflg=2;
  112.                                 errflg=0;
  113.                         }
  114.                 }
  115. //-----------------------显示学号界面-----------------------//
  116. void Display2()
  117. {
  118.         char i;
  119.         for(i=0;i<6;i++)
  120.         {
  121.                 DULA=0;WELA=0;
  122.                 P0=segWE6[i];WELA=1;WELA=0;
  123.                 P0=segDU2[i];DULA=1;DULA=0;
  124.                 Delay(5);
  125.         }
  126. }
  127.                 else if(sysflg==2)
  128.                 {
  129.                         if(sysCNT<200)                Display2();
  130.                         else
  131.                         {
  132.                                 DULA=0;WELA=0;
  133.                                 P0=0;WELA=1;WELA=0;
  134.                                 P0=0;DULA=1;DULA=0;
  135.                         }
  136.                 }
  137.                         
  138.                 //====3、延时计数部分====
  139.                 sysCNT++;
  140.                 if(sysCNT==500)        sysCNT=0;
  141.                 Delay(5);
  142.         }
  143. }
复制代码

所有资料51hei提供下载:
单片机.rar (38.91 KB, 下载次数: 8)
电路图.png
回复

使用道具 举报

ID:546770 发表于 2020-4-4 18:28 | 显示全部楼层
帮你修改了语法错误,我的电脑没有安装proteus,逻辑错误就没办法了,你这个应该是网上拷贝的吧,以后尽量自己写或者看书上。

单片机.rar

49.97 KB, 下载次数: 24

回复

使用道具 举报

ID:378116 发表于 2020-4-4 17:03 | 显示全部楼层
点击错误行,即可看到错误是什么
回复

使用道具 举报

ID:367369 发表于 2020-4-4 19:24 | 显示全部楼层
哪里抄的代码,连keyA,keyB,segidx这些未定义都不知道,111行多了个(
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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