唯一与单片机控制小灯亮灭不同的是引入了开关,可以使开关一端接地,另一端接P1.0引脚,程序中判断P1.0引脚的输入,如果按下开关,相当于输入了0,由此来控制小灯的状态。
思路:
1.写主函数:在主函数中判断开关是否按下,如果按下了则led相应根据程序中你所想要的方法变化。
2.定义主函数中用到的变量以及编写主函数中所需要调用的程序。例如:主函数中用到的延时函数以及延时函数中所需要的变量,定义led所对应的引脚以及开关所对应的引脚。
3.编译,生成可执行程序,输出.hex文件,将其烧入单片机中,实际操作对比程序是否达到预期效果,如果没有则继续改进程序。
例如以下几种操作:(便于简单理解按键控制)
此处电路图按最小系统来接
第一种(判断开关是否按下,如果按下则灯的状态转换一次)
#include<reg52.h>
sbit led = P3^4; //led接P3.4引脚
sbit button = P1^0; //开关接P1.0引脚
int xms,i,j;
void delay(xms) //定义延时x ms的延时函数
{
for(i = 0; i<xms; ++i)
for(j = 0; j<110; ++j);
}
void main()
{
while(1)
{
if(button == 0) //判断开关是否按下
{
delay(20); //延时20ms,消除抖动
if(button == 0) //二次判断开关是否按下
{
led = ~led; //led状态反置
}
}
}
}
第二种(判断开关是否按下,如果按下则灯灭,如果没有则灯一直亮)
#include<reg52.h>
sbit led = P3^4;
sbit button = P1^0;
int xms,i,j;
void delay(xms) //x ms
{
for(i = 0; i<xms; ++i)
for(j = 0; j<110; ++j);
}
void main()
{
while(1)
{
if(button == 0)
{
delay(20);
if(button == 0)
{
led = 0;
}
else
{
led = 1;
}
}
}
}