0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

多个按键控制数码管显示数字

CHANBAEK 来源:狂锤硬件 作者:顾 2023-06-28 11:31 次阅读

写代码思路

按照之前的文章关于数码管说到的线与,在此之上我们将一个按键拓展为多个按键,对数码管进行控制,就需要按键扫描函数,数码管显示函数,再加上个主函数和延迟函数就可以搞定。

01.原理图

图片

元器件为:7SEG-MPX6-CC、80C51、BUTTON

将原理图画好后,根据元件的连接和元件特性去写代码。

02.按键扫描函数

当我们按键按下时,需要判断按键是否按下,如果按下了,我们需要给一个键标志,判断它已经按下了。

按键扫描使用的方法为反转法,除此方法外,还有扫描法。

或者你也可以先固定列,再判断行是否按下,一行行去判断,如果不在此列,则继续下一列,同样判断每一行去确定按键是哪一个被按下了。【这个方法有空我会尝试写出来】

//********按键扫描函数
void Key_scan(){
  if(P1!=0xf0)
  {  
    Delay(10); //延迟10ms
    if(P1!=0xf0)
    {
        key_value = P1;
        P1 = 0x0f;
        key_value += P1;
        key_flag = 1;
        Display();  //数码管显示函数
        P1 = 0xf0;
    }
  }
  else 
  {
    key_flag = 0;
  }
 }

03.数码管显示函数

因为key_value是一个全局变量,所以并不需要传参给Display函数,直接拿去判断就可以了。

//********数码管显示函数
void  Display(){
  if(key_value==key_pad[0])
    P2 = Table_cc[0];
  else   if(key_value==key_pad[1])
    P2 = Table_cc[1];
  else   if(key_value==key_pad[2])
    P2 = Table_cc[2];  
  else   if(key_value==key_pad[3])
    P2 = Table_cc[3];
  else   if(key_value==key_pad[4])
    P2 = Table_cc[4];
  else   if(key_value==key_pad[5])
    P2 = Table_cc[5];
  else   if(key_value==key_pad[6])
    P2 = Table_cc[6];
  else   if(key_value==key_pad[7])
    P2 = Table_cc[7];
  else   if(key_value==key_pad[8])
    P2 = Table_cc[8];
  else   if(key_value==key_pad[9])
    P2 = Table_cc[9];
  else   if(key_value==key_pad[10])
    P2 = Table_cc[10];
  else   if(key_value==key_pad[11])
    P2 = Table_cc[11];
  else   if(key_value==key_pad[12])
    P2 = Table_cc[12];
  else   if(key_value==key_pad[13])
    P2 = Table_cc[13];
  else   if(key_value==key_pad[14])
    P2 = Table_cc[14];
  else   if(key_value==key_pad[15])
    P2 = Table_cc[15];
}

04.延迟函数

假设运行一行代码,是10us

那么循环100次就是1ms。

在延迟函数中,我加入了一个参数,为了就是能得到任何我想要延迟的时间。

例如:当k被赋为1时,我们for循环总共循环了100次,延时时间time = 100 * 10 =1000us = 1ms。

PS:如果需要实际的执行时间,还需要去debug一下,去算出一行代码执行时间是多少。

//********延迟函数             
void Delay(u16 k){
  u16 i,j;
  for(i = 0; i < k ; i++)
    for(j = 0; j< 100  ;j++);
}

05.主函数

因为我们将实现的功能分成了各个函数去写,所以我们的主函数很简单,初始化加上我们需要调用的函数,就可以实现我们想要的功能了。

void main(){
  //初始化引脚
  P1 = 0xf0;
  P2 = 0x00;
  P3 = 0x00;
  Key_scan();
}

06.结果展示

未上电时

图片

按下第一个键

图片

按下第六个键

图片

按下最后一个键

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 原理图
    +关注

    关注

    1298

    文章

    6343

    浏览量

    234015
  • 数码管
    +关注

    关注

    32

    文章

    1882

    浏览量

    91104
  • 函数
    +关注

    关注

    3

    文章

    4331

    浏览量

    62604
  • 按键
    +关注

    关注

    4

    文章

    223

    浏览量

    57601
收藏 人收藏

    评论

    相关推荐

    按键控制各位数码管显示不同数字

    用4*4矩阵键盘扫描是否有按键按下,当有按键按下第一位数码管显示按下的那个数字,接着再按下按键
    发表于 07-19 10:24

    按键控制数码管显示

    按键s4接在P3.3口,按键按下,数码管显示数字30。求助
    发表于 06-25 00:47

    请问CH579如何配置一个按键,使用按键控制数码管显示数字加减?

    请问CH579如何配置一个按键,使用按键控制数码管显示数字加减。。。
    发表于 08-11 07:02

    单片机c语言按键控制LED以及数码管

    单片机 c语言 按键控制LED 以及数码管 熟练 掌握 按键 应用原理 以及消斗
    发表于 02-16 17:57 24次下载

    按键控制单个数码管显示

    19-按键控制单个数码管显示----------51单片机源程序 用keil直接打开
    发表于 06-16 15:36 34次下载

    独立按键控制数码管的加减资料下载

    电子发烧友网站提供《独立按键控制数码管的加减资料下载.rar》资料免费下载
    发表于 05-26 08:00 22次下载

    fpga按键控制数码管显示

    本文主要介绍了fpga按键控制数码管显示程序设计。数码管是由多个发光二极封装在一起组成“8”字
    发表于 01-16 16:19 1.7w次阅读
    fpga<b class='flag-5'>按键控制</b><b class='flag-5'>数码管</b><b class='flag-5'>显示</b>

    由FPGA DIY开发板实现消抖按键控制数码管显示0—9

    wang1113 的消抖按键控制数码管显示0—9视频。
    的头像 发表于 06-22 09:57 4224次阅读

    利用FPGA_DIY开发板实现按键控制数码管

    十八笔画的 FPGA_DIY 按键控制数码管
    的头像 发表于 06-20 02:30 6063次阅读
    利用FPGA_DIY开发板实现<b class='flag-5'>按键控制</b><b class='flag-5'>数码管</b>

    FPGA DIY 按键控制数码管显示

    asean的 FPGA DIY 按键控制数码管显示的视频
    的头像 发表于 06-20 00:37 7828次阅读

    使用单片机实现单只按键控制单只数码管滚动显示的程序和电路图

    本文档的主要内容详细介绍的是使用单片机实现单只按键控制单只数码管滚动显示的程序和电路图。
    发表于 06-02 17:28 3次下载
    使用单片机实现单只<b class='flag-5'>按键控制</b>单只<b class='flag-5'>数码管</b>滚动<b class='flag-5'>显示</b>的程序和电路图

    通过按键控制数码管显示当前数控增益的PCB源文件免费下载

    本文档的主要内容详细介绍的是通过按键控制数码管显示当前数控增益的PCB源文件免费下载。
    发表于 09-07 08:00 1次下载
    通过<b class='flag-5'>按键控制</b><b class='flag-5'>数码管</b><b class='flag-5'>显示</b>当前数控增益的PCB源文件免费下载

    使用单片机实现按键控制数码管闪烁增减显示的C语言程序免费下载

    本文档的主要内容详细介绍的是使用单片机实现按键控制数码管闪烁增减显示的C语言程序免费下载。
    发表于 03-16 14:39 66次下载

    STM32F103的按键控制数码管加减仿真

    STM32F103的按键控制数码管加减仿真
    发表于 06-21 09:12 101次下载

    基于89C51单片机的按键控制单个数码管显示

    基于89C51单片机的按键控制单个数码管显示
    发表于 05-12 16:53 3次下载