找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10525|回复: 26
收起左侧

这个单片机程序 为什么数码管不亮呢?

  [复制链接]
ID:301728 发表于 2018-4-4 12:40 | 显示全部楼层 |阅读模式
初学者,求解答,程序如下
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. xdata uchar num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  4. void delay(uchar i)
  5. {
  6. uchar t;
  7. while(i--)
  8. {
  9.   for(t=0;t<120;t++);
  10. }
  11. }
  12. void main()
  13. {
  14. uchar i;
  15. P0=0Xff;
  16. while(1)
  17. {
  18.   for(i=1;i<=9;i+=2)
  19.   {
  20.    P0=num[i];
  21.    delay(500);
  22.   }
  23.   for(i=0;i<=8;i+=2)
  24.   {
  25.    P0=num[i];
  26.    delay(500);
  27.    }
  28. }
  29. }
复制代码
]}22])4}FQEAAOB3`I{(%S5.png
回复

使用道具 举报

ID:251640 发表于 2018-4-4 13:29 | 显示全部楼层
P0口加上拉试试.
回复

使用道具 举报

ID:301985 发表于 2018-4-4 14:21 | 显示全部楼层
如果是 51 的话,注意 P0口的上拉设计
回复

使用道具 举报

ID:301728 发表于 2018-4-4 15:40 | 显示全部楼层
行,我试试
回复

使用道具 举报

ID:301728 发表于 2018-4-4 15:55 | 显示全部楼层
这个程序的问题是运行开始后,P0口的电平始终不变
回复

使用道具 举报

ID:301728 发表于 2018-4-4 15:56 | 显示全部楼层
加了上拉电阻也没反应
回复

使用道具 举报

ID:7485 发表于 2018-4-4 16:27 | 显示全部楼层
数码管最好别用P0口。其他口内部都有上拉,唯独P0没有。而且其推拉能力小一些。
回复

使用道具 举报

ID:301494 发表于 2018-4-4 16:31 | 显示全部楼层
加上拉电阻
回复

使用道具 举报

ID:302072 发表于 2018-4-4 16:32 | 显示全部楼层
PO要加上啦
回复

使用道具 举报

ID:302084 发表于 2018-4-4 16:56 | 显示全部楼层
P0口是需要上拉电阻的,10欧左右吧
回复

使用道具 举报

ID:287575 发表于 2018-4-4 17:47 | 显示全部楼层
问题出在xdata uchar num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
你的码表存到xdata中,而89c51就没有xdata,应该定义成data
回复

使用道具 举报

ID:287575 发表于 2018-4-4 17:51 | 显示全部楼层
楼上说接10欧姆的上拉,那是要命的,当输出高的时候,还不致命,当P0输出低的时候,就会烧毁IO口,从而烧掉单片机
回复

使用道具 举报

ID:19715 发表于 2018-4-4 18:37 | 显示全部楼层
接10欧姆的上拉,那是要单片机的命。我也是发现过同样的情况,是仿真软件的问题,换成其他2位或者4位数码管试试看
回复

使用道具 举报

ID:302136 发表于 2018-4-4 19:10 | 显示全部楼层
把p0口改成p2口(程序和数码管一起改)试试看
回复

使用道具 举报

ID:302193 发表于 2018-4-4 21:17 | 显示全部楼层
加上拉电阻应该就可以了
回复

使用道具 举报

ID:301949 发表于 2018-4-4 21:35 | 显示全部楼层
lz用的是共阳数码管P0口好像不用加上拉电阻吧,
回复

使用道具 举报

ID:46065 发表于 2018-4-4 22:02 | 显示全部楼层
还是用个锁存器,比较靠谱!
虽然我从来没有直接把数码管接在IO口上,但是我考虑IO口的输出电流本来就小,再串个电阻,数码管还能正常工作吗?
回复

使用道具 举报

ID:302217 发表于 2018-4-4 22:05 | 显示全部楼层
上拉电阻1K以上,限制电流小于5mA。
回复

使用道具 举报

ID:160834 发表于 2018-4-4 22:38 | 显示全部楼层
我把你的程序修整和精简了下。实现0到9数字每秒变化一次。 另外 AT89C51单片机是需要加上拉电阻的。 仿真程序里只有AT89系列单片机。所以 做仿真时尽量不用P0口。 我这里先改成了P1口。实际使用时 STC89C52单片机  P0口也不需要加上拉的。 其它STC12或15或F8系列单片机还可以设置4种输出模式。晶振也可以用内部的。这个视你自己的用途选择吧。以下程序 仿真通过。 另外  仿真的数码管选共阳数码管。

#include<reg51.h>

unsigned char num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void delay(unsigned int i)
{
   while(i--);
}

void main()
{
  unsigned char i;
       
  while(1)
  {
    for(i=0;i<10;i++)
    {
     P1=num[i];
     delay(50000);
    }
  }
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:160834 发表于 2018-4-4 22:41 | 显示全部楼层
20180404224104.jpg 仿真图片如下。运行程序就可以看到数码管从0到9变化。
回复

使用道具 举报

ID:46475 发表于 2018-4-4 23:52 | 显示全部楼层
看看p0 上拉 看看
回复

使用道具 举报

ID:301728 发表于 2018-4-5 09:08 | 显示全部楼层
行,小生多谢各位前辈啦!
回复

使用道具 举报

ID:302445 发表于 2018-4-5 18:08 来自手机 | 显示全部楼层
数组定义应该是死循环里面这样写
回复

使用道具 举报

ID:302445 发表于 2018-4-5 18:12 来自手机 | 显示全部楼层
数组定义应该是unsigned char code num[]=  for循环应该是这样for(i=0;i<9;i++)  并且只用写一个for循环……

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:302544 发表于 2018-4-5 21:09 | 显示全部楼层
P0口加上拉试试.
回复

使用道具 举报

ID:302672 发表于 2018-4-6 11:33 | 显示全部楼层
P0口加上拉试试,应该就解决了
回复

使用道具 举报

ID:302672 发表于 2018-4-6 11:33 | 显示全部楼层
P0口加上上拉,估计问题就解决了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表