江上酒酒 发表于 2024-11-6 15:20:39

找错误

本帖最后由 江上酒酒 于 2024-11-6 15:25 编辑

大家帮我看看错误的原因在哪里


#include <STC32G.H>
#include <INTRINS.H>
void Delay10ms(void);
signed int b;
unsigned int a,a1,a2,a3,a4,a5,a6,a7,a8,h,c;
unsigned char code number[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80};
void Delay10ms(void)      //@24.000MHz
{
      unsigned char data i, j;

      i = 39;
      j = 230;
      do
      {
                while (--j);
      } while (--i);
}
void main()
{
      P0M0=0X00;
      P0M1=0X00;
      P4M0=0X00;
      P4M1=0X00;
      P6M0=0X00;
      P6M1=0X00;
            P7M0=0X00;
            P7M1=0X00;
            P7=0XEF;
      while(1)
      {
          h++;
         P0=0XFE;            
         if(P06==0&&P07==1) {a=1;}
         if(P06==1&&P07==0){a=5;}   
         P0=0XFD;         
         if(P06==0&&P07==1){a=2;}         
         if(P06==1&&P07==0){a=6;}         
         P0=0XFB;         
         if(P06==0&&P07==1){a=3;}
         if(P06==1&&P07==0){a=7;}
         P0=0XF7;         
         if(P06==0&&P07==1){a=4;}
         if(P06==1&&P07==0){a=8;}
         b=h;
         if(b==1) {a1=a;}
         if(b==2) {a2=a;}
         if(b==3) {a3=a;}
         if(b==4) {a4=a;}
         if(b==5) {a5=a;}
         if(b==6) {a6=a;}
         if(b==7) {a7=a;}
         if(b==8) {a8=a;}
         for(b;b>=2;b--)
         {
               if(b==1) {P6=number;}
               if(b==2) {P6=number;}
               if(b==3) {P6=number;}
               if(b==4) {P6=number;}
               if(b==5) {P6=number;}
               if(b==6) {P6=number;}
               if(b==7) {P6=number;}
               if(b==8) {P6=number;}
               P7=_cror_(0XEF,1)
                Delay10ms();
               if(b==1) {b=h;}
                if(P06==0||P07==0) {c=1;}
               if((P06==1&&c==1)||(P07==1&&c==1)) {c=0;b=-1;}
                     }
                  }
            }

soma 发表于 2024-11-6 15:42:52

P7=_cror_(0XEF,1)
这行没有;号啊(就是第63行)。

bkeuqoaq 发表于 2024-11-6 15:54:14

P7=_cror_(0XEF,1)
这里差分号

王昱顺 发表于 2024-11-6 16:35:48

#include <STC32G.H>
#include <INTRINS.H>

// 函数声明
void Delay10ms(void);

// 全局变量
signed int b;
unsigned int h, c;
unsigned int a;// 用于存储a1到a8的值
unsigned char code number[] = {0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80};// 数码管显示的数字编码

// 10ms延时函数
void Delay10ms(void)      //@24.000MHz
{
    unsigned char i = 39, j = 230;
    do {
      while (--j);
    } while (--i);
}

void main()
{
    // 初始化端口模式寄存器,保留PxM1,删除PxM0
    P0M1 = 0X00;
    P4M1 = 0X00;
    P6M1 = 0X00;
    P7M1 = 0X00;

    // 初始化P7端口
    P7 = 0XEF;

    while (1)
    {
      h++;// 计数器递增
      unsigned char row = 0xFE;// 初始化行扫描值

      // 扫描行
      for (unsigned char i = 0; i < 4; i++)
      {
            P0 = row;// 设置行扫描值

            // 检测按键状态
            if (P06 == 0 && P07 == 1) a = i + 1;// 如果P06为0且P07为1,设置a的值为i+1
            if (P06 == 1 && P07 == 0) a = i + 5;// 如果P06为1且P07为0,设置a的值为i+5

            row = _crol_(row, 1);// 左移行扫描值
      }

      // 显示数字
      for (b = h; b >= 2; b--)
      {
            P6 = number];// 根据a数组的值设置P6端口的显示值
            P7 = _cror_(0XEF, 1);// 右移P7端口的值
            Delay10ms();// 延时10ms

            // 检测按键状态
            if (P06 == 0 || P07 == 0) c = 1;// 如果P06或P07为0,设置c为1
            if ((P06 == 1 && c == 1) || (P07 == 1 && c == 1)) { c = 0; b = -1; }// 如果P06或P07为1且c为1,重置c并退出循环
      }
    }
}错误在P7 = _cror_(0XEF, 1); // 右移P7端口的值

原因:缺少分号
你这个程序写的优点麻烦了,可以多利用以下for循环进行简化的

wlhet 发表于 2024-11-6 16:46:26

P7 = _cror_(0XEF, 1);

VCC 发表于 2024-11-6 20:12:39

可是,

_cror_(0XEF, 1);

难道不是一个常量吗?也就是0xEF这个数字循环右移1位,得到0xF7。

Lkck8210 发表于 2024-11-7 13:53:27

VCC 发表于 2024-11-6 20:12
可是,




传参当然可以是常量

VCC 发表于 2024-11-7 14:07:16

Lkck8210 发表于 2024-11-7 13:53
传参当然可以是常量

我想指出的是,这个代码并没有意义,没有产生有效的计算。而且编译器也无法将其优化,因为cror会直接被编译为汇编

江上酒酒 发表于 2024-11-8 17:08:57

soma 发表于 2024-11-6 15:42
P7=_cror_(0XEF,1)
这行没有;号啊(就是第63行)。

是的,已经解决了

江上酒酒 发表于 2024-11-8 17:10:03

VCC 发表于 2024-11-6 20:12
可是,




是的,这个我当时写的时候没注意
页: [1]
查看完整版本: 找错误