哥们 首先告诉你,你这个程序是错误的,肯定编译不过去,因为有2个main函数。我理解第五行的void main (uint i){while (i--);}
应该是void delay (uint i){while (i--);},这是个延时函数,你下面的main函数里就调用了这个delay(100)。前腊你可以按我说的改改试试能不能编译成功。如果按我说的改,那应该是这个意思:前4行是些个头文件啊,宏定义啊,就不说了。第六行sbit是定义位变量,也就是51单片机的IO口。第七行是定义了一个LED的译码表,也就是让P0输出不同的组合来点亮数码管的不同段位组合,来显示0~9这些字符。8~11行就不说了,相信你能看懂。12行把buf里的数值从P0输出以控制led显示,cs是个片选开关,这里应该是用了两片led控制电路,cs1和cs2哪个为0,就写入到哪片led控制电路。wr应该是写入的锁存,就是说wr=1时表示可以写入,wr=0就保存现在的值,P0输入值再怎么变LED的链团显示都不会变了。第13行同样道理,操作另一个led控制电路。然棚悔橘后第14行延时100个时间单位。第15行给两片led都写入0xff,其实也就是清空显示,为下一次显示做好准备。第16行是给buf的序号增加1,其实buf适合环形缓冲区,这样也就完成了buf里0~7这八个数字循环显示。不知道我解释明白了没有
#include
#include
#define uchar unsigned char //uchar 等效于unsigned char
#define uint unsigned int// 同上
void main (uint i)//主函数,应该是大猛void delay(uint)
{while (i--);}
sbit cs1=P3^0;
sbit cs2=P3^1;
sbit wr=P3^2;
uchar code LED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 ,0xff};//数码管字符表
uchar buf[8]={0,1,2,3,4,5,6,7}
void main ()//两个主函数?
{uchar k;
k=0;
while(1)
{
cs1=0;//将数据写入CS2
cs2=1;
P0=LED[buf[k]];
wr=1;//模拟的总线,将P0数据锁存
wr=0;
cs1=1;////将数据写入CS1
cs2=0;
P0=_cror_(0x7f,k);//循环右移,点亮数码管的某一族纳段
wr=1;wr=0;
delay(100);延时
cs1=cs2=0;
P0=0xff;
wr=1;
wr=0;
k=(k+1)%8//少了一个“;”
}
}
总的看来好像是:看数码管的某一段与P0的对应关系
一般数码管与数字的对应关系,根据接线关系进行相应改动
0:0xfc,
1:0x60,
2:0xda,
3:0xf2,
4:0x66,
5: 0xb6,
6: 0xbe,
7: 0xe0,
8: 0xfe,
9: 0xf6,
这是一个数码管循环显示程序。P0口是段码输出