打印

难了我四个钟的程序小问题,求指导!

[复制链接]
1913|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
junwei05|  楼主 | 2011-12-15 23:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
};
uchar num,num1;
void delay(uint);
void main()
{
    while(1)
      {
      num++;
      P0=table[num];
       delay(1000);
   }
}

void delay(uint z)
{
    uint i;
    for(;z>0;z--)
    {
       for(i=0;i<124;i++);
    }


为什么程序运行时P0的值一直为0不变化,请问怎么才能让P0不断读取table[]里的值?放入!
}

相关帖子

沙发
zxcscm| | 2011-12-16 08:28 | 只看该作者
这个num++;会一直加到255才回零,P0=table[num];数组越界了
在num++;后加个判断if(num>=16)num=0;

使用特权

评论回复
板凳
junwei05|  楼主 | 2011-12-16 10:33 | 只看该作者
你好,但在仿真电路上,P0一直是0XFF,没变化啊,但在调试时NUM,和P0都一起变化的,怎么回事?

使用特权

评论回复
地板
junwei05|  楼主 | 2011-12-16 10:39 | 只看该作者
在KEIL中调试,P0随着NUM变化,怎么在PROTEUS中仿真,P0一直是高电平,有谁知道是怎么回来吗?

使用特权

评论回复
5
zhaofy521| | 2011-12-16 14:01 | 只看该作者
不要太依靠PROTEUS
数组越界了

使用特权

评论回复
6
chejun86| | 2011-12-16 17:16 | 只看该作者
51的IO好像是NMOS结构,你用作输出的话要求都没那么严,只要注意NUM的范围这程序应该没什么问题了....不过延时看的人头疼,对于时间还是建议你用中断定时器吧,养成一个好习惯...

使用特权

评论回复
7
yumpie| | 2011-12-19 23:19 | 只看该作者
数组越界
num++;改为num=++num%16;
如果调试时使用中断时看PROTEUS中输出应该是对的
如果程序连续运行时PROTEUS中端口值动态变化未必准确

使用特权

评论回复
8
Magic先生1| | 2011-12-21 20:51 | 只看该作者
NUM設置個上屆把

使用特权

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

本版积分规则

0

主题

37

帖子

1

粉丝