找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2286|回复: 5
打印 上一主题 下一主题
收起左侧

单片机独立按键控制数码管疑问

[复制链接]
跳转到指定楼层
楼主
如何用独立按键控制数码管数字增加,按下k1k2数码管数字加一,按下k3k4数码管数字减一,k1k3控制数码管左四位,k2k4控制数码管右四位
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:716656 发表于 2020-10-23 15:22 | 只看该作者
if((k1==0)&&(k2==0))  {}是这个意思么
回复

使用道具 举报

板凳
ID:451718 发表于 2020-10-23 18:16 | 只看该作者
#define k1  P10
#define k2  P11
#define k3  P12
#define k4  P13
int a,b;
void Deel_Counter()
{
  if(k1==0)
  {
    a++;
    if(a>=10000)a=0;
  }
  else if(k3==0)
  {
    a--;
    if(a<0)a=9999;
  }
  else if(k2==0)
  {
    b++;
    if(b>=10000)b=0;
  }
  else if(k4==0)
  {
     b--;
      if(b<0)b=9999;
  }
}

void Show_CounterA()
{
    //将a显示出来,选段码,刷位数
}
void Show_CounterB()
{
    //将b显示出来,选段码,刷位数
}
回复

使用道具 举报

地板
ID:213173 发表于 2020-10-24 08:27 | 只看该作者
按下k1/k2数码管左四位数字加/减1,按下k3/k4数码管右四位数字加/减1

  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit K1=P3^0;
  5. sbit K2=P3^1;
  6. sbit K3=P3^2;
  7. sbit K4=P3^3;
  8. uchar code table[]={//共阳LED段码表
  9. 0xc0,0xf9,0xa4,0xb0,0x99,
  10. 0x92,0x82,0xf8,0x80,0x90};
  11. uchar data dis_buf[8];//显示数据缓存
  12. uint a,b;//计数变量

  13. void delay(uint n)
  14. {
  15.         while(n--);      
  16. }
  17. //按键扫描函数
  18. void keyscan()
  19. {
  20.         static uchar count=0;
  21.         static bit sign=0;
  22.         if(!K1||!K2||!K3||!K4)
  23.         {
  24.                 if(++count>=10&&sign==0)//消抖/自锁
  25.                 {
  26.                         sign=1;
  27.                         if(!K1){if(a<9999)a++;}
  28.                         else if(!K2){if(a>0)a--;}
  29.                         else if(!K3){if(b<9999)b++;}
  30.                         else if(!K4){if(b>0)b--;}
  31.                 }
  32.         }
  33.         else //松手
  34.         {
  35.                 count=0;
  36.                 sign=0;
  37.         }
  38. }
  39. //共阳数码管显示函数
  40. void display()
  41. {
  42.         static uchar i=0;
  43.         //数据分解
  44.         dis_buf[0]=table[a/1000%10];
  45.         dis_buf[1]=table[a/100%10];
  46.         dis_buf[2]=table[a/10%10];
  47.         dis_buf[3]=table[a%10];
  48.         dis_buf[4]=table[b/1000%10];
  49.         dis_buf[5]=table[b/100%10];
  50.         dis_buf[6]=table[b/10%10];
  51.         dis_buf[7]=table[b%10];

  52.         P2&=0x00;//消隐
  53.         P0=dis_buf[i];//送段码
  54.         P2|=0x01<<i;//送位码
  55.         i++;i%=8;//扫描计数
  56. }
  57. void main()//主函数
  58. {
  59.         while(1)
  60.         {
  61.                 keyscan();//按键扫描
  62.                 display();//数码管显示
  63.                 delay(35);//少许延时,控制主循环周期约1ms
  64.         }
  65. }
复制代码



回复

使用道具 举报

5#
ID:414556 发表于 2020-10-24 20:57 | 只看该作者
既然有K1 K2 K3 K4,为什么还要组合按呢,一个管一个功能不香吗?
回复

使用道具 举报

6#
ID:873170 发表于 2021-1-4 15:10 | 只看该作者
wulin 发表于 2020-10-24 08:27
按下k1/k2数码管左四位数字加/减1,按下k3/k4数码管右四位数字加/减1

酷~~ 非常感谢老哥给萌新指点~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表