C语言,把下面每一个语句的意思 详细的说清楚,含义,越详细越好。

#include <AT89X51.h>
#define uchar unsigned char
#define uint unsigned int
uchar disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(int k)
{
uchar i;
uint j;
for(i=0;i<124;i++)
for(j=0;j<k;j++);
}
void main()
{
uchar a,b=0;
while(1)
{
b=0x01;
for(a=1;a<3;a++)
{
P3=0xff;
P2=disp[a];
P3=~b;
delay(2);
b=b<<1;
}
}
}

#include <AT89X51.h> /* 编译时包含AT89X51.h这个头文件,里面应该定义了一些东西,如果这个文件不存在,编译无法进行。 */
#define uchar unsigned char /* 宏定义,表示uchar类型就是unsigned char, 一般是为了方便,从而不用写太长东西*/
#define uint unsigned int /* 宏定义,表示uint 类型就是unsigned int , 一般是为了方便,从而不用写太长东西*/
uchar disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; /* 定义了一个uchar数组,里面存了16进制值对应的字符*/
void delay(int k) /* 声明一个函数定义 */
{
uchar i;
uint j;
for(i=0;i<124;i++)
for(j=0;j<k;j++); /*这里用了两套循环,但没有包含实质操作,就是为了让程序进行计数以便延时*/
}
void main() /*主函数,C语言的唯一入口函数,也只能定义一个main*/
{
uchar a,b=0; /*变量声明*/
while(1) /* 死循环,除非在循环体内加入break语句。 */
{
b=0x01; /*初始化变量b为0x01*/
for(a=1;a<3;a++) /*从1到2循环两次下面的循环体*/
{
P3=0xff; /*置P2为全1字符,实际上P2,P3在本部分代码未定义,如果在头文件中也未声明将无法编译;如果有定义,则这两个变量是全局变量*/
P2=disp[a]; /*以a的值为下标取数组disp的相应值赋给P2*/
P3=~b; /*将b取反后赋给P3,取反后的值应为:0xFE*/
delay(2);
b=b<<1; /*将b左移1位*/
}
/*根据前面的注释,以及初步判断,P2,P3应为单片机并口地址;对其赋值相当于置端口各位的置;由于死循环中的小循环不停地取0xF9和0xA4给P2端口,然后对P3分别置0xFE和0xFD,估计是P2口用于选通什么东西,然后对选通的东西进行置位*/
}
}追问

最近做单片机需要代码

能不能写出来

男神

c语言

全部小程序合成一个程序

温馨提示:答案为网友推荐,仅供参考