#include
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 用四位七段数码管动态显示一个数字。
你图里的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};
另外 unsigned char n=1234; 这句的结果已经溢出了,应该改为unsigned int n=1234; 才能得到正确的结果。这个楼上已经说过了。
你好
你先将unsigned char n=1234;更改为unsigned int n=1234;再试试
因为unsigned char 定义的是无符号8位数,数值范围0-255,而unsigned int 定义的是无符号16位数,数值范围0-65535,你定义的n=1234远超过了255,如果能显示,数值不对,那就是这个了,如果不显示,再查查程序结构。
P2=dcode[n%1000%100/10];a=1;b=0;c=1;d=1;delay1ms(10);
建议改成
a=1;b=0;c=1;d=1;P2=dcode[n%1000%100/10];delay1ms(10);
其他的按楼上说的试试