21.2.2 硬件编程

1.在AT89C51的P1.0接了一个LED灯,编写程序,使LED灯闪烁。

分析:要使LED灯闪烁,可使P1.0在高电平和低电平之间不断地切换。如果在程序中高电平和低电平切换得太快,将看不到闪烁效果,因此,还需要编写一段延时程序。

参考答案:


include<reg51.h>

void delay(void)

{

unsigned int i;

for(i=0;i<20000;i++)

}

void main(void)

{

while(1)

{

P1=0xfe;//P1=1111 1110B,P1.0输出低电平

delay();//延时一段时间

P1=0xff;//P1=1111 1111B,P1.0输出高电平

delay();//延时一段时间

}

}


2.在AT89C52单片机的P1.4~P1.7接有4个发光二极管,P1.0~P1.3接入4个开关,编程将开关的状态反映到发光二极管上。

参考答案:


include<reg51.h>

void main(void)

{

while(1)

{

P1=0x0F;

P1=p1<<4;

}

}


3.如图21.1所示,在AT89C51的P1口接了8个LED灯,编写一个函数,使这8个LED灯逐个循环点亮(同一时刻只有一个LED灯点亮),点亮一个LED灯后进行一段延时,延时函数为delay()。

21.2.2 硬件编程 - 图1

图 21.1 LED原理图

分析:AT89C51的P1口各脚为高电平,要点亮某个LED灯,只需要使连接该LED灯的接脚为低电平即可。首先设置P1口的0xFE(二进制为0b 1111 1110),即可点亮P1.0口的LED灯,然后通过移位操作,可循环点亮各LED灯。

参考答案:


void led()

{

i=0xFE;

while(1)

{

P1=i;

delay();

i=~i;

i<<=1;

i=~i;

if(i==0xFF)

i=0xFE;

}

}