求救,单片机c51 用四位七段数码管动态显示一个数字,怎么不行呢????

#include<reg51.h>sbit a=P3^0;sbit b=P3^1;sbit c=P3^2;sbit d=P3^3;unsigned char code dcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};void delay1ms(unsigned int x){ unsigned char j; while(x--){for (j=0;j<123;j++){;} }}void main (void){ unsigned char n=1234; while(1){ P2=0xff; P2=dcode[n/1000];a=1;b=1;c=1;d=0;delay1ms(10); P2=0xff; P2=dcode[n%1000/

100];a=1;b=1;c=0;d=1;delay1ms(10); P2=0xff; P2=dcode[n%1000%100/10];a=1;b=0;c=1;d=1;delay1ms(10); P2=0xff; P2=dcode[n%1000%100%10];a=0;b=1;c=1;d=1;delay1ms(10);}}

第1个回答  2012-11-04
你图里的LED数码管是共阴的接法,当P2口的某位置1时相应的段点亮。

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

上面的段码是无法得到正确的显示,改为如下就可以了:

unsigned char code dcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
第2个回答  2012-11-10
#include<reg51.h>

sbit a = P3^0;
sbit b = P3^1;
sbit c = P3^2;
sbit d = P3^3;

unsigned char code dcode[] = {
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
void delay1ms(unsigned int x)
{
unsigned char j;
while(x--) for (j = 0; j < 123; j++);
}
void main (void)
{
unsigned int n = 1234;
while(1){
P2 = dcode[n / 1000]; d = 1; delay1ms(10); d = 0;
P2 = dcode[n / 100 % 10]; c = 1; delay1ms(10); c = 0;
P2 = dcode[n / 10 % 10]; b = 1; delay1ms(10); b = 0;
P2 = dcode[n % 10] ; a = 1; delay1ms(10); a = 0;
}
}
P2用共阳的数码管。

单片机c51 用四位七段数码管动态显示一个数字。本回答被提问者和网友采纳
第3个回答  2012-11-07
你的程序我看了,程序是用共阳的数码管,不知道你仿真时用的是不是共阳的。估计是这里错的
还有一点,建议在编程时一般不要直接使用单片机的端口来进行直接复制,最好先把单片机的端口宏定义一下
第4个回答  2012-11-04
修改延时值
相似回答