P0口加上上拉,估计问题就解决了 |
P0口加上拉试试,应该就解决了 |
P0口加上拉试试. |
数组定义应该是死循环里面这样写 |
行,小生多谢各位前辈啦! |
看看p0 上拉 看看 |
![]() |
我把你的程序修整和精简了下。实现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); } } } |
上拉电阻1K以上,限制电流小于5mA。 |
还是用个锁存器,比较靠谱! 虽然我从来没有直接把数码管接在IO口上,但是我考虑IO口的输出电流本来就小,再串个电阻,数码管还能正常工作吗? |
lz用的是共阳数码管P0口好像不用加上拉电阻吧, |
加上拉电阻应该就可以了 |
把p0口改成p2口(程序和数码管一起改)试试看 |
接10欧姆的上拉,那是要单片机的命。我也是发现过同样的情况,是仿真软件的问题,换成其他2位或者4位数码管试试看 |
楼上说接10欧姆的上拉,那是要命的,当输出高的时候,还不致命,当P0输出低的时候,就会烧毁IO口,从而烧掉单片机 |
问题出在xdata uchar num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 你的码表存到xdata中,而89c51就没有xdata,应该定义成data |
P0口是需要上拉电阻的,10欧左右吧 |
PO要加上啦 |
加上拉电阻 |
数码管最好别用P0口。其他口内部都有上拉,唯独P0没有。而且其推拉能力小一些。 |
加了上拉电阻也没反应 |
这个程序的问题是运行开始后,P0口的电平始终不变 |
行,我试试 |
如果是 51 的话,注意 P0口的上拉设计 |
P0口加上拉试试. |