唯一与单片机控制小灯亮灭不同的是引入了开关,可以使开关一端接地,另一端接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; } } } }