打印
[PIC®/AVR®/dsPIC®产品]

简单的for搞不明白。

[复制链接]
1361|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则显示四位。

使用特权

评论回复
5
沧海一笑| | 2014-5-3 20:15 | 只看该作者
<=,范围宽了一个么...   或...

使用特权

评论回复
6
谈的元| | 2014-5-3 20:19 | 只看该作者
谈的元 发表于 2014-5-3 19:57
for(k=0;k;k++);for(k=0;k;k++);循环次数

前面循环少一次

使用特权

评论回复
7
wangch_sh| | 2014-5-3 20:47 | 只看该作者
<4只能到3,<=4可以到4.

使用特权

评论回复
8
闲来玩玩|  楼主 | 2014-5-4 07:05 | 只看该作者
k<4{程序运行4次},k<=4{程序运行5次}, 用SPI模块驱动595显示4位数码管,只要扫描4次,可能丢失了一次数据,不知错在哪里?

使用特权

评论回复
9
yewuyi| | 2014-5-4 09:11 | 只看该作者
/////////////////////////////////////
for(k=0;k<4;k++);for(k=0;k<=4;k++);不知区别在哪里。


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

第二个写法多执行了一次循环。

使用特权

评论回复
10
闲来玩玩|  楼主 | 2014-5-4 11:21 | 只看该作者
yewuyi 发表于 2014-5-4 09:11
/////////////////////////////////////
for(k=0;k

丢失了一帧数据?

使用特权

评论回复
11
ayb_ice| | 2014-5-4 11:58 | 只看该作者
一个循环4次,一个循环4+1次

使用特权

评论回复
12
闲来玩玩|  楼主 | 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时序不对,把第一帧数据丢失了。

【Realplay】8位 数码管模块 八位串行 595驱动送5根杜邦线.zip

142.55 KB

使用特权

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

本版积分规则

16

主题

87

帖子

0

粉丝