打印

figure2这个全局变量无法给它赋值

[复制链接]
649|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tanpengjie|  楼主 | 2015-4-30 16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define GPIO_DIG P0
#define GPIO_PLACE P1
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char  DIG_CODE[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char  PLACE_CODE[8]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制   查表的方法控制
unsigned char a,temp,scan1,scan2,keystate,y,mark,v,z,mun=0;
unsigned char keynum,num,figure1,figure2,x;

unsigned char  displaydata[8];
void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a, b;

        //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
    for (;c>0;c--)
        {
                for (b=38;b>0;b--)
                {
                        for (a=130;a>0;a--);
                }         
        }      
}
void keydown()
{
           //unsigned char a,temp,scan1,scan2,num;
           P1=0x0f;
           scan1=P1;
           if(scan1!=0x0f)
                 {
                         Delay10ms(6);
                         if(scan1!=0x0f)
                         {
                                 P1=0xf0;
                                 scan2=P1;
                                 Delay10ms(15);
                                 temp=scan1|scan2;
                                 switch(temp)
                                 {
                                         case 0xee:num=1;break;
                                   case 0xde:num=2;break;
                                   case 0xbe:num=3;break;
                                   case 0x7e:num=11;break;//加号
                                   case 0xed:num=4;break;
                                   case 0xdd:num=5;break;
                                   case 0xbd:num=6;break;
                                   case 0x7d:num=12;break;//减号
                                   case 0xeb:num=7;break;
                                   case 0xdb:num=8;break;
                                   case 0xbb:num=9;break;
                                   case 0x7b:num=13;break;//乘号
                                   case 0xe7:num=16;break;//小数点
                                   case 0xd7:num=0;break;
                                    case 0xb7:num=15;break;//等号
                                   case 0x77:num=14;break;//除号
         }
                                 while((a<50)&&(scan1!=0x0f))//检测按键是否松了
                                 {
                                             Delay10ms(1);
                                             a++;
         }
       }
                 }
}
void DigDisplay()
{
       
        unsigned char i;
        unsigned int j;
        for(i=0;i<1;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位
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;//显示第6位
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;//显示第7位       
                }
               
                if(mun==0)
                {  
                       
                        displaydata[0]=DIG_CODE[y];
                        GPIO_DIG=displaydata[0];
                       
                               
    }
                        else if (mun==1)
                        {  
                               
                                x=figure1;
                                displaydata[1]=DIG_CODE[x];
                          GPIO_DIG=displaydata[1];
      }
                j=10;                                                 //扫描间隔时间设定
          while(j--);       
                GPIO_DIG=0x00;//消隐
        }
}
void main()
{
       
       
        while(1)
        {
                keydown();
                keynum=num;
               
                if((keynum>=0)&&(keynum<=9))
                {
                        y=keynum;
                        figure1=keynum;
    }       
                else if((keynum>=11)&&(keynum<=14))
                {
                        y=0;
                        mark=keynum;
                        figure2=figure1;
                        figure1=0;
    }
                else if(keynum==15)
                {
                  mun=1;
                  
                  
                  if(mark==11)
                                  
                            figure1=figure2+figure1;
                        else if(mark==12)
                            figure1=figure2-figure1;
                        else if(mark==13)
                                  figure1=figure2*figure1;
                        else if(mark==14)
                                  figure1=figure2/figure1;
                 
    }
                DigDisplay();
        }
       

       

}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