前提:这里的程序只适合于第一次接触51单片机的新手,希望通过一些简单程序帮助新手进行过渡,其中某些习惯不适合于产品,拥有一定经验的选手可以直接划走了,以免浪费时间,谢谢。
1.点亮LED
新手第一课-点亮LED。LED的本质就是一个二极管,当正极电压与负极电压的压差大于导通电压,LED导通便可发光,因此51单片机可以通过控制IO口输出不同的电平控制LED灯的点亮与熄灭。
2.开关
单片机某个引脚状态可以通过逻辑改变,为了让LED灯可以按照意愿点亮和熄灭,我们可以设置开关控制LED。
3.程序
#include "reg51.h"
#define u8 unsigned char
#define u16 unsigned int
sbit Led=P2^0;
sbit Key=P1^0;
void control();
void delay_ms(u8 time);
void delay_ms(u8 time)
{
u8 i,j;
while(time)
{
i = 12;
j = 169;
do
{
while(--j);
}while(--i);
time --;
}
}
void control()
{
if(Key == 0)
{
delay_ms(10);
if(Key == 0)
{
Led = !Led;
while(Key == 0);
}
}
}
void main()
{
while(1)
{
control();
}
}
4.解释
delay_ms函数,该函数通过while语句的空跑,达到单片机延时的效果,其中形参time用来控制延时多少毫秒。
control函数:按键在按下和抬起的时候会有大约5-10ms的机械抖动,此时电压是不稳定的,为了消除这种抖动的影响,一般有两种解决方式,一种是硬件上添加电容,另一种是软件延时处理,本次选择第二种,当检测到电平变化时,延时10ms后再次判断电平,确保按键的确按下。这个延时时间可以自行调整,保证效果就行。其中while语句用于松手检测,判断本次按压是否结束,从而执行相应操作。