[51单片机] 关于单片机For循环的问题

[复制链接]
3494|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的值好像不会保存似的。

思宁 发表于 2014-5-9 19:08 | 显示全部楼层
本帖最后由 思宁 于 2014-5-9 19:21 编辑

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

本帖子中包含更多资源

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

×

评分

参与人数 1威望 +1 收起 理由
VChao + 1 程序还真的是没问题,是我自己测试方法没对.

查看全部评分

 楼主| VChao 发表于 2014-5-9 19:40 | 显示全部楼层
思宁 发表于 2014-5-9 19:08
程序看起来没问题的,用keil仿真了下,也不会出现你所说的问题

我用proteus仿真也没问题啊,但是led显示就会有问题。难道硬件有问题?
思宁 发表于 2014-5-9 19:46 | 显示全部楼层
VChao 发表于 2014-5-9 19:40
我用proteus仿真也没问题啊,但是led显示就会有问题。难道硬件有问题?

仔细检查下,把电路图贴上来看看
思宁 发表于 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++);
}
试试
xy123151 发表于 2014-5-9 20:04 | 显示全部楼层
感觉也是,延时真的好短,才几us。单步调试?或者是把延时改到几s,起码也得有20ms+吧
NE5532 发表于 2014-5-9 22:37 | 显示全部楼层
确实是for循环执行的时间太短了,以这个速度刷新显示,楼主需要成为黄金圣斗士,才能看清楚显示内容的。
liuqinglong1234 发表于 2014-5-10 17:01 | 显示全部楼层
延时太短了,再改进一下!
icekoor 发表于 2014-5-10 21:44 来自手机 | 显示全部楼层
贴图吧,延时虽短了些,但是LED显示应该变化。
icekoor 发表于 2014-5-10 21:46 来自手机 | 显示全部楼层
贴图吧,延时虽然短了点,但是楼主用示波器测试LED应该有变化。
chenyu988 发表于 2014-5-12 08:46 | 显示全部楼层
VChao 发表于 2014-5-9 17:48
延时调到10000也没用。而且比较奇怪的是,我把for循环换成
if(i==0)
i=1;

是不是延时函数有问题。
moxue10 发表于 2014-5-15 17:38 | 显示全部楼层
你要用几个数码管显示啊
loliweive 发表于 2014-5-15 19:32 | 显示全部楼层
楼主把延时时间调到10000,延时也不会超过256us。。试试8楼的延时函数,应该就可以看到实验现象了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

11

帖子

0

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