51单片机——独立按键与静态数码管

目录

实验内容

独立按键

独立按键原理

独立按键例程

静态数码管

数码管原理

数码管例程


实验内容

基于protues8.13仿真软件,使用51单片机对独立按键以及静态数码管的控制.

独立按键

独立按键原理

从上述原理图中可知,按键一端接io口,一端接gnd。假如图中K1按下,则P3.4成低电平,此时在程序是只需单片机检测P3.4io口的电平状态即可知晓按键是否按下。

注意点:如下图所示按键在按下时会发生抖动(即按键是否有效导通),抖动会影响单片机对io判断,所以我们有两个方法:

1、软件消抖:在第一次判断到按键被按下后进行一个10ms的Delay延迟,待按键的抖动消失后进行二次判断,确认按键是真的被按下再执行需求。

2、硬件消抖:如下图(b)所示对硬件电路进行反弹跳电路处理,无论按键如何抖动,信号在经过R-S触发器后都会变为稳定的高低电平。(在按键较少时使用最佳)

独立按键例程
/*******************************************************************************  
* 文件名称:独立按键控制数码管加减实验
* 代码功能: 通过都按键控制led亮灭
* 作者:林帆在努力
* 日期版本:2024.09.14
*******************************************************************************/
#include “reg51.h”

sbit K1=P3^4;
sbit led=P1^0;

void delay10ms(void); //10ms延时函数声明

void main()
{
    while(1)
    {
        if(K1==0)//第一次判断
        {
            delay10ms();//消抖处理
            if(K1==0)//第二次判断
            {
                //确认K1被按下,执行led的亮灭
                led=~led;//通过取反,反转led的电平
            }
        }
    }
}
void delay10ms(void)  //10ms延时函数
{  
    unsigned char i, j;  
    i = 18;  
    j = 235;  
    do  
    {  
        while (--j);  
    } while (--i);  
}  

静态数码管

数码管原理

数码管的本质其实是排布后的led灯,如下图所示(八位共阴数码管)

该数码管与本次实验需要的数码管不同点在与右下角的小数点,在命名规则上数码管的8个led(1~8)分别为(a~g)以及小数点dp。因为该数码管为共阴数码管,故数码管上的8个led的gnd是共同的,所以只需在io上输出高电平即可(共阳则反之)。

假设将该数码管连接在P1的io上,并且要显示0,则abcdef都应该亮起即为1(高电平),其余不亮的为0(低电平),二进制码为0011 1111转为十六进制为0x3F,具体实现代码如下。

数码管例程
/*******************************************************************************  
* 文件名称:静态数码管例程
* 代码功能: 静态数码管显示
* 作者:林帆在努力
* 日期版本:2024.09.14
*******************************************************************************/
#include “reg51.h”
//共阴数码管段码0~9
uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};  

void delay(); //延时函数声明

void main()
{
    while(1)
    {//显示数字0
        P1 = table[0];//将数码管的段码值赋于P1, 0011 1111(dpgfe dcba)
        delay(5000);//保持数码管亮
    }
}
void delay(unsigned int i)  //10ms延时函数
{  
    while (--i);  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值