找回密码
 立即注册
查看: 446|回复: 9

找错误

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:75
  • 最近打卡:2025-01-05 14:16:57

30

主题

132

回帖

214

积分

中级会员

积分
214
发表于 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[a1];}
               if(b==2) {P6=number[a2];}
               if(b==3) {P6=number[a3];}
               if(b==4) {P6=number[a4];}
               if(b==5) {P6=number[a5];}
               if(b==6) {P6=number[a6];}
               if(b==7) {P6=number[a7];}
               if(b==8) {P6=number[a8];}
               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;}
                       }
                  }
            }

47fad49471a4ac541e6570305870556.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-03 00:02:01
已绑定手机

19

主题

3191

回帖

4876

积分

论坛元老

积分
4876
发表于 2024-11-6 15:42:52 | 显示全部楼层
P7=_cror_(0XEF,1)
这行没有;号啊(就是第63行)。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2024-11-6 15:54:14 | 显示全部楼层
P7=_cror_(0XEF,1)
这里差分号
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:460
  • 最近打卡:2025-05-03 07:38:35
已绑定手机
已实名认证

110

主题

2224

回帖

5470

积分

版主

积分
5470
发表于 2024-11-6 16:35:48 | 显示全部楼层
  1. #include <STC32G.H>
  2. #include <INTRINS.H>
  3. // 函数声明
  4. void Delay10ms(void);
  5. // 全局变量
  6. signed int b;
  7. unsigned int h, c;
  8. unsigned int a[8];  // 用于存储a1到a8的值
  9. unsigned char code number[] = {0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80};  // 数码管显示的数字编码
  10. // 10ms延时函数
  11. void Delay10ms(void)        //@24.000MHz
  12. {
  13.     unsigned char i = 39, j = 230;
  14.     do {
  15.         while (--j);
  16.     } while (--i);
  17. }
  18. void main()
  19. {
  20.     // 初始化端口模式寄存器,保留PxM1,删除PxM0
  21.     P0M1 = 0X00;
  22.     P4M1 = 0X00;
  23.     P6M1 = 0X00;
  24.     P7M1 = 0X00;
  25.     // 初始化P7端口
  26.     P7 = 0XEF;
  27.     while (1)
  28.     {
  29.         h++;  // 计数器递增
  30.         unsigned char row = 0xFE;  // 初始化行扫描值
  31.         // 扫描行
  32.         for (unsigned char i = 0; i < 4; i++)
  33.         {
  34.             P0 = row;  // 设置行扫描值
  35.             // 检测按键状态
  36.             if (P06 == 0 && P07 == 1) a[h % 8] = i + 1;  // 如果P06为0且P07为1,设置a的值为i+1
  37.             if (P06 == 1 && P07 == 0) a[h % 8] = i + 5;  // 如果P06为1且P07为0,设置a的值为i+5
  38.             row = _crol_(row, 1);  // 左移行扫描值
  39.         }
  40.         // 显示数字
  41.         for (b = h; b >= 2; b--)
  42.         {
  43.             P6 = number[a[(h - b) % 8]];  // 根据a数组的值设置P6端口的显示值
  44.             P7 = _cror_(0XEF, 1);  // 右移P7端口的值
  45.             Delay10ms();  // 延时10ms
  46.             // 检测按键状态
  47.             if (P06 == 0 || P07 == 0) c = 1;  // 如果P06或P07为0,设置c为1
  48.             if ((P06 == 1 && c == 1) || (P07 == 1 && c == 1)) { c = 0; b = -1; }  // 如果P06或P07为1且c为1,重置c并退出循环
  49.         }
  50.     }
  51. }
复制代码
错误在P7 = _cror_(0XEF, 1); // 右移P7端口的值

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:154
  • 最近打卡:2025-04-30 08:40:57
已绑定手机

15

主题

630

回帖

730

积分

高级会员

积分
730
发表于 2024-11-6 16:46:26 | 显示全部楼层
P7 = _cror_(0XEF, 1);
STC 666 888
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-11-6 20:12:39 | 显示全部楼层
可是,

  1. _cror_(0XEF, 1);
复制代码


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

联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2024-11-7 13:53:27 | 显示全部楼层

传参当然可以是常量
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-11-7 14:07:16 来自手机 | 显示全部楼层
Lkck8210 发表于 2024-11-7 13:53
传参当然可以是常量

我想指出的是,这个代码并没有意义,没有产生有效的计算。而且编译器也无法将其优化,因为cror会直接被编译为汇编
联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:75
  • 最近打卡:2025-01-05 14:16:57

30

主题

132

回帖

214

积分

中级会员

积分
214
发表于 2024-11-8 17:08:57 | 显示全部楼层
so*** 发表于 2024-11-6 15:42
P7=_cror_(0XEF,1)
这行没有;号啊(就是第63行)。

是的,已经解决了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:75
  • 最近打卡:2025-01-05 14:16:57

30

主题

132

回帖

214

积分

中级会员

积分
214
发表于 2024-11-8 17:10:03 | 显示全部楼层

是的,这个我当时写的时候没注意
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 15:24 , Processed in 0.124323 second(s), 118 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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