Billy_wan
Billy_wan
2015-05-13 06:28
采纳率: 66.7%
浏览 2.5k
已采纳

为什么老显示key_value 未定义 ,data数组也有问题??

/***************************************************
本程序是要用单片机做一个计算器
*************************************************/

#include
#include
#define GPIO_key P2
#define GPIO_zu P0//位选
#define GPIO_led P1//段选

unsigned char zu[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char LED_data[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
unsigned char LED_num[9];
unsigned char flag;

void display_num();//用来显示每次按键之后的key_value
void dispay_r(unsigned int r);//用来显示结果
void delayms(unsigned int i);//延时函数
char keypress();//扫描矩阵键盘
int jisuan();

unsigned char data[17];//全局存储数组 存储键值
//MAIN.C(23): error C141: syntax error near '['
unsigned char p;//用于 计算函数 和 出栈显示 的下标
//uchar p_stack;//用于显示数字的下标

void main()
{
int i;
int res;
p=-1;

unsigned char key_value;
//MAIN.C(32): error C141: syntax error near 'unsigned'
for(i=0;i<10;i++)
{
    LED_num[i]=LED_data[i];
}
flag=0;//标记是否有键值
while(1)
{ 
    loop:
    key_value=keypress();//修改flag,输出键值
    //MAIN.C(32): error C202: 'key_value': undefined identifier
    if(flag==1)//当flag=1时,表示有键值输入
    {
        if (p<=17)//入队操作
        {
            p++;

            data[p]=key_value;
        }
        if (key_value>-1&&key_value<10)
        {
            display_num();// display each num;
        }
        else if (key_value=='=')
        {
            res=jisuan();
            dispay_r(res);
        }
        else goto loop;
        //判断key_value
    }
    flag=0;
}

}
int jisuan()
{
unsigned int num[2]={0,0};
unsigned char fuhao;
int i=0;
for (;p>-1;p--)
{
if (data[p]>-1&&data[p]<10)
//MAIN.C(71): error C141: syntax error near 'data'
{
num[i]=data[p]+num[i]*10;

    } 
    else
    {
        i++;
        fuhao=data[p];
    }
}
switch(fuhao)
{
case '+':num[1]=num[0]+num[1];break;

case '-':num[1]=num[0]-num[1];break;
case '*':num[1]=num[0]*num[1];break;
case '/':num[1]=num[0]/num[1];break;
}
return num[1];

}

char keypress()
{ unsigned char temp,key;
GPIO_key=0xfe;
temp=temp&0xf0;
if (temp!=0xf0)
{
delayms(10);
temp=GPIO_key;
if (temp!=0xf0)
{
flag=1;
temp=GPIO_key;
switch(temp)
{
case 0xee:key=0;break;
case 0xde:key=1;break;
case 0xbe:key=2;break;
case 0x7e:key=3;break;

        }
        while(temp!=0xf0)
        {
            temp=GPIO_key;
            temp=temp&0xf0;
        }
    }
}
GPIO_key=0xfd;
temp=temp&0xf0;
if (temp!=0xf0)
{
    delayms(10);
    temp=GPIO_key;
    if (temp!=0xf0)
    {
        flag=1;
        temp=GPIO_key;
        switch(temp)
        {
        case 0xed:key=4;break;
        case 0xdd:key=5;break;
        case 0xbd:key=6;break;
        case 0x7d:key=7;break;

        }
        while(temp!=0xf0)
        {
            temp=GPIO_key;
            temp=temp&0xf0;
        }
    }
}
GPIO_key=0xfb;
temp=temp&0xf0;
if (temp!=0xf0)
{
    delayms(10);
    temp=GPIO_key;
    if (temp!=0xf0)
    {
        flag=1;
        temp=GPIO_key;
        switch(temp)
        {
        case 0xeb:key=8;break;
        case 0xdb:key=9;break;
        case 0xbb:key='+';break;
        case 0x7b:key='-';break;

        }
        while(temp!=0xf0)
        {
            temp=GPIO_key;
            temp=temp&0xf0;
        }
    }
}
GPIO_key=0xf7;
temp=temp&0xf0;
if (temp!=0xf0)
{
    delayms(10);
    temp=GPIO_key;
    if (temp!=0xf0)
    {
        flag=1;
        temp=GPIO_key;
        switch(temp)
        {
        case 0xe7:key='*';break;
        case 0xd7:key='/';break;
        case 0xb7:key='=';break;
        case 0x77:key='.';break;

        }
        while(temp!=0xf0)
        {
            temp=GPIO_key;
            temp=temp&0xf0;
        }
    }
}
return key;

}
void display_num()
{
int zhi=p;
int j=0;
while(j>-1)
{
if (data[zhi]>-1&&data[zhi] {
GPIO_zu=zu[j];
GPIO_led=LED_num[data[zhi]];
zhi--;
j++;
}
}
}
void dispay_r(unsigned int r)
{
unsigned char temp_r[8];
int i;
for(i=0;i {
temp_r[i]=(int)r%(int)pow(10,i+1);
}
for (i=0;i {
GPIO_zu=zu[i];
GPIO_led=LED_num[temp_r[i]];
}
}
void delayms(unsigned int i)
{
unsigned char c;
for(;i>0;i--)
{
for(c=110;c>0;c--);
}
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • sunyiping1988
    syp秋雨无痕 2015-05-13 09:41
    已采纳

    int i;
    int res;
    p=-1;
    unsigned char key_value;

    p = -1;已经是语句了 后面又有 key_value 的定义 编译器 貌似会忽略,把语句顺序调成
    int i;
    int res;
    unsigned char key_value;
    p = -1;
    在编译 就没事了
    data 是关键字 换掉

    点赞 评论
  • gamefinity
    知常曰明 2015-05-13 06:42

    看不出错来。不知道你有没有把data换个名字看?我没有用过你这个C,就算用过也未必记得。但是data是否可能时关键字?既然普通的肉眼演不出来的话,我第一怀疑的就是关键字问题,其次是全角/半角问题,甚至有时候把这行删了重新打一遍等等,都是可能解决问题的办法之一

    点赞 评论

相关推荐