用库函数法控制AT89C51单片机P1.0 P1.2 P1.4 P1.6 P2.0 P2.2 P2.4 P2.6依此点亮
时间: 2023-08-29 10:05:40 浏览: 136
AT89C51单片机的P1口和P2口默认为输入状态,需要通过设置寄存器将其配置为输出状态。同时,为了点亮LED,需要将相应的IO口输出高电平或低电平。
以下是用库函数法控制AT89C51单片机点亮LED的示例代码:
```c
#include <reg51.h> // AT89C51寄存器定义头文件
void main()
{
P1 = 0x00; // 初始化P1口为低电平,确保LED灯处于熄灭状态
P2 = 0x00; // 初始化P2口为低电平,确保LED灯处于熄灭状态
while(1)
{
P1_0 = 1; // 点亮P1.0口的LED灯
P1_2 = 0;
P1_4 = 0;
P1_6 = 0;
P2_0 = 0;
P2_2 = 0;
P2_4 = 0;
P2_6 = 0;
delay(1000); // 延时1秒
P1_0 = 0;
P1_2 = 1; // 点亮P1.2口的LED灯
P1_4 = 0;
P1_6 = 0;
P2_0 = 0;
P2_2 = 0;
P2_4 = 0;
P2_6 = 0;
delay(1000);
P1_0 = 0;
P1_2 = 0;
P1_4 = 1; // 点亮P1.4口的LED灯
P1_6 = 0;
P2_0 = 0;
P2_2 = 0;
P2_4 = 0;
P2_6 = 0;
delay(1000);
P1_0 = 0;
P1_2 = 0;
P1_4 = 0;
P1_6 = 1; // 点亮P1.6口的LED灯
P2_0 = 0;
P2_2 = 0;
P2_4 = 0;
P2_6 = 0;
delay(1000);
P1_0 = 0;
P1_2 = 0;
P1_4 = 0;
P1_6 = 0;
P2_0 = 1; // 点亮P2.0口的LED灯
P2_2 = 0;
P2_4 = 0;
P2_6 = 0;
delay(1000);
P1_0 = 0;
P1_2 = 0;
P1_4 = 0;
P1_6 = 0;
P2_0 = 0;
P2_2 = 1; // 点亮P2.2口的LED灯
P2_4 = 0;
P2_6 = 0;
delay(1000);
P1_0 = 0;
P1_2 = 0;
P1_4 = 0;
P1_6 = 0;
P2_0 = 0;
P2_2 = 0;
P2_4 = 1; // 点亮P2.4口的LED灯
P2_6 = 0;
delay(1000);
P1_0 = 0;
P1_2 = 0;
P1_4 = 0;
P1_6 = 0;
P2_0 = 0;
P2_2 = 0;
P2_4 = 0;
P2_6 = 1; // 点亮P2.6口的LED灯
delay(1000);
}
}
void delay(unsigned int t)
{
unsigned int i, j;
for(i=0; i<t; i++)
{
for(j=0; j<125; j++); // 延时1ms
}
}
```
在上述代码中,用到了一个自定义的延时函数`delay()`,用于控制LED灯的闪烁时间。`delay()`函数中的两重循环,每次循环执行125次,相当于延时1ms,因此`t`参数表示延时的总时间,单位为毫秒。
阅读全文