一、思路及相关问题
1、逻辑思路:
当按下key1时 led1亮起来 因为按下去具有瞬时性不用while,用if语句,当松开时,用while(!key1) ,函数调用。
先在脑海里想象它的大致运行过程,其次在仿真软件protues上摆好元器件并连接,最后用keil4写对应代码。
需注意keil4软件上的设置如波特率,添加文件,勾选等等。
至少要了解C语言程序设计的基本功。
2、关于消抖:
通常的按键所用开关为机械性开关,当机械触电断开、闭合时、由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开、因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖
按键消抖有两种,
一种是 软件消抖: ;硬件消抖是通过采用外加零件来消除干扰抖动杂脉冲波,通常采用电容滤波、单稳延时电路等等。
一种是 软件消抖: 延时函数
参考链接:https://www.eeworld.com.cn/mcu/2012/0806/article_9776.html
二、有proteus及keil进行仿真效果
第二步找到按键开关BUTTON及LED灯还有电阻
第三步 将相关元器件连好线
三、打开keil4创建工程 代码及注释 调好波特率及添加文件相关工作 -----代码如下
#include
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(key10) //表示K1按下去
{
led1=0; // led1灯点亮
}
while(!key1); //表示_松开_按键key1
}
if(key20)
{
delay(); //延时 消抖
if(key20) //表示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文件
关键字:51单片机 独立按键 控制LED灯
引用地址:
51单片机 4个独立按键控制LED灯 (protues仿真)(C语言版)
推荐阅读最新更新时间:2024-11-16 23:17
51单片机点阵实验
1.电路图解析 1.1点阵实验图 P0控制全部行有效,P0输出低电平有效;74hc595输出控制全部列有效,输出高电平有效. 让P0^7的端口为低电平,P0的其他端口为高电平;D7的端口为高电平,则第一行第一列的led被点亮 1.2 74hc595的原理图 (1)D0~D7,并行输出,接LED。 (2)16号和8号引脚,分别接Vcc,Gnd。 (3)OE,13号引脚,低电平才输出有效,让它接地。 (4)10号引脚,主复位引脚,低有效。目前不需要复位,直接接VCC就好. (5)14号引脚SER,接在集成板的P3^4,为串行输入端。 (6)11号引脚SRCLK,接在集成板的P3^6;上升沿时,将
[单片机]
基于51单片机实现温度监测报警系统
具体功能实现 利用DS18B20实时检测温度并显示在LCD1602显示屏上,同时可以通过K1,K2,K3,K4设置最高温度和最低温度利用AT24C02可以实现掉电不丢失,最后当检测温度大于或小于最高温时,会在LCD1602显示屏上显示OV:H或OV:L。 使用器件: AT89C52、LCD1602显示屏、4只按键、AT24C02、DS18B20 实际图和运行图 : 由测试图中的LCD1602显示屏可以得出:当前室温是24.18℃,最高温限制为21℃,最低温限制为-2℃。 知识介绍: AT24C02芯片介绍 AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,AT24C02是一
[单片机]
8051单片机的中断发送
最近使用c8051做开发,串口程序移入工程时,整个程序竟然不跑了,加断点,调试,发现在串口查询发送出了问题,程序在查询发送完毕的时候,竟然死在这,就是while(TI0==0)这地方,用其它型号单片机没有这种情况,c8051F120单片机强大无比,但也复杂,用起来不顺手,下面就搜集了有关串口中断发送的资料,改为中断发送解决程序死的问题。 有关串口发送的程序例子: 假设要发送一组数据 Send 一般采用查询发送(循环发送)方式: unsigned char Send ; //发送量 unsigned char i; //循环量 for(i = 0; i 10; i++
[单片机]
51单片机的存储器扩展
在51单片机中,连接外部存储器使用的是三总线的方式,即:数据总线,地址总线,控制总线。51单片机的P0口在有外部存储器的设计之中,一般充当数据总线和低8位的地址总线。所以我们必须解决P0的复用问题。51提供了ALE信号,ALE地址锁存信号的下降沿来临时,地址总线的数据被锁存。 外扩的数据存储器和外扩的I/O口是统一编址的。必须记住。 PSEN信号是外部ROM的读选通信号。一般接到存储器的OE端。 EA信号:EA = 0,只访问外部程序存储器,EA = 1,从内部ROM开始访问,当访问完内部ROM后,转去访问外部ROM。 常用的ROM芯片: Ai:地址线 Di:数据线 CE:片选信号 OE:选通
[单片机]
51单片机红外发射程序
一定要用灌电流驱动,拉电流驱动最远遥控距离2米,改用灌电流之后,可以遥控6米,PK遥控板,通过中间串联一个3v电池之后,遥控距离达30米以上(亲测)。 #include stc12.h #define uchar unsigned char #define uint unsigned int sbit IR_OUT=P1^0 ; void delay_ms(uint ms) { uint i,j; for(i=0;i 120;i++) { for(j=0;j ms;j++); } } //T1 13us产生一次中断 用于产生38K载波 //T0 方式1 16位 用于定时 void Init_Timer(void) {
[单片机]
汇编的51单片机的跑马灯
话不多说,先上程序 ORG 0000H MAIN:MOV P1,#0O LCALL DELAY MOV A,#0FEH SETB C TO: MOV P1,A LCALL DELAY LCALL DELAY RLC A JC TO MOV P1,A LCALL DELAY LCALL DELAY TO1: RRC A MOV P1,A LCALL DELAY LCALL DELAY JC TO1 AJMP TO DELAY:MOV R2,#0FEH TC1:MOV R3,#0FEH TC2:DJNZ R3,TC2 DJNZ R2,TC1 RET END 这个程序的目的是使8个LED循环点亮,还有一个状态是都不亮,我的LED是搭在P
[单片机]
8051单片机CPU的内部组成及功能介绍
一、运算器 运算器以完成二进制的算术/逻辑运算部件ALU为核心,再加上暂存器TMP、累加器ACC、寄存器B、程序状态标志寄存器PSW及布尔处理器。累加器ACC是一个八位寄存器,它是CPU中工作最频繁的寄存器。在进行算术、逻辑运算时,累加器ACC往往在运算前暂存一个操作数(如被加数),而运算后又保存其结果(如代数和)。寄存器B主要用于乘法和除法操作。标志寄存器PSW也是一个八位寄存器,用来存放运算结果的一些特征,如有无进位、借位等。其每位的具体含意如下所示。PSW CY AC FO RS1 RS0 OV - P对用户来讲,最关心的是以下四位。 1?进位标志CY(PSW?7)。它表示了运算是否有进位(或借位)。如果操作结果在最高位
[单片机]
基于手机蓝牙控制的LED灯的设计
1.引言 随着,2012年10月30日飞利浦在AppleStore出售最新的高科技Hue系列LED灯,并且只会交由苹果出售。Hue系列将是完全可有自定义的,并且通过一个灯泡内红蓝绿三原色的LED可以混合出1600万种颜色的灯光。整个过程完全由iPhone上的App来进行控制。从而引发了智能灯控发展的新思考,国内相关人士也纷纷进行研究。考虑到Hue是采用WiFi无线控制,而国内WiFi并未普及,本研究采用更普遍的蓝牙技术,采用手机蓝牙与单片机通信产生可调占空比PWM波信号控制LED驱动电路实现LED的调光和DIY调色。 2.脉冲宽制(PWM)调光技术 PWM调光是一种利用简单的数字脉冲,反复开关LED驱动器的调光技术
[电源管理]