找错误
本帖最后由 江上酒酒 于 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;}
}
}
}
P7=_cror_(0XEF,1)
这行没有;号啊(就是第63行)。 P7=_cror_(0XEF,1)
这里差分号 #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循环进行简化的
P7 = _cror_(0XEF, 1); 可是,
_cror_(0XEF, 1);
难道不是一个常量吗?也就是0xEF这个数字循环右移1位,得到0xF7。
VCC 发表于 2024-11-6 20:12
可是,
传参当然可以是常量 Lkck8210 发表于 2024-11-7 13:53
传参当然可以是常量
我想指出的是,这个代码并没有意义,没有产生有效的计算。而且编译器也无法将其优化,因为cror会直接被编译为汇编 soma 发表于 2024-11-6 15:42
P7=_cror_(0XEF,1)
这行没有;号啊(就是第63行)。
是的,已经解决了 VCC 发表于 2024-11-6 20:12
可是,
是的,这个我当时写的时候没注意
页:
[1]