74ls138这段C语言什么意思

#include <intrins.h>

void delay1s(void);
    
void main()
{
  char num;
    while(1)
    {
    for(num=0;num<8;num++)
        {
        P1=num;
        delay1s();
        }
    }
}

void delay1s(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=167;c>0;c--)
        for(b=171;b>0;b--)
            for(a=16;a>0;a--);
    _nop_();  //if Keil,require use intrins.h
}

while(1)死循环啊,P1=num;这里的P1在哪里声明的?
delay1s就是三层循环,啥也不干,就是执行167*171*16次循环,应该就是延时用的。

74ls138 是 3线8线译码器
这段代码是用枚举的方法,产生(10进制 0-7) 按二进制表示就是 000,001,010,011,100,101,110,111
这 0-7 输出到 P0 的低 3 位 P1^0,P1^1,P1^2 这3个信号接 74ls138 的输入线,再用 LED 或 电压表的方式测量 74ls138 8条输出线,对比74ls138 真值表验证 74ls138 的逻辑。