本帖最后由 jd吕凯 于 2010-7-29 11:07 编辑
因为当时买材料时什么也不懂,买了一只共阴两位数码管。准备练习一下单片机控制数码管显示00~99。于是找来资料开始看单片机显示一位数码管的程序(也是在这个21IC上下载的)。现在把程序贴上来:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff
};
void DelayMS(uint x)
{
uchar t;
while(x--)
for(t=120;t>0;t--);
}
void main()
{
uchar i=0;
P0=0x00;
while(1)
{
P0=~DSY_CODE;
i=(i+1)%10;/*显示0-9*/
DelayMS(200);
}
}
让我疑惑的是uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff
};我把这个表示段码的数组里的16进制数转化为2进制时觉得跟要在数码管上显示的0~9没法对应起来,电路图里的数码管是共阴的。再说也是直接连在单片机的P0口上的。不过在proteus上这个数码管显示是正常的。而我在之前的理解是,如果把数码管对应的8个LED,按网上说的那样编号即a,b,c,d,e,f,g,dp与P0口的P0.7~P0.0对应连接起来,数组里的十六进制数应该是这样的:{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F}这样转化出来的2进制是0011 1111——》数码管:0, 0000 0110——》数码管:1,……0110 1111——》9。可我这样修改后编译产生的.hex加到proteus里仿真却是乱码的。
所以我现在的问题就是我贴上来的那个程序里的数组中的数是怎样跟数码管对应起来的????? |