单片机按键控制数字加减

这篇博客介绍了如何利用Keil软件和Proteus进行程序开发,展示了一个用于数码管显示两位数并支持加减操作的程序。程序中定义了数码管显示的字符数组,并通过P1口的两个位来控制加减功能。在Proteus环境下进行了电路模拟,确保了程序的正确运行。

软件使用:keil,proteus

程序:

#include <reg51.h>
#define u8 unsigned char
#define u16  unsigned int
#define    SMG_XS    P2 
#define    SMG_XM    P0
unsigned char code smg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极

%使用的数码管为共阳的
unsigned int shuzi;

sbit s1=P1^0;
sbit s2=P1^3;


void delay(u16 i)
{
    while(i--);    
}

void main()
    {
        shuzi=99;
        while(1)
        {
            SMG_XS=smg[shuzi%10]; //取余
            SMG_XM=smg[shuzi/10];
        if(s1==0){          //加
        delay(500);
            if(s1==0){
            shuzi++;
            if(shuzi>99){
            shuzi=0;
            }    
            }
        while(!s1);
        } 
        if(s2==0){    //减
            delay(500);
            if(s2==0){
            shuzi--;
                    
            }
            while(!s2);
        }
        }
        
    }
proteus作图:

 

### 51单片机按键控制数码管加减显示的实现 在嵌入式系统中,使用51单片机通过按键控制数码管实现加减显示是个常见的项目。以下是个完整的代码示例和相关说明,用于实现此功能。 #### 硬件准备 为了完成这个项目,需要以下硬件组件: - 单片机开发板(例如:STC89C51) - 4位共阳数码管 - 按键(至少两个,分别用于法和法) - 连接线和面包板 #### 软件设计 以下是基于51单片机按键控制数码管加减显示的代码示例: ```c #include <reg52.h> sbit KEY_ADD = P3^0; // 定义按键 sbit KEY_SUB = P3^1; // 定义按键 sbit DIGIT_EN = P2^0; // 数码管段选端口 unsigned char code SEG_CODE[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; // 数码管段码 unsigned char num = 0; // 当前显示数字 void delay(unsigned int ms) { unsigned int i, j; for (i = 0; i < ms; i++) for (j = 0; j < 123; j++); } void display_num(unsigned char n) { P0 = SEG_CODE[n]; // 显示数字 delay(10); } void key_scan() { if (KEY_ADD == 0) { // 检测按键 delay(10); // 消抖 if (KEY_ADD == 0) { num++; if (num > 9) num = 9; // 限制最大值为9 while (KEY_ADD == 0); // 等待按键释放 } } if (KEY_SUB == 0) { // 检测按键 delay(10); // 消抖 if (KEY_SUB == 0) { num--; if (num < 0) num = 0; // 限制最小值为0 while (KEY_SUB == 0); // 等待按键释放 } } } void main() { while (1) { key_scan(); // 扫描按键 display_num(num); // 显示当前数字 } } ``` #### 功能描述 上述代码实现了以下功能: - 使用 `KEY_ADD` 和 `KEY_SUB` 按键分别进行法和法操作[^1]。 - 数字范围被限制在0到9之间[^2]。 - 数码管通过段码表 `SEG_CODE` 显示对应的数字[^3]。 - 在每次按键后,程会调用 `delay` 函数以消除按键抖动[^4]。 #### 注意事项 - 在实际应用中,可能需要根据具体硬件调整引脚定义和延时时间。 - 如果使用的是共阴数码管,则需要修改 `SEG_CODE` 表中的段码值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值