打印

请高手看一下keil c51变量值传递问题

[复制链接]
2031|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
8332|  楼主 | 2009-2-18 09:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.H>
#include <STDIO.H>          //输入输出库函数头文件
#include <CTYPE.H>        //字符操作函数头文件
#include <STRING.H>        //串操作函数头文件
#include <INTRINS.H>    //内联函数头文件
#include <STDLIB.H>        //杂函数头文件
sfr  p4 = 0xe8;
sbit p4_0 = 0xe8;//DATA
sbit p4_1 = 0xe9;//PLUS
sbit key1  = P0^2;
sbit key2  = P0^3;
sbit key3  = P0^4;
#define uchar unsigned char
#define uint unsigned int
uchar code sseg[]={0xee,  0x28, 0xcd,  0x6d,  0x2b,  0x67, 0xe7,  0x2c, 0xef,  0x6f,
     0xaf, 0xe3, 0xc6, 0xe9, 0xc7,  0x87, 0x00 
     };
uchar dispsbuff[]={16,16, 16, 16,16,16,0,0,0,0};
uchar fengji[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
void  Delay10us(uchar us)                 //延时10us
{do
    {
    _nop_();
    _nop_();
    _nop_();
    _nop_();
     _nop_();
    }while(--us);
}

void Delay1ms(void)                   //延时1ms
{
Delay10us(100);
}
void Delay10ms(void)                    //延时10ms
{
     uint i;
    for(i=0;i<=9;i++)
    { 
    Delay1ms();
        }
}
void Delay500ms(void)                    //延时500ms
{
     uint i;
    for(i=0;i<50;i++)
        { 
        Delay10ms();
         }
}
void send(uchar ch)//send
{    uchar j;
    for(j=0;j<8;j++)
        {
            p4_0=ch&0x01;
            p4_1 =0;
            p4_1 = 1;
            ch >>= 1;          
        }
}
void dis(void)
{
    uchar j;
    for(j=0;j<10;j++)
            {
             send(sseg[dispsbuff][j]]);
             }
}



    

bit judge_k()
{ bit y;
    if(key1==0)
        Delay10ms();
    if(key1==0)
    
        y=~y;
        return y;
        
}

main()
{bit k;
uchar keyvalue=1;
uchar i;
      Delay500ms();
    dis();
    k=judge_k();
    if(k==1)
        {
          while(k==1)
                  {      
                                     
               for(i=0;i<=5;i++)
               {
              Delay500ms();
              P1=fengji;               
                        dispsbuff[6]=keyvalue;
                        dis();
                        k=judge_k();
                        if(k==0) break; //如果此处跳出i=3,keyvalue=4
                   ++keyvalue;               
                        if(i>=5)
                        keyvalue=1;
                        }
              continue;
                  }
        }
    if(k==0)
        { 
          P1=fengji;//  i=3,keyvalue=4为啥传不到这呢?
          
          dispsbuff[6]=keyvalue;//要想实现,咋办呢?
          
          dis();
          if(key2==0)
          Delay10ms();
          if(key2==0)          
          {
            if(i<=5)
            {
            ++i;
            ++keyvalue;
            P1=fengji;               
            dispsbuff[6]=keyvalue;
            dis();
            }else
            {
            i=0;
            keyvalue=1;
            }
          }
          if(key3==0)
          Delay10ms();
          if(key3==0)
            {
              if(i<=5)
             {
            --i;
            --keyvalue;
            P1=fengji;               
            dispsbuff[6]=keyvalue;
            dis();
            }else
            {
            i=0;
            keyvalue=1;
            }
           }


        
        }
        

}









相关帖子

沙发
computer00| | 2009-2-18 09:21 | 只看该作者

不懂你在说什么...

没见过你啥时把keyvalue放入到fengji[3]中...

使用特权

评论回复
板凳
8332|  楼主 | 2009-2-18 09:41 | 只看该作者

keil c51变量值传递问题

break 跳出之后如果i=3,keyvalue=4,之后的程序段又用到i,keyvalue,它们的值是3,4呢?还是什么?

使用特权

评论回复
地板
computer00| | 2009-2-18 10:45 | 只看该作者

不变

使用特权

评论回复
5
8332|  楼主 | 2009-2-18 19:10 | 只看该作者

多谢高手指教,问题解决了,谢谢!!

多谢高手指教,问题解决了,谢谢!!

使用特权

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

本版积分规则

1

主题

13

帖子

0

粉丝