51单片机入门教程_独立按键控制系列

一、老规矩 先上代码

#include <REGX52.H>

void main()
{
	while(1)
	{
		if(P3_1==0 || P3_0==0)	//如果K1按键或K2按键按下
		{
			P2_0=0;		//LED1输出0,点亮
		}
		else
		{
			P2_0=1;		//LED1输出1,熄灭
		}
	}
}

我们可以看到其本质还是对端口进行操作 因而我们需要从其原理图继续出发

 我们可以看到 独立按键的每一个口右侧接地 因此单我们点击独立按键的时候 MCU所接受到的是低电平信号 所以我们可以利用这点来控制LED灯的亮灭

但是其缺点也很明显 就是我们只有持续按住的时候 LED灯才能够保持亮着的状态

二、通过独立按键对LED灯进行一波控制

1、首先,我们需要理解独立按键本身所存在的一些问题

 对于机械开关所存在的抖动,我们需要利用延时函数进行处理,从而使我们的控制达到稳定的状态

2、因此我们的代码应该这样子设计

#include <REGX52.H>

void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

void main()
{
	while(1)
	{
		if(P3_1==0)			//如果K1按键按下
		{
			Delay(20);		//延时消抖
			while(P3_1==0);	//松手检测
			Delay(20);		//延时消抖
			
			P2_0=~P2_0;		//LED1取反
		}
	}
}

其中 注意松手检测处 如果K1按下的时候 没有松手 就会在while里面一直循环不出来 也就没办法执行下一步语句 即灯不会亮

当我们再次按下K1的时候 灯就会重新暗淡下去 因为我们此时对灯进行了取反

三、通过独立按键对LED显示二进制

1、老规矩 先上代码

void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

void main()
{
	unsigned char LEDNum=0;
	while(1)
	{
		if(P3_1==0)			//如果K1按键按下
		{
			Delay(20);		//延时消抖
			while(P3_1==0);	//松手检测
			Delay(20);		//延时消抖
			
			LEDNum++;		//变量自增
			P2=~LEDNum;		//变量取反输出给LED
		}
	}
}

2、在二的基础上 对控制灯的二进制数进行操作 关键点就是二进制的转换罢了

四、通过独立按键对LED显示二进制

1、上代码

#include <REGX52.H>
void Delay(unsigned int xms);

unsigned char LEDNum;

void main()
{
	P2=~0x01;				//上电默认LED1点亮
	while(1)
	{
		if(P3_1==0)			//如果K1按键按下
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			
			LEDNum++;		//LEDNum自增
			if(LEDNum>=8)	//限制LEDNum自增范围
				LEDNum=0;
			P2=~(0x01<<LEDNum);	//LED的第LEDNum位点亮
		}
		if(P3_0==0)			//如果K2按键按下
		{
			Delay(20);
			while(P3_0==0);
			Delay(20);
			
			if(LEDNum==0)	//LEDNum减到0后变为7
				LEDNum=7;
			else			//LEDNum未减到0,自减
				LEDNum--;
			P2=~(0x01<<LEDNum);	//LED的第LEDNum位点亮
		}
	}
}

void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

2、so easy 看看注释 你学会了不?

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是DS小龙哥编写的(STC)51单片机开发手册,适合51单片机入门初学者,大学生等当做工具书使用。实验的平台采用的是普中科技单片机平台,文章中的知识点详细,代码清晰,注释清楚,可以复制粘贴,配套代码详细。目前写了4个大章节,后续会持续更新,更新后重新下载即可。 每个例子的完整的工程源码在PDF里有百度云盘的下载链接。失效了可以私信发送。 目前PDF里包含的目录如下: 51单片机开发手册 1 一、 单片机开发入门知识介绍 1 1.1 51单片机介绍 1 1.2 市场上的主流单片机种类 1 1.3 FPGA与单片机区别 2 1.4 DSP和单片机区别 3 二、搭建开发环境 4 2.1 STC单片机命名介绍 4 2.2 安装keil软件 4 2.3 新建工程 5 2.4 下载程序 8 2.5 使用辅助工具计算延时时间 12 2.6 STC90C51系列单片机引脚图 13 三、 基础入门学习 14 3.1 LED灯模块 14 3.2 蜂鸣器模块 17 3.5 独立按键 18 3.6 矩阵键盘 22 3.7 独立数码管(静态数码管) 26 3.8 动态数码管 29 3.9 LED 16*16点阵 33 3.10 采用38译码器驱动8位数码管 48 四、单片机提高篇 53 4.1 定时器 53 4.2 中断 60 4.3 串口通信 71 4.4 NEC红外线遥控器解码 80 4.5 DS18B20温度传感器 87 4.6 EEPROM存储芯片(AT24C02) 96 4.7 DS1302 实时时钟芯片 107 4.8 PCF8591(ADC/DAC)转换芯片 119 4.9 (HC-SR04)超声波测距模块 130 4.10 使用计数器测量NE555脉冲频率 134 4.11 LCD1602显示屏 139 四、 单片机项目篇 146 5.1 16x16点阵滚动显示 146
51单片机入门教程30课软件工程源码+文档说明 51单片机入门例程TXT 第01课,了解单片机及单片机的控制原理和DX516的用法,控制一个L 第02课,用指令方式延时闪烁LED灯 第03课,跑马灯试验 第04课,读IO,用按钮控制点灯 第05课,标记的用法,用一个按键控制1个LED灯的亮灭 第06课,用定时器中断闪灯,定时器中断的学习 第07课,精确定时1秒钟闪灯 第08课,定时器中断跑马灯 第09课,自动变速的跑马灯试验 第10课,4个按键4级变速的跑马灯试验 第11课,一个按键控制的10级变速跑马灯试验 第12课,可编程自动控制跑马灯 第13课,用外中断方式读按键控制灯的亮灭 第14课,模拟PWM输出控制灯的10个亮度级别 第15课,写一个字节到24c02中 第16课,读一个24c02字节,读出上一课写入的字节来验证 第17课,写入按键次数到24c02,并读出来显示在4个LED上 第18课,嘀声报警信号输出试验 第19课,嘀嘀嘀间断声光报警信号试验 第20课,变频声救护车报警信号输出试验 第21课,按键音试验 第22课,音阶声音输出试验 第23课,按键控制音阶声音输出(电子琴) 第24课,单个按键控制多个音阶声音输出 第25课,乐谱方式输入的音乐播放 第26课,亮灯倒计时10秒,开始播放音乐 第27课,三个按键选择三首不同的音乐播放 第28课,一个按键选择播放六首音乐 第29课,本课试验写老鼠爱大米的乐谱到24c02中 第30课,从24c02中读出音乐来并播放音乐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值