51单片机-按键&蜂鸣器&数码管

发布者:神秘行者最新更新时间:2021-08-19 来源: eefocus关键字:51单片机  按键  蜂鸣器  数码管 手机看文章 扫描二维码
随时随地手机看文章

在上一讲的代码中我们可以不用写“sbit GND = P2^3;”,像宋老师那样直接在开头“P2 = 0xF7;”仅让P2.3输出0其他输出1即可,这样P2.7就有被拉低的条件了。


1.趁热打铁

沿袭上一讲的功能,我们新学的按键知识需要结合所学过的无源蜂鸣器硬件一起捣鼓玩玩。同上一讲的代码功能一样,这次用的是无源蜂鸣器,按键按下时,蜂鸣器就响,松开不按时就不响。

 

2.分析

我们先缕缕思路,显然无源蜂鸣器要想鸣叫,就不能像“LED2=KEY4;”这样赋值的方式。我们已经知道,在P2.3输出低电平的情况下,K4按下的时候程序中KEY4就等于0,松开不按时KEY4等于1。


这里可以在主函数中的死循环里用“if(KEY4==0)”来一直等待K4被按下,于是KEY4的值等于0才能进入if语句的大括号里去执行程序。不按下时“KEY4等于1”也就进入不了里面去执行程序了,CPU只能空循环不做任何事。

那这个if 语句的大括号里的内容大家也就明白需要做什么事了


#include  

sbit BEEP  = P1^6;

sbit KEY4  = P2^7;

 

void main()

{  

    unsigned int i;

    P2 = 0xF7;//让K4能具备有被拉低的条件先

     

    while(1)

    {

        if(KEY4==0)

        {

            BEEP=!BEEP;

            for(i=0;i<25;i++);//不同时间的延时鸣叫的音调不同

        }

    }   

}


如果按键一直按着不放,那这个代码跟第二章第二讲里的例程可以说是一模一样了。

 

3.巩固

小灯和无源蜂鸣器都上场了,数码管也不能一边愣着吧,这里笔者给大家提供一段代码,自行下载进去后按着K4不放,观察现象然后尝试解析代码的原理,能力有限分析不出来也不必担心,继续往下学先。


#include  

sbit ADDR2 = P1^2;

sbit ADDR1 = P1^1;

sbit ADDR0 = P1^0;

sbit ENLED = P1^4;

sbit ADDR3 = P1^3;

  

sbit KEY4  = P2^7;

unsigned char code LedChar[6]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};//a,b,c,d,e,f段单独亮的真值表

 

void delay_ms(unsigned int x)

{

    unsigned int i,j;

    if(x==1000)

    {

        for(i=0;i<19601;i++)//延时1s

        {

            for(j=5;j>0;j--);

        }

    }

    else while(x--)for(j=115;j>0;j--);

}

  

void IO0_OUT()

{ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;}

void IO1_OUT()

{ADDR2 = 0;ADDR1 = 0;ADDR0 = 1;}

void IO2_OUT()

{ADDR2 = 0;ADDR1 = 1;ADDR0 = 0;}

void IO3_OUT()

{ADDR2 = 0;ADDR1 = 1;ADDR0 = 1;}

void IO4_OUT()

{ADDR2 = 1;ADDR1 = 0;ADDR0 = 0;}

void IO5_OUT()

{ADDR2 = 1;ADDR1 = 0;ADDR0 = 1;}

 

void main()

{  

    unsigned char i=0;

    ADDR3 = 1;//使能三八译码器

    ENLED = 0;// 

    P2 = 0xF7;//让K4能具备有被拉低的条件先

 

    while(1)

    {    

        P0=0xFF;

        switch(i)

        {

            case 0: IO0_OUT();P0=LedChar[0];break;    

            case 1: IO0_OUT();P0=LedChar[1];break;    

            case 2: IO0_OUT();P0=LedChar[2];break;    

            case 3: IO0_OUT();P0=LedChar[3];break;    

            case 4: IO1_OUT();P0=LedChar[3];break;   

            case 5: IO2_OUT();P0=LedChar[3];break;      

            case 6: IO3_OUT();P0=LedChar[3];break;    

            case 7: IO4_OUT();P0=LedChar[3];break;    

            case 8: IO5_OUT();P0=LedChar[3];break;    

            case 9: IO5_OUT();P0=LedChar[4];break;    

            case 10:IO5_OUT();P0=LedChar[5];break;   

            case 11:IO5_OUT();P0=LedChar[0];break;   

            case 12:IO4_OUT();P0=LedChar[0];break;    

            case 13:IO3_OUT();P0=LedChar[0];break;   

            case 14:IO2_OUT();P0=LedChar[0];break;  

            case 15:IO1_OUT();P0=LedChar[0];break;

        }

        if(KEY4==0)i++;

        if(i>=16)i=0;

        delay_ms(30);

    }

}

关键字:51单片机  按键  蜂鸣器  数码管 引用地址:51单片机-按键&蜂鸣器&数码管

上一篇:51单片机-按键入门
下一篇:51单片机-按键猜想

推荐阅读最新更新时间:2024-10-25 12:06

