51单片机——数码管、按键、矩阵按键C语言入门编程

这篇具有很好参考价值的文章主要介绍了51单片机——数码管、按键、矩阵按键C语言入门编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

数码管:

1.静态数码管:第二位数码管显示0

2.动态数码管:每一位数码管依次显示对应位数

按键:

1.独立按键:按下按键对应LED亮灭

矩阵按键:

1.矩阵按键:按下的每个按键,数码管显示对应键码


数码管:

        数码管按段数可分为七段数码管和八段数码管,八段数码管多一个DP(小数点)二极管。也可分为CA共阳极数码管(低电平点亮)和CC共阴极数码管(高电平点亮)。本开发板上使用的是2个四位一体共阴极数码管。数码管静态显示是控制数码管的每一个引脚,输入一次电平之后可以一直显示直到再一次改变电平,静态显示会增加IO口的使用,结构复杂成本高,但是会减少占用CPU的时间。数码管动态显示通过位选—段选—清零(消影)来通过发光管余辉和人的视觉暂留是我们感觉出每一位同时显示。 通过74HC138译码器(C为高位B为次高位A为低位)输入高电平输出低电平进行位选,然后通过74HC245驱动数码管段选(a为低位,DP为高位)数码管单片机编程,51单片机,51单片机,c语言,嵌入式硬件

//共阴极数码管段码表
0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71,0X00
 0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F    空

//共阳极数码管段码表
0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0XFF
 0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F    空

数码管单片机编程,51单片机,51单片机,c语言,嵌入式硬件

数码管单片机编程,51单片机,51单片机,c语言,嵌入式硬件

1.静态数码管:第二位数码管显示0

#include <REGX52.H>
 
void main()
{
    P2_2=0;//位选 LED7
    P2_3=1;
    P2_4=1;
    P0=0x3f;//段选 显示0
    while(1)
    {
        
    }
}

2.动态数码管:每一位数码管依次显示对应位数

        数码管函数1

#include <REGX52.H>
 
unsigned char code NixieNum[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71,0X00};//共阴极段码
 
void shumaguan(unsigned char wei,duan)
{
    P0=0x00;//清零消影 采用delay函数亮度增强
    switch(wei)//位选
    {
        case 1:P2_2=1;P2_3=1;P2_4=1;break;//P2_4为高位
        case 2:P2_2=0;P2_3=1;P2_4=1;break;
        case 3:P2_2=1;P2_3=0;P2_4=1;break;
        case 4:P2_2=0;P2_3=0;P2_4=1;break;
        case 5:P2_2=1;P2_3=1;P2_4=0;break;
        case 6:P2_2=0;P2_3=1;P2_4=0;break;
        case 7:P2_2=1;P2_3=0;P2_4=0;break;
        case 8:P2_2=0;P2_3=0;P2_4=0;break;
    }
    P0=NixieNum[duan];//段选
}

        数码管函数2

#include <REGX52.H>
#include "DELAY.h"

unsigned char code NixieNum[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71,0X00};//段码

void shumaguan(unsigned char wei,duan)
{
    switch(wei)//位选
    {
        case 1:P2_2=1;P2_3=1;P2_4=1;break;//P2_4为高位
        case 2:P2_2=0;P2_3=1;P2_4=1;break;
        case 3:P2_2=1;P2_3=0;P2_4=1;break;
        case 4:P2_2=0;P2_3=0;P2_4=1;break;
        case 5:P2_2=1;P2_3=1;P2_4=0;break;
        case 6:P2_2=0;P2_3=1;P2_4=0;break;
        case 7:P2_2=1;P2_3=0;P2_4=0;break;
        case 8:P2_2=0;P2_3=0;P2_4=0;break;
    }
    P0=NixieNum[duan];//段选
    delay(1);//延时1ms稳定图像 清零消影 静态关闭消影
    P0=0x00;//清零消影 静态关闭消影
}

        主函数

 
#include <REGX52.H>
#include "shumaguan.h"
 
void main()
{
    
    while(1)
    {
        shumaguan(1,0);
        shumaguan(2,1);
        shumaguan(3,2);
        shumaguan(4,3);
        shumaguan(5,4);
        shumaguan(6,5);
        shumaguan(7,6);
        shumaguan(8,7);
    }
}

按键:

        两端距离长的表示默认是导通状态,距离短的默认是断开状态。如果按键按下,初始导通状态变为断开,初始断开状态变为导通。通常的按键都是机械弹性开关,由于弹性作用,在闭合时不会马上稳定的接通,在断开时也不会马上断开,一般会抖动5-10ms。所以为了消抖,一般由软件消抖20ms。IO口既可以输出也可以输入,当按键按下时IO口电平会被接地,所以我们只需要检测按键什么时候被拉低就可以。数码管单片机编程,51单片机,51单片机,c语言,嵌入式硬件

数码管单片机编程,51单片机,51单片机,c语言,嵌入式硬件

1.独立按键:按下按键对应LED亮灭

        按键函数

#include <REGX52.H>
#include "DELAY.h"
 
unsigned char anjian()
{
    unsigned char jianwei=0;
    if(P3_1==0){delay(20);while(P3_1==0);delay(20);jianwei=1;}//检测按键是否为0,消抖,检测是否松手,消抖
    if(P3_0==0){delay(20);while(P3_0==0);delay(20);jianwei=2;}
    if(P3_2==0){delay(20);while(P3_2==0);delay(20);jianwei=3;}
    if(P3_3==0){delay(20);while(P3_3==0);delay(20);jianwei=4;}
    return jianwei;
}

        主函数

#include <REGX52.H>
#include "anjian.h"
 
void main()
{
    unsigned char i;
    while(1)
    {
        i=anjian();
        if(i==1){P2_0=~P2_0;}//如果第一个按下,第一个灯状态取反
        if(i==2){P2_1=~P2_1;}
        if(i==3){P2_2=~P2_2;}
        if(i==4){P2_3=~P2_3;}
    }
}

矩阵按键:

        每一个独立按键都需要借一个IO口,但是矩阵按键会大大减少IO资源的使用。开发板上将 16 个按 键排成 4 行 4 列,第一行将每个按键的一端连接在一起构成行线,第一列将每 个按键的另一端连接在一起构成列线,这样便一共有 4 行 4 列共 8 根线,我们将 这 8 根线连接到单片机的 8 个 I/O 口上,通过程序扫描键盘就可检测 16 个 键。用这种方法我们也可实现 3 行 3 列 9 个键、 5 行 5 列 25 个键、 6 行 6 列 36 个键甚至更多。跟独立按键相同,我们只需要检测按键什么时候被拉低就可以。本次我们采用行扫描的方法使用矩阵按键,并且不要忘记消抖

数码管单片机编程,51单片机,51单片机,c语言,嵌入式硬件

1.矩阵按键:按下的每个按键,数码管显示对应键码

        矩阵函数

#include <REGX52.H>
#include "DELAY.h"
 
unsigned char juzhen()//行扫描
{
    unsigned char juzhenNum;
    P1=0x7f;
    if(P1_3==0){delay(20);while(P1_3==0);delay(20);juzhenNum=1;}
    if(P1_2==0){delay(20);while(P1_2==0);delay(20);juzhenNum=2;}
    if(P1_1==0){delay(20);while(P1_1==0);delay(20);juzhenNum=3;}
    if(P1_0==0){delay(20);while(P1_0==0);delay(20);juzhenNum=4;}
    P1=0xbf;
    if(P1_3==0){delay(20);while(P1_3==0);delay(20);juzhenNum=5;}
    if(P1_2==0){delay(20);while(P1_2==0);delay(20);juzhenNum=6;}
    if(P1_1==0){delay(20);while(P1_1==0);delay(20);juzhenNum=7;}
    if(P1_0==0){delay(20);while(P1_0==0);delay(20);juzhenNum=8;}
    P1=0xdf;
    if(P1_3==0){delay(20);while(P1_3==0);delay(20);juzhenNum=9;}
    if(P1_2==0){delay(20);while(P1_2==0);delay(20);juzhenNum=10;}
    if(P1_1==0){delay(20);while(P1_1==0);delay(20);juzhenNum=11;}
    if(P1_0==0){delay(20);while(P1_0==0);delay(20);juzhenNum=12;}
    P1=0xef;
    if(P1_3==0){delay(20);while(P1_3==0);delay(20);juzhenNum=13;}
    if(P1_2==0){delay(20);while(P1_2==0);delay(20);juzhenNum=14;}
    if(P1_1==0){delay(20);while(P1_1==0);delay(20);juzhenNum=15;}
    if(P1_0==0){delay(20);while(P1_0==0);delay(20);juzhenNum=16;}
    return juzhenNum;
}

        主函数文章来源地址https://www.toymoban.com/news/detail-817107.html

