单片机按键控制数码管加减

133 篇文章 6 订阅 ¥59.90 ¥99.00

在嵌入式系统中,使用单片机和数码管是一种常见的应用。本文将介绍如何通过按键来控制数码管的加减操作。我们将使用C语言编写代码,并通过单片机实现。

硬件准备:

  • 单片机开发板(例如STC89C52)
  • 共阳极数码管(例如四位七段数码管)
  • 按键开关
  • 连接线

电路连接:

  1. 将数码管的共阳极引脚连接到单片机的IO口,每个数码管段的引脚连接到单片机的IO口。
  2. 将按键的一端连接到单片机的IO口,另一端连接到地。

软件实现:
下面是使用C语言编写的程序示例:

#include <reg52.h>

#define DIGIT_PORT P0   // 数码管段的控制端口
#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是51单片机按键控制数码管加减的代码实现: ```c #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit LSA = P2 ^ 2; sbit LSB = P2 ^ 3; sbit LSC = P2 ^ 4; sbit key1 = P3 ^ 1; sbit key2 = P3 ^ 0; sbit key3 = P3 ^ 2; sbit key4 = P3 ^ 3; uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; // 数码管显示0-F的值 uchar num = 0; // 数码管显示的数字 void delay(uint xms) // 延时函数 { uint i, j; for (i = xms; i > 0; i--) for (j = 110; j > 0; j--); } void DigDisplay() // 数码管显示函数 { uchar i; for (i = 0; i < 8; i++) { switch (i) // 选择哪一位数码管 { case 0: LSA = 0; LSB = 0; LSC = 0; break; case 1: LSA = 1; LSB = 0; LSC = 0; break; case 2: LSA = 0; LSB = 1; LSC = 0; break; case 3: LSA = 1; LSB = 1; LSC = 0; break; case 4: LSA = 0; LSB = 0; LSC = 1; break; case 5: LSA = 1; LSB = 0; LSC = 1; break; case 6: LSA = 0; LSB = 1; LSC = 1; break; case 7: LSA = 1; LSB = 1; LSC = 1; break; } P0 = table[num]; // 显示数字 delay(1); // 延时1ms P0 = 0x00; // 消隐 } } void main() { while (1) { if (key1 == 0) // 按下按键1,数码管加一 { delay(10); // 延时10ms if (key1 == 0) { num++; if (num > 15) num = 0; } while (!key1); // 等待按键1松开 } if (key2 == 0) // 按下按键2,数码管减一 { delay(10); // 延时10ms if (key2 == 0) { num--; if (num < 0) num = 15; } while (!key2); // 等待按键2松开 } if (key3 == 0) // 按下按键3,流水灯以600ms的速度流动 { delay(10); // 延时10ms if (key3 == 0) { uchar i, j; for (i = 0; i < 8; i++) { switch (i) // 选择哪一位数码管 { case 0: LSA = 0; LSB = 0; LSC = 0; break; case 1: LSA = 1; LSB = 0; LSC = 0; break; case 2: LSA = 0; LSB = 1; LSC = 0; break; case 3: LSA = 1; LSB = 1; LSC = 0; break; case 4: LSA = 0; LSB = 0; LSC = 1; break; case 5: LSA = 1; LSB = 0; LSC = 1; break; case 6: LSA = 0; LSB = 1; LSC = 1; break; case 7: LSA = 1; LSB = 1; LSC = 1; break; } P0 = table[i]; // 显示数字 delay(600); // 延时600ms P0 = 0x00; // 消隐 } } while (!key3); // 等待按键3松开 } if (key4 == 0) // 按下按键4,8个LED灯作一次花样循环 { delay(10); // 延时10ms if (key4 == 0) { uchar i, j; for (i = 0; i < 8; i++) { P1 = ~(1 << i); // 点亮一个LED灯 delay(100); // 延时100ms } for (i = 0; i < 8; i++) { P1 = ~(0x80 >> i); // 点亮一个LED灯 delay(100); // 延时100ms } } while (!key4); // 等待按键4松开 } DigDisplay(); // 数码管显示 } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值