51单片机-按键&蜂鸣器&数码管
在上一讲的代码中我们可以不用写“sbit GND = P2^3;”,像宋老师那样直接在开头“P2 = 0xF7;”仅让P2.3输出0其他输出1即可,这样P2.7就有被拉低的条件了。 1.趁热打铁 沿袭上一讲的功能,我们新学的按键知识需要结合所学过的无源蜂鸣器硬件一起捣鼓玩玩。同上一讲的代码功能一样,这次用的是无源蜂鸣器,按键按下时,蜂鸣器就响,松开不按时就不响。 2.分析 我们先缕缕思路,显然无源蜂鸣器要想鸣叫,就不能像“LED2=KEY4;”这样赋值的方式。我们已经知道,在P2.3输出低电平的情况下,K4按下的时候程序中KEY4就等于0,松开不按时KEY4等于1。 这里可以在主函数中的死循环里用“if(KEY4==0
[单片机]
8051/2 单片机基础 LED闪烁,蜂鸣器数码管驱动,独立按键,中断,定时中断,串口通信
从软件转硬件路总是很艰难,各种电路知识,3个多月了,现在总算是入门了。 AT 8051/2 1.驱动LED闪烁 2.驱动蜂鸣器进行响动 3.驱动共阳级,单数码管,0—9 变化(MPX1-CA) - 使用8排阻 + NPN三极管 4.驱动共阴级,但数码管,0-9 变化(MPX1-CC) - 使用芯片74HC245 + PNP三极管 5.独立按键,控制单片机,并点亮/熄灭LED 6.中断,控制点亮/熄灭LED - INT0 , INT1 7.定时中断,控制点亮/熄灭LED - T0 , T1 8.串口通信 电路图: C代码: /** * 8051 DEMO 1 * 1.驱动LED闪烁 * 2.驱动蜂鸣器进行响动 *
[单片机]
8051/2 单片机基础 LED闪烁,<font color='red'>蜂鸣器</font>,<font color='red'>数码管</font>驱动,独立<font color='red'>按键</font>,中断,定时中断,串口通信
C51单片机学习笔记(三)——按键对灯、蜂鸣器等器件的控制
1.独立按键的原理 一般的独立按键有四个脚,无论按键是否被按下,1和2总是相通的,3和4也是相通的。当按键按下时,1、2脚与3、4脚接通,按住不放则保持接通状态 按键通断过程的抖动:当按键按下时(释放时)输出的理想波形是标准的矩形波,但是,由于机械触点的弹性作用,闭合时电路不会马上稳定的接通,这中间会出现一连串的抖动,如图所示,抖动时间一般为5~10ms 按键的消抖:按键的抖动会造成一次按下被误认为多次按下,所以要进行消抖处理,一般分为硬件消抖和软件消抖,这里讨论软件消抖,方法是当单片机检测到按键闭合时,采用延时程序产生5~10ms的延时,等抖动消失后,再判断是否处于闭合状态,同理释放的时候,也要给延时。 按键给单片机
[单片机]
C<font color='red'>51单片机</font>学习笔记(三)——<font color='red'>按键</font>对灯、<font color='red'>蜂鸣器</font>等器件的控制
51单片机 使用一个独立按键控制蜂鸣器
第一次按下按键按键key后,蜂鸣器响; 第二次按下按键按键key后,蜂鸣器停。 #include reg52.h sbit beep=P1^5; sbit key=P3^1; unsigned int mode; //定义一个模式 void delay(unsigned int i) { while(i--); } void voice() { if(mode) { beep=~beep; delay(100); //更改delay可以让蜂鸣器发出不同的声音 } else { beep=0; } } void main()
[单片机]
51单片机按键控制蜂鸣器启停程序
51单片机按键控制蜂鸣器启停程序 #include reg52.h #define uint unsigned int //宏定义 sbit SPK=P3^5; //定义喇叭端口 sbit key=P3^1; //开发板上对应的是s18按键 void delay(uint z) { uint x,y; for(x=z;x 0;x--) for(y=110;y 0;y--); } void main() { while(1) { if(key==0) { delay(100); SPK=0; delay(100); SPK=1; } else { SPK=1; } } }
[单片机]
51单片机入门案列-一个按键实现点亮LED和开启蜂鸣器
通过一个特殊按键s1实现2个功能,一个是点亮led 灯,一个是开启蜂鸣器,也可以增加其他的功能,比如num=3时同时点亮LED灯和开启蜂鸣器 工具:Keil U3 + STC-SP(v6.86)+BST-v51单片机开发板 晶振:11.0592MHZ 实现代码如下: #include reg52.h #include intrins.h #define uchar unsigned char uchar num = 0; //switch中的选项 sbit led = P1 ^ 0; //LED灯 sbit s1 = P3 ^ 4; //特殊按键 sbit beep = P2 ^ 3
[单片机]
51单片机程序——用按键控制蜂鸣器的启动和停止
#include reg52.h #define uint unsigned int //宏定义 sbit SPK=P3^5; //定义喇叭端口 sbit key=P3^1; //开发板上对应的是s18按键 void delay(uint z) { uint x,y; for(x=z;x 0;x--) for(y=110;y 0;y--); } void main() { while(1) { if(key==0) { delay(100); SPK=0; delay(100); SPK=1; } else
[单片机]
51单片机四位数码管4个LED灯4个按键实现多种功能
任务描述:用89C51单片机实现如下功能: 初始状态为数码管显示2020,四个灯灭。 1、电路有四个控制按键,四个灯,四个数码管; 2、按键1,按下,,第一个数码管开始从0-9递增,同时第一个灯亮; 3、按键2,按下,第二个数码管开始从0-9显示偶数,同时四个灯的偶数灯亮(即2、4个灯亮); 4、按键3,按下,第三个数码管从0-9显示奇数,同时四个灯的奇数灯亮(即1、3个灯亮); 5、按键4,按下,恢复到初始状态 硬件电路图 元件清单 C语言程序 #include reg51.h unsigned char tube1 ={0x5b,0x3f,0x5b,0x3f};//数码管初始状态2020 字符码 unsigned
[单片机]
<font color='red'>51单片机</font>四位<font color='red'>数码管</font>4个LED灯4个<font color='red'>按键</font>实现多种功能
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved