打印
[51单片机]

关于单片机For循环的问题

[复制链接]
2852|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
VChao|  楼主 | 2014-5-9 17:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int  

unsigned char code         sy           []         ={
0x00,0XFF,0XFF,0X00,0xFF,0xFF,0x80,0x00,0xBB,0xDF,0xA5,0xEF,
} ;
/*****n(us)延时子程序*****/
void DelayUs(uint N)
{                                  
    uint x ;
    for(x=0;x<=N;x++);
}
void Display(uint i)
{
            P2=sy[i*2];  //字幕数据低位送显示
        P0=sy[i*2+1]; //字数据高位送显示  //这里行和列 都是IO口独立驱动的LED
        DelayUs(210);        //延时让LED亮起来 每列延时的时间
        P2=0XFF;
        P0=0XFF;
}
/*****主函数*****/
void main(void)
{
    uint i=0,j=0 ;
        P1=0XFF;
        P2=0XFF;
        P0=0XFF;

while(1)
{

    for(i=0;i<4;i++)
          Display(i);
}
}
为什么P2口输出的始终是i=0时的数据,不会输出其他数据呢?

相关帖子

沙发
wangch_sh| | 2014-5-9 17:37 | 只看该作者
延时太短了吧?

使用特权

评论回复
板凳
VChao|  楼主 | 2014-5-9 17:44 | 只看该作者
wangch_sh 发表于 2014-5-9 17:37
延时太短了吧?

i不是在for循环中会自加么,跟延时的长短应该没关系才对吧。???

使用特权

评论回复
地板
VChao|  楼主 | 2014-5-9 17:48 | 只看该作者
wangch_sh 发表于 2014-5-9 17:37
延时太短了吧?

延时调到10000也没用。而且比较奇怪的是,我把for循环换成
if(i==0)
i=1;
else
i=0;
还是自会显示i=1时的数据。i的值好像不会保存似的。

使用特权

评论回复
5
思宁| | 2014-5-9 19:08 | 只看该作者
本帖最后由 思宁 于 2014-5-9 19:21 编辑

程序看起来没问题的,用keil仿真了下,也不会出现你所说的问题

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
VChao + 1 程序还真的是没问题,是我自己测试方法没对.
6
VChao|  楼主 | 2014-5-9 19:40 | 只看该作者
思宁 发表于 2014-5-9 19:08
程序看起来没问题的,用keil仿真了下,也不会出现你所说的问题

我用proteus仿真也没问题啊,但是led显示就会有问题。难道硬件有问题?

使用特权

评论回复
7
思宁| | 2014-5-9 19:46 | 只看该作者
VChao 发表于 2014-5-9 19:40
我用proteus仿真也没问题啊,但是led显示就会有问题。难道硬件有问题?

仔细检查下,把电路图贴上来看看

使用特权

评论回复
8
思宁| | 2014-5-9 19:48 | 只看该作者
还有延时太短了
/*****n(us)延时子程序*****/
void DelayUs(uint N)
{                                   
    uint x ,y;
    for(x=0;x<=N;x++)
      for(y=0;y<=110;y++);
}
试试

使用特权

评论回复
9
xy123151| | 2014-5-9 20:04 | 只看该作者
感觉也是,延时真的好短,才几us。单步调试?或者是把延时改到几s,起码也得有20ms+吧

使用特权

评论回复
10
NE5532| | 2014-5-9 22:37 | 只看该作者
确实是for循环执行的时间太短了,以这个速度刷新显示,楼主需要成为黄金圣斗士,才能看清楚显示内容的。

使用特权

评论回复
11
liuqinglong1234| | 2014-5-10 17:01 | 只看该作者
延时太短了,再改进一下!

使用特权

评论回复
12
icekoor| | 2014-5-10 21:44 | 只看该作者
贴图吧,延时虽短了些,但是LED显示应该变化。

使用特权

评论回复
13
icekoor| | 2014-5-10 21:46 | 只看该作者
贴图吧,延时虽然短了点,但是楼主用示波器测试LED应该有变化。

使用特权

评论回复
14
chenyu988| | 2014-5-12 08:46 | 只看该作者
VChao 发表于 2014-5-9 17:48
延时调到10000也没用。而且比较奇怪的是,我把for循环换成
if(i==0)
i=1;

是不是延时函数有问题。

使用特权

评论回复
15
moxue10| | 2014-5-15 17:38 | 只看该作者
你要用几个数码管显示啊

使用特权

评论回复
16
loliweive| | 2014-5-15 19:32 | 只看该作者
楼主把延时时间调到10000,延时也不会超过256us。。试试8楼的延时函数,应该就可以看到实验现象了。

使用特权

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

本版积分规则

3

主题

11

帖子

0

粉丝