学习笔记——独立按键的基本操作

目录

  • 一、任务简述
  • 1.1 基本要求
  • 二、实现方法
  • 三、参考代码

一、任务简述

在CT107D单片机上,首先将J5处的跳帽接到2-3引脚,使按键S4-S7四个按键的另外一端接地从而成为4个独立键盘。在扫描按键的过程中,发现有按键触发信号后,先做去抖动处理,当确认为按键按下时,才进行相应的功能处理。

1.1 基本要求

按下的按键——LED亮的灯
S7 —— LED1
S6 —— LED2
S5 —— LED3
S4 —— LED4
按键松开即LED灯熄灭,按键均需做去抖动处理。

二、实现方法

实现方法很简单,先弄清逻辑总线:
LED部分:要想用P0去控制LED灯,首先需要M74HC573MIR锁存器导通,就是要Y4C输入高电平,也就是需要74HC02输出高电平,因为它是一个或非门,当51单片机上电复位后,各输出口的状态都是1,当执行指令MOVX@DPTr,A时,这是51单片机写,对应的WR为低电平,则Y4必定为低电平,这样才能通过或非门输出高电平;再利用74HC138译码器使得P25,P26,P27为0,0,1,则三个输入端A,B,C为0,0,1。
学习笔记——独立按键的基本操作_第1张图片

按键部分:
首先将J5处的跳帽接到2-3引脚,使按键S4-S7四个按键的另外一端接地从而成为4个独立键盘。然后可以根据原理图知道控制四个按键开关的引脚为P30,P31,P32,P33。
学习笔记——独立按键的基本操作_第2张图片

三、参考代码

#include "reg52.h"


sbit S7 = P3^0;
sbit S6 = P3^1;
sbit S5 = P3^2;
sbit S4 = P3^3;

sbit LED1 = P0^0;
sbit LED2 = P0^1;
sbit LED3 = P0^2;
sbit LED4 = P0^3;


void Select_HC573(unsigned char channel)
{
		switch(channel)
		{
			case 4:
				P2 = (P2 & 0x1f) | 0x80;
			break;
			case 5:
				P2 = (P2 & 0x1f) | 0xa0;
			break;
			case 6:
				P2 = (P2 & 0x1f) | 0xc0;
			break;
			case 7:
				P2 = (P2 & 0x1f) | 0xe0;
			break;
		}
}

void delay()//20ms延时子程序
{
unsigned char i,j;
	for(i=0;i<100;i++)
	for(j=0;j<100;j++);
}		

void Scan_Key()
{
	
	if(S7 == 0)
	{
		delay();
		if(S7 == 0)
	{
		LED1 = 0;
		while(S7 == 0);
		LED1 = 1;
	}
	}
	
		if(S6 == 0)
	{
		delay();
		if(S6 == 0)
	{
		LED2 = 0;
		while(S6 == 0);
		LED2 = 1;
	}
	}
	
		if(S5 == 0)
	{
		delay();
		if(S5 == 0)
	{
		LED3 = 0;
		while(S5 == 0);
		LED3 = 1;
	}
	}
	
		if(S4 == 0)
	{
		delay();
		if(S4 == 0)
	{
		LED4 = 0;
		while(S4 == 0);
		LED4 = 1;
	}
	}
}


void main()
{
	Select_HC573(4);
	while(1)
	{
		Scan_Key();
	}
}

学习来源于:https://www.bilibili.com/video/BV1Bt41187hw?p=3

你可能感兴趣的:(学习笔记,蓝桥杯,学习,单片机,c语言)