这是一段代码请问voidDigDisplay()为什么会显示错
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h>
#include <temp.h>
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
#define led P2
sbit beep=P1^5;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k2=P3^0;
sbit k1=P3^1;
sbit k3=P3^2;
int tp,temp;
char i,j;
char num=0;
u8 DisplayData[8];
u8 code wenduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
u8 x=1;
void delay1(void) //误差 0us
{
unsigned char a,b,c;
for(c=123;c>0;c--)
for(b=116;b>0;b--)
for(a=9;a>0;a--);
}
void delay(u16 i)
{
while(i--);
}
void main()
{
while(1)
{
if(k1==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
u16 j;
P0=smgduan[2];
led=~0x01;
delay(50000);
while(x) //将led左移一位
{
led=_crol_(led,1);
delay1(); //大约延时450ms
if(k2==0||k3==0)
{
delay(1000);
if(k2==0||k3==0)
{
x=0;
}
while(!k2||!k3);
}
if(led==0x7f)
{
for(j=0;j<100;j++)
{
beep=~beep;
delay(100);
}
}
}
x=1;
}
}
if(k2==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k2==0) //再次判断按键是否按下
{
u16 j;
P0=smgduan[5];
led=~0x80;
delay(50000);
while(x) //将led左移一位
{
led=_cror_(led,1);
delay1(); //大约延时450ms
if(k1==0||k3==0)
{
delay(1000);
if(k1==0||k3==0)
{
x=0;
}
while(!k3||!k1);
}
if(led==0xfe)
{
for(j=0;j<100;j++)
{
beep=~beep;
delay(100);
}
}
}
x=1;
}
}
if(k3==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k3==0) //再次判断按键是否按下
{
while(x)
{
void datapros(int temp);
{
float tp;
if(temp< 0)//当温度值为负数
{
DisplayData[0] = 0x40; // -
//因为读取的温度是实际温度的补码,所以减1,再取反求出原码
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
}
else
{
DisplayData[0] = 0x00;
tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
//如果温度是正的那么,那么正数的原码就是补码它本身
temp=tp*0.0625*100+0.5;
}
DisplayData[1] = wenduan[temp / 10000];
DisplayData[2] = wenduan[temp % 10000 / 1000];
DisplayData[3] = wenduan[temp % 1000 / 100] | 0x80;
DisplayData[4] = wenduan[temp % 100 / 10];
DisplayData[5] = wenduan[temp % 10];
}
void DigDisplay()
{
for(i=0;i<6;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//显示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//显示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//显示第5位
}
P0=DisplayData[5-i];//发送数据
delay(100); //间隔一段时间扫描
P0=0x00;//消隐
}
}
}
while(1)
{
datapros(Ds18b20ReadTemp()); //数据处理函数
DigDisplay();//数码管显示函数
}
}
}
if(k2==0||k1==0)
{
delay(1000);
if(k2==0||k1==0)
while(!k1||!k2);
}
if(i>=0)
{
for(j=0;j<100;j++)
{
delay(100);
}
}
}
}
你的{}位置错了很多(排版非常重要的),以下是改好的
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h>
#include <temp.h>
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
#define led P2
sbit beep=P1^5;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k2=P3^0;
sbit k1=P3^1;
sbit k3=P3^2;
int tp,temp;
char i,j;
char num=0;
u8 DisplayData[8];
u8 code wenduan[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u8 code smgduan[17]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //显示0~F的值
u8 x=1;
void delay1(void) //误差 0us
{
unsigned char a,b,c;
for(c=123; c>0; c--)
for(b=116; b>0; b--)
for(a=9; a>0; a--);
}
void delay(u16 i)
{
while(i--);
}
void main()
{
while(1)
{
if(k1==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
u16 j;
P0=smgduan[2];
led=~0x01;
delay(50000);
while(x) //将led左移一位
{
led=_crol_(led,1);
delay1(); //大约延时450ms
if(k2==0||k3==0)
{
delay(1000);
if(k2==0||k3==0)
{
x=0;
}
while(!k2||!k3);
}
if(led==0x7f)
{
for(j=0; j<100; j++)
{
beep=~beep;
delay(100);
}
}
}
x=1;
}
}
if(k2==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k2==0) //再次判断按键是否按下
{
u16 j;
P0=smgduan[5];
led=~0x80;
delay(50000);
while(x) //将led左移一位
{
led=_cror_(led,1);
delay1(); //大约延时450ms
if(k1==0||k3==0)
{
delay(1000);
if(k1==0||k3==0)
{
x=0;
}
while(!k3||!k1);
}
if(led==0xfe)
{
for(j=0; j<100; j++)
{
beep=~beep;
delay(100);
}
}
}
x=1;
}
}
if(k3==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k3==0) //再次判断按键是否按下
{
while(x)
{
void datapros(int temp);
{
float tp;
if(temp< 0)//当温度值为负数
{
DisplayData[0] = 0x40; // -
//因为读取的温度是实际温度的补码,所以减1,再取反求出原码
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
}
else
{
DisplayData[0] = 0x00;
tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
//如果温度是正的那么,那么正数的原码就是补码它本身
temp=tp*0.0625*100+0.5;
}
DisplayData[1] = wenduan[temp / 10000];
DisplayData[2] = wenduan[temp % 10000 / 1000];
DisplayData[3] = wenduan[temp % 1000 / 100] | 0x80;
DisplayData[4] = wenduan[temp % 100 / 10];
DisplayData[5] = wenduan[temp % 10];
}
}
}
}
}
}
void DigDisplay()
{
for(i=0; i<6; i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=0;
LSB=0;
LSC=0;
break;//显示第0位
case(1):
LSA=1;
LSB=0;
LSC=0;
break;//显示第1位
case(2):
LSA=0;
LSB=1;
LSC=0;
break;//显示第2位
case(3):
LSA=1;
LSB=1;
LSC=0;
break;//显示第3位
case(4):
LSA=0;
LSB=0;
LSC=1;
break;//显示第4位
case(5):
LSA=1;
LSB=0;
LSC=1;
break;//显示第5位
}
P0=DisplayData[5-i];//发送数据
delay(100); //间隔一段时间扫描
P0=0x00;//消隐
}
while(1)
{
datapros(Ds18b20ReadTemp()); //数据处理函数
DigDisplay();//数码管显示函数
}
if(k2==0||k1==0)
{
delay(1000);
if(k2==0||k1==0)
while(!k1||!k2);
}
if(i>=0)
{
for(j=0; j<100; j++)
{
delay(100);
}
}
}