按键控制数码管显示

/************************************************************************
 功能:按键查询控制数码管显示的数据,定时器中断控制数码管扫描显示

 所用器件:STC12C5A32S2
************************************************************************/
#include "config.h"

#define uint  unsigned  int
#define uchar unsigned char
#define ulong unsigned long

#define KEY2  P3_5    
#define KEY3  P3_6

int num;   // 显示数据
int FrontDot;  // 个位显示
int BehindDot;  // 小数显示
int xms;

int x = 0;

int LEDDATA0[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
int LEDDATA1[10] = {0xbf, 0x86, 0xdb, 0xcf, 0xe6, 0xed, 0xfd, 0x87, 0xff, 0xef};


//  延时约(0.001 * n)秒
void delay(unsigned int n)
{
 ulong msNum = 923;  // 指令循环923次为一秒
    do {
  while(msNum--);
    } while (--n != 0);
}

/*****************************************

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一种基于51单片机的方法来控制数码管显示学号。 首先,您需要连接一个4位共阳数码管显示器到您的51单片机上。然后,连接4个独立按键到单片机的4个引脚上,分别用于控制数码管显示学号的每一位。 接下来,您需要编写一个程序来控制数码管的显示功能。以下是一个参考代码,您可以根据自己的需要进行修改: ```c #include <reg52.h> sbit D1 = P2^0; // 数码管第一位 sbit D2 = P2^1; // 数码管第二位 sbit D3 = P2^2; // 数码管第三位 sbit D4 = P2^3; // 数码管第四位 sbit K1 = P1^0; // 第一位学号 sbit K2 = P1^1; // 第二位学号 sbit K3 = P1^2; // 第三位学号 sbit K4 = P1^3; // 第四位学号 void delay(unsigned int t) // 延时函数 { unsigned int i, j; for(i = 0; i < t; i++) for(j = 0; j < 125; j++); } void display(unsigned char num) // 数码管显示函数 { switch(num) { case 0: D1 = D2 = D3 = D4 = 1; break; case 1: D1 = 0; D2 = D3 = D4 = 1; break; case 2: D2 = 0; D1 = D3 = D4 = 1; break; case 3: D1 = D2 = 0; D3 = D4 = 1; break; case 4: D3 = 0; D1 = D2 = D4 = 1; break; case 5: D1 = D3 = 0; D2 = D4 = 1; break; case 6: D2 = D3 = 0; D1 = D4 = 1; break; case 7: D1 = D2 = D3 = 0; D4 = 1; break; case 8: D4 = 0; D1 = D2 = D3 = 1; break; case 9: D1 = D4 = 0; D2 = D3 = 1; break; default: break; } } void main() { unsigned char num1, num2, num3, num4; while(1) { if(K1 == 0) // 第一位学号按键被按下 { num1++; // 学号每次加1 if(num1 > 9) num1 = 0; // 如果学号超过9,则从0开始 delay(10); // 延时去抖动 } if(K2 == 0) // 第二位学号按键被按下 { num2++; if(num2 > 9) num2 = 0; delay(10); } if(K3 == 0) // 第三位学号按键被按下 { num3++; if(num3 > 9) num3 = 0; delay(10); } if(K4 == 0) // 第四位学号按键被按下 { num4++; if(num4 > 9) num4 = 0; delay(10); } display(num4); // 显示第四位学号 D4 = 0; // 打开第四位数码管 delay(5); // 延时 D4 = 1; // 关闭第四位数码管 display(num3); // 显示第三位学号 D3 = 0; delay(5); D3 = 1; display(num2); // 显示第二位学号 D2 = 0; delay(5); D2 = 1; display(num1); // 显示第一位学号 D1 = 0; delay(5); D1 = 1; } } ``` 这个程序可以通过独立按键控制数码管显示学号的每一位,其中K1控制第一位学号,K2控制第二位学号,K3控制第三位学号,K4控制第四位学号。您只需要修改程序中的学号值即可实现显示您的学号。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值