独立按键控制LED状态,显示二进制,移位

文章还是基于51单片机(stc89c52RC)来实现的,学习江科大教程的学习日志

单片机上电所有IP口默认高电平

独立按键控制LED状态,显示二进制,移位_第1张图片

 由图可知,当按键未按下,读寄存器的值为1,按下后接地读寄存器的值为0

CPU可以直接访问寄存器

要用到51单片机的独立按键控制LED状态,显示二进制,移位_第2张图片位声明

 了解运算的逻辑可以实现不同的效果

独立按键控制LED状态,显示二进制,移位_第3张图片

C51基本语句 独立按键控制LED状态,显示二进制,移位_第4张图片

  独立按键控制LED状态,显示二进制,移位_第5张图片

 按键抖动,信号不稳定,对按键检测造成干扰,要进行消抖(软件方法:delay函数延时){按键消抖一般用在按下和松开后只显示一种状态的情形,若按下一种状态,松开一种状态则不需要消抖}

#include 

void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
	
		xms--; 
	}


}

void main()
{
	while(1)
	{
		if(P3_1==0)
		{				
			Delay(20);
			while(P3_1==0);//先消抖即在松开后才会执行下一句,接收到第一个信号就开始消抖(让cpu空转)
			Delay(20);
			P2_0=~P2_0; 
			
		}	
		

接下来用上消抖来使P2寄存器的LED显示二进制

#include 

void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
	
		xms--; 
	}


}

void main()
{	
	unsigned char LED_Num=0;//这种类型有八位正好对应寄存器,可以看作一个寄存器
	while(1)
	{
		if(P3_1==0)
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			//1111 1111上电热高电平
			LED_Num++;//八位二进制
			P2=~LED_Num;//由此可知,可以将一个八位或一个字节来带入到寄存器来显示他的状态
			
		
		
		}	
	}
}
	

最后要实现的效果为按键移位(LED从低到高位亮灭)

首先演示的是单个按键控制单顺序移位

#include 



void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
	
		xms--; 
	}


}
unsigned char LED_Num; //全局变量上电默认为1

void main()//按位左移0000 0001 / 0000 0010/0000 0100
{		
		P2=~0x01;
		while(1)
		{
			if(P3_1==0)
			{
				Delay(20);
				while(P3_1==0);
				Delay(20);
				LED_Num++;
				if(LED_Num>=8)
					LED_Num=0;//不加花括号,需要加缩进且只识别第一行
				P2=~(0x01<

接下来是两个按键控制左右移位

#include 



void Delay(unsigned int xms)		//@11.0592MHz
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
	
		xms--; 
	}


}
unsigned char LED_Num; //全局变量上电默认为1

void main()//按位左移0000 0001 / 0000 0010/0000 0100
{		
		P2=~0x01;
		while(1)
		{
			if(P3_1==0)
			{
				Delay(20);
				while(P3_1==0);
				Delay(20);
				LED_Num++;
				if(LED_Num>=8)
					LED_Num=0;//不加花括号,需要加缩进且只识别第一行
				P2=~(0x01<

结束,LED和按键圆满结束!

你可能感兴趣的:(学习日志,51单片机)