51单片机 4个独立按键控制LED灯 (protues仿真)(C语言版)

51单片机 4个独立按键控制LED灯 仿真操作及代码展示 _ (protues仿真)_(C语言版)

一、思路及相关问题

1、逻辑思路:

当按下key1时 led1亮起来 因为按下去具有瞬时性不用while,用if语句,当松开时,用while(!key1) ,函数调用。
先在脑海里想象它的大致运行过程,其次在仿真软件protues上摆好元器件并连接,最后用keil4写对应代码。
需注意keil4软件上的设置如波特率,添加文件,勾选等等。
至少要了解C语言程序设计的基本功。

2、关于消抖:

通常的按键所用开关为机械性开关,当机械触电断开、闭合时、由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开、因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖
按键消抖有两种,
一种是 软件消抖: ;硬件消抖是通过采用外加零件来消除干扰抖动杂脉冲波,通常采用电容滤波、单稳延时电路等等。
一种是 软件消抖: 延时函数
参考链接:http://www.eeworld.com.cn/mcu/2012/0806/article_9776.html

二、有proteus及keil进行仿真效果

第一步找到芯片 AT89C51第二步找到按键开关BUTTON及LED灯还有电阻第二步找到按键开关BUTTON及LED灯还有电阻
在这里插入图片描述
第三步 将相关元器件连好线
第三步 将相关元器件连好线

三、打开keil4创建工程 代码及注释 调好波特率及添加文件相关工作 -----代码如下

#include<reg52.h>

unsigned int i;
sbit led1=P2^0; //定义第一个led灯
sbit led2=P2^1; //定义第二个led灯
sbit led3=P2^2; //定义第三个led灯
sbit led4=P2^3; //定义第四个led灯

sbit key1=P3^1; __ //定义第一个开关__
sbit key2=P3^2; //定义第二个开关
sbit key3=P3^3; //定义第三个开关
sbit key4=P3^4; //定义第四个开关

void delay() //延时函数 用于消抖
{
for(i=0;i<10;i++);
}
void key()
{
if(key10)
{
delay(); //延时 消抖
if(key1
0) //表示K1按下去
{
led1=0; // led1灯点亮
}
while(!key1); //表示_松开_按键key1
}
if(key20)
{
delay(); //延时 消抖
if(key2
0) //表示key2键被按下
{
led2=0; // led2灯点亮
}

  while(!key2);     //表示松开按键key2
}
if(k3==0)     
{
  delay();           //延时 消抖

  if(key3==0)    //表示key3键被按下
  {
  	led3=0;       // led3灯点亮
  }
  while(!key3);    //表示松开按键key3
}
if(key4==0)       
{
  delay();            //延时 消抖
  if(key4==0)   //表示key4键被按下
  {
  	led4=0;        // led4灯点亮
  }
  while(!key4);        //表示松开按键key4
}

}

void main()
{
while(1)
{
key();
}
}

四、运行程序后成功后,打开proteus右键单击单片机AT89C51,找到编辑,然后添加hex文件

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值