[PIC®/AVR®/dsPIC®产品] 简单的for搞不明白。

[复制链接]
2045|11
 楼主| 闲来玩玩 发表于 2014-5-3 19:42 | 显示全部楼层 |阅读模式
for(k=0;k<=4;k++)
  {
    SPI1BUF=((segled[dis_buff[k]])|j);
    while(_SPITBF==1);
    j<<=1;
    }
///////////////////////////////////////////
for(k=0;k<4;k++)
  {
    SPI1BUF=((segled[dis_buff[k]])|j);
    while(_SPITBF==1);
    j<<=1;
     }
/////////////////////////////////////
for(k=0;k<4;k++);for(k=0;k<=4;k++);不知区别在哪里。
谈的元 发表于 2014-5-3 19:57 | 显示全部楼层
for(k=0;k;k++);for(k=0;k;k++);循环次数<4与<=4
谈的元 发表于 2014-5-3 20:00 | 显示全部楼层
for(k=0;k<4;k++);
K=0; 执行括号内容,K=1;
K=1; 执行括号内容,K=2;

K=2; 执行括号内容,K=3;
K=3; 执行括号内容,K=4;
K=4; 不执行括号内容,跳出括号
不知道你有什么问题?

 楼主| 闲来玩玩 发表于 2014-5-3 20:03 | 显示全部楼层
谈的元 发表于 2014-5-3 20:00
for(k=0;k

SPI驱动两片595,数码管显示4位,用k<4只能显示三位,用k<=4则显示四位。
沧海一笑 发表于 2014-5-3 20:15 | 显示全部楼层
<=,范围宽了一个么...   或...
谈的元 发表于 2014-5-3 20:19 | 显示全部楼层
谈的元 发表于 2014-5-3 19:57
for(k=0;k;k++);for(k=0;k;k++);循环次数

前面循环少一次
wangch_sh 发表于 2014-5-3 20:47 | 显示全部楼层
<4只能到3,<=4可以到4.
 楼主| 闲来玩玩 发表于 2014-5-4 07:05 | 显示全部楼层
k<4{程序运行4次},k<=4{程序运行5次}, 用SPI模块驱动595显示4位数码管,只要扫描4次,可能丢失了一次数据,不知错在哪里?
yewuyi 发表于 2014-5-4 09:11 | 显示全部楼层
/////////////////////////////////////
for(k=0;k<4;k++);for(k=0;k<=4;k++);不知区别在哪里。


这样的问题也拿上来问?你应该面壁去。。。

第二个写法多执行了一次循环。
 楼主| 闲来玩玩 发表于 2014-5-4 11:21 | 显示全部楼层
yewuyi 发表于 2014-5-4 09:11
/////////////////////////////////////
for(k=0;k

丢失了一帧数据?
ayb_ice 发表于 2014-5-4 11:58 | 显示全部楼层
一个循环4次,一个循环4+1次
 楼主| 闲来玩玩 发表于 2014-5-4 20:17 | 显示全部楼层
本帖最后由 闲来玩玩 于 2014-5-5 07:01 编辑

#define   uchar   unsigned char
#define   uint    unsigned int
unsigned  int     temp;
uchar             dis_buff[8]={0,0,0,0,0,0,0,0};
const     uint    segled[]={0xc000,0xf900,0xa400,0xb000,0x9900,0x9200,
                                        0x8200,0xf800,0x8000,0x9000,0xff00,0xbf00};

void Poweroninit(void)
    {
      SPI1STAT=0x8000;  SPI1CON=0x44af;
     }

void display(void)
{
  uchar k=0;
  uint  j=0x0001;
  for(k=0;k<=4;k++)
  {
    SPI1BUF=((segled[dis_buff[k]])|j);
    while(_SPITBF==1);
    j<<=1;
   }
}

int main(void)
{
  Poweroninit();
  while(1)
    {
     display();
     dis_buff[3]=(temp%10000)/1000;
     dis_buff[2]=(temp%1000)/100;
     dis_buff[1]=(temp%100)/10;
     dis_buff[0]=temp%10;
     temp=++temp;

    }
}

//器件是dspic30f2010, 原来写for(k=0;k<4;k++), 后改写for(k=0;k<=4;k++)正常。我只要显示4位数据,用SPI模块,查询方法。附595和数码管文件,估计是2010和595通SPI时序不对,把第一帧数据丢失了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

87

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部