#include <REGX52.H>
#include "shumaguan.h"
#include "juzhen.h"
 
void main()
{
    unsigned char i=0;
    while(1)
    {
        i=juzhen();
        shumaguan(1,i);
    }
}

到了这里,关于51单片机——数码管、按键、矩阵按键C语言入门编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机按键控制数码管显示0-9

    实验题目:使用51单片机设计两个按键控制数码管显示0-9,当K1按下减1,当K2按下加1. 理解程序可参考我的另外两个文章; 51单片机数码管显示0-9_学习笔记吧的博客-CSDN博客 51单片机独立按键控制合集_学习笔记吧的博客-CSDN博客 两个文章一结合就是一个新的产物,所以51单片机

    2024年02月11日
    浏览(52)
  • 51单片机——秒表(定时器扫描独立按键和数码管)

            这次实验主要是用定时器来定时扫描独立按键和数码管,代替两个模块函数中的延时函数。用定时器定时扫描的好处就是,主函数中的延时并不会影响按键的检测和数码管的扫描,只会影响响应速度。因为定时器是溢出就会执行中断程序,是定时的扫描。 改进的

    2024年02月10日
    浏览(64)
  • 51单片机“独立按键”控制静态数码管———显示数字0-9

    (1).独立按键模块电路图可以清楚的看到,所有从引脚JP1出来的电流都会接到GND,且当所有按键按下时被执行链接GND。所以,当JP1引脚各端口----识别----到“电流为低电平为0时”,说明按键被按下,否则为高电平按键没有被按下。 ( 2).按键的原理其是需要我们单片机有检

    2024年02月11日
    浏览(49)
  • 【51单片机】EEPROM-IIC实验(按键控制数码管)

    目录   🎁I2C总线 ​编辑 🎁代码 🏳️‍🌈main.c 🏳️‍🌈i2.c 🎆代码分析   I2C总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信;I2C总线有两根双向的信号线,一根 数据线SDA 用于收发数据,一根 时钟线SCL 用于通信

    2024年02月11日
    浏览(52)
  • 51单片机矩阵键盘——数码管显示

    当我们熟悉了数码管的位选与段选,并了解的矩阵键盘的扫描之后就可以编写程序了。 按下矩阵键盘S1并松开,数码管第一位(LED8)显示0;按下矩阵键盘S2并松开,数码管第一位显示1;...按下矩阵键盘S16并松开,数码管第一位显示F; 矩阵键盘扫描(输入扫描)     原理:

    2024年02月11日
    浏览(55)
  • 51单片机实验三:数码管显示时钟 按键调节时间时闪烁提示

    功能效果:1.时分秒的动态显示。2.用三个按键实现时分秒的修改,调节的数字闪烁提示。  

    2024年02月11日
    浏览(42)
  • 单片机学习-使用矩阵按键来显示数码管0-F

    1、行列扫码 //数码管字摸 u8 gsmg_code[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};      //共阴 显示0-F 2、线翻转扫描

    2024年02月04日
    浏览(75)
  • 51单片机用矩阵键盘控制数码管,求助大佬

    从黑体的地方开始,我想通过矩阵键盘控制数码管显示0-15,但是不知道怎么搞两位数的显示,是不是延时什么的有问题 #include REGX52.H sfr P4 = 0xC0; unsigned char code duanma[18]={         0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x80,0xc0,0x86,0x8e,0xbf,0x7f}; sbit R1 = P3^0; sbit R2 = P3^1; sbit R3 = P

    2024年02月09日
    浏览(45)
  • C51单片机的电子时钟(数码管显示+独立按键模块修改及暂停时间)

    IMG_1120 通过查看这三个原理图我们可以得知控制K1、K2、K3及K4是通过P31、P30、P32及P33来实现的,控制8个数码管是P22、P23及P24来实现, 控制发光二极管则由P00-P07来实现。 代码分为三部分分别为main.c、key.h、key.c scankey()函数的主要代码,通过软件入手提高系统的可靠性,防止外

    2024年02月05日
    浏览(55)
  • 51单片机的串口实验之数码管显示与按键实验(8位数字任意传输)

    目标效果: 1、电脑发送任意小于=8位数字( SUBF只有8位最大只能发送255,但是可以通过数组进行临时存储来实现传输多字节 )数字,在数码管上显示对应的数字且同时满足高位是0可以不显示  2、矩阵按键按下后,电脑接收所按下的按钮 实验器材: 1、普中51单片机。2、ST

    2024年02月02日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包