51单片机最简单的C语言编程求教

用4位共阴型数码管动态显示“1234”,
#include "reg51.h"
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

void IN_Init()
{
P1=0x00;
P2=0x00;
}

void Delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<100;j++);
}

void Disp1234()
{
unsigned int i;
unsigned int temp=0x6e;
for(i=1;i<5;i++)
{
P2=temp;
P1=table[i];
Delay(20);
temp=temp<<1;
}
}

void main()
{
IO_Init();
while(1)
{
Disp1234();
}
}

那个table里面的数值是怎么确定的?temp=temp<<1有什么作用?

第1个回答  2011-10-10
你把里面的数字转换成二进制,比如table[0]=0x3f=00111111b;
由于你这个是共阴极数码管,高电平有效,所以写一的地方对应的LED都点亮 至于那七根数码管以及一个小数点和二进制位数对应关系你可以上网上查一下,简单的说小数点也就是DP是最高位,其他的那七根数码管从最上面那个开始顺时针一共是六根从bit(0)到bit(5),最后横着那根是bit(6)。希望能帮到你。至于你说的TEMP对应P2口,得有硬件图才可以知道有什么作用。本回答被提问者采纳
第2个回答  2011-10-10
table 为一维数组已赋值

temp=temp<<1 temp先向左位移一位再赋给temp追问

呃,这个我知道,我问的是table里面的值是怎么得到的,比如说table[0]是0x3f,这个0x3f是怎么得来的,是随意写的,还是硬件规定的,还是怎样。。。

追答

规定的

追问

呃,不知道是你没听清楚,还是我说不明白:
我指的是开始那个全局数组unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
,在程序运行前就确定了,里面的11个16进制数是怎样得到的

相似回答