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.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;
}
}