打印

这是神马情况啊!程序没错的,为什么仿真不对

[复制链接]
4258|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 雷影少年 于 2012-6-25 19:39 编辑

这是程序:#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code seg[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e}; 数码管数字代码
void delay(unsigned char);  延时程序
void main()
{
uint c,i;
while(1)
{  
  c=0;
  i=70;          数码管刷新次数
  while(i)
  {
   P2=0x0f;    P2口高四位为高电平,驱动左侧4位数码管显示
   delay(1000);
   i--;
   P0=seg[c];     调用代码
    c++;
    if(c==10)      显示到后“9”清零
    c=0;
  }  
}
}
void delay(uchar x)
{
  uchar a,b;
for(a=500;a>0;a--)
  for(b=x;b>0;b--);
}
下面是仿真结果:

我把程序烧写到开发板上是亮4个,为什么仿真就亮8个呢?
R0~R7是30,R8~R15是2K
是不是有什么参数设置的不正确,求指点
这是数码管默认参数

相关帖子

沙发
雷影少年|  楼主 | 2012-6-25 17:46 | 只看该作者
咋没人理啊!难道分给的少了就没人回答了?

使用特权

评论回复
板凳
NE5532| | 2012-6-25 18:42 | 只看该作者
不是分少了,你看人家0分的都有人回答,是你自己写程序的习惯太烂了,一行注释都不写,你说偶们单位忙一天回来,莫非还很有精力地仔细推敲你的程序呀?而且写了注释恐怕你自己都找到问题所在了。PS:建议别用仿真来研究单片机,会把人残废掉,详情阅读“侃单片机”版面我的精华贴。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
雷影少年 + 1 我很赞同
地板
雷影少年|  楼主 | 2012-6-25 19:33 | 只看该作者
程序是比较烂,不过我当时觉得这么简单的程序不需要加注释地,这个程序我烧写到单片机是右边4个数码管显示数字0~9,但是仿真的时候却是8个全亮,仿真电路和我开发板原理图上给出的是一样的,我就是想知道出现这种问题是因为仿真软件的缺陷还是因为我没有设置对参数

使用特权

评论回复
5
雷影少年|  楼主 | 2012-6-25 19:39 | 只看该作者
加了点注释

使用特权

评论回复
6
NE5532| | 2012-6-25 19:46 | 只看该作者
加了点注释
雷影少年 发表于 2012-6-25 19:39


被仿真害死的娃啊,你单片机的EA端怎么接的?

使用特权

评论回复
7
NE5532| | 2012-6-25 19:48 | 只看该作者
你的电阻值一看就是错的,仿真里能用,实际板子上就不行了,不过你问的亮4个不是这个问题造成的。

使用特权

评论回复
8
雷影少年|  楼主 | 2012-6-25 20:28 | 只看该作者
本帖最后由 雷影少年 于 2012-6-25 20:43 编辑
被仿真害死的娃啊,你单片机的EA端怎么接的?
NE5532 发表于 2012-6-25 19:46

额!这个程序仿真的时候EA端不是可以不接吗?
这是开发板的原理图 TYD-51-1原理图.pdf (54.13 KB) 我的图应该没错吧!
P2.4~P2.7明明输出的是低电平的,

使用特权

评论回复
9
雷影少年|  楼主 | 2012-6-25 20:58 | 只看该作者
本帖最后由 雷影少年 于 2012-6-25 20:59 编辑

我刚把所有的三极管全部干掉,仿真就正常了:lol

但是解决问题的办法不应该是这样吧:funk:

使用特权

评论回复
10
NE5532| | 2012-6-25 21:04 | 只看该作者
可怜的娃,仔细看下EA端是什么功能再说。

使用特权

评论回复
11
雷影少年|  楼主 | 2012-6-25 21:20 | 只看该作者
本帖最后由 雷影少年 于 2012-6-25 21:21 编辑

EA为0是访问外部存储器,为1访问内部存储器,仿真时空脚默认为1的,这个电路没访问外部存储器啊!可以空脚的
我再纠结为什么把那几个三极管干掉后仿真就正常了~
搞不明白

使用特权

评论回复
12
wukunshan| | 2012-6-25 23:36 | 只看该作者
不要拿仿真当真事啦。。。。,兄弟呀,你那PNP的三极管接反了呀。

使用特权

评论回复
13
雷影少年|  楼主 | 2012-6-25 23:43 | 只看该作者
原理图是这样接的额
呜呜~原理图有问题

使用特权

评论回复
14
hnlxy712| | 2012-6-26 09:18 | 只看该作者
深入浅出AVR单片机   供你参考

使用特权

评论回复
15
hnlxy712| | 2012-6-26 09:19 | 只看该作者
深入浅出AVR单片机

使用特权

评论回复
16
m564522634| | 2012-6-26 10:05 | 只看该作者
大哥慢慢学吧你的程序也有点问题

使用特权

评论回复
17
m564522634| | 2012-6-26 10:07 | 只看该作者
你的I++没有什么作用

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
雷影少年 + 1 我很赞同
18
NE5532| | 2012-6-26 10:23 | 只看该作者
楼主别仿真了,就在开发板上弄吧。

使用特权

评论回复
19
雷影少年|  楼主 | 2012-6-26 10:25 | 只看该作者
本帖最后由 雷影少年 于 2012-6-26 10:32 编辑

17# m564522634
是i--,本来这个程序是一个动态显示的程序,因为程序出了点问题,调试的时候我就把程序改成了静态显示,来看看是不是显示模块有问题。
静态显示的时候变量i是没有用的
这是全部程序:使8位数码管分别显示0~7这8个数
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code seg[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
void delay(unsigned char);
void main()
{
uint c,i;
uchar d;
while(1)
{  
  c=0;
  i=15;
  d=0xfe;
  while(i)
  {
   P2=d;   
   P0=seg[c];
   d=_crol_(d,1);
   delay(10);
   c++;
   if(c==8)
   c=0;
   if(d==0)
   d=0xfe;
   i--;
  }  
}
}
void delay(uchar x)
{
  uchar a,b;
for(a=10;a>0;a--)
  for(b=x;b>0;b--);
}}

使用特权

评论回复
20
lwj96168| | 2012-6-26 10:32 | 只看该作者
学习中!:D

使用特权

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

本版积分规则

个人签名:高明的设计不在于是否用了最新的技术,在于是否能用最小的成本做出可靠的东西来。

11

主题

714

帖子

0

粉丝