51单片机数码管显示0-9999的代码其中按键控制加减还有一个复位键
时间: 2024-03-10 11:47:00 浏览: 124
51单片机源码程序-多位数按键加减(闪烁)数码管显示.zip
以下是基于51单片机的数码管显示0-9999的代码,其中加减和复位键的控制是通过外部按键实现的:
```
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; // 数码管显示0-9的编码表
void delay(uint x) // 延时函数
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
uchar i,j,k,num;
uchar key;
while(1)
{
num = 0; // 初始值为0
P2 = 0x00; // 关闭所有数码管
P0 = table[num]; // 显示初始值0
P2 = 0x01; // 打开第一位数码管
while(1)
{
key = P1 & 0x0f; // 读取按键状态
if(key == 0x0e) // 按下加键
{
num++; // 数字加1
if(num > 9999) // 上限9999
num = 9999;
i = num / 1000; // 计算千位数字
j = (num % 1000) / 100; // 计算百位数字
k = (num % 100) / 10; // 计算十位数字
P2 = 0x00; // 关闭所有数码管
P0 = table[i]; // 显示千位数字
P2 = 0x01; // 打开第一位数码管
delay(5);
P2 = 0x00; // 关闭所有数码管
P0 = table[j]; // 显示百位数字
P2 = 0x02; // 打开第二位数码管
delay(5);
P2 = 0x00; // 关闭所有数码管
P0 = table[k]; // 显示十位数字
P2 = 0x04; // 打开第三位数码管
delay(5);
P2 = 0x00; // 关闭所有数码管
P0 = table[num%10]; // 显示个位数字
P2 = 0x08; // 打开第四位数码管
delay(5);
}
if(key == 0x0d) // 按下减键
{
num--; // 数字减1
if(num < 0) // 下限0
num = 0;
i = num / 1000; // 计算千位数字
j = (num % 1000) / 100; // 计算百位数字
k = (num % 100) / 10; // 计算十位数字
P2 = 0x00; // 关闭所有数码管
P0 = table[i]; // 显示千位数字
P2 = 0x01; // 打开第一位数码管
delay(5);
P2 = 0x00; // 关闭所有数码管
P0 = table[j]; // 显示百位数字
P2 = 0x02; // 打开第二位数码管
delay(5);
P2 = 0x00; // 关闭所有数码管
P0 = table[k]; // 显示十位数字
P2 = 0x04; // 打开第三位数码管
delay(5);
P2 = 0x00; // 关闭所有数码管
P0 = table[num%10]; // 显示个位数字
P2 = 0x08; // 打开第四位数码管
delay(5);
}
if(key == 0x0b) // 按下复位键
{
num = 0; // 数字归零
P2 = 0x00; // 关闭所有数码管
P0 = table[num]; // 显示初始值0
P2 = 0x01; // 打开第一位数码管
delay(5);
}
}
}
}
```
在程序中,我们使用了外部按键来实现加减和复位的功能,通过读取P1口的状态来判断按键是否被按下。同时,在加减的过程中,我们需要判断数字的上下限,以避免越界。
阅读全文