51单片机按键按下数码管显示
时间: 2023-06-18 13:02:38 浏览: 180
下面是一个简单的51单片机按键按下数码管显示的程序示例:
```C
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit key = P1^0; // 按键连接的IO口
sbit dula = P2^6; // 数码管段选1
sbit wela = P2^7; // 数码管位选1
uchar code table[] = { // 0-F的数码管数据表
0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f,
0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
void delay(uint t) // 延时函数
{
uint i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 110; j++);
}
void display(uchar num) // 数码管显示函数
{
P0 = table[num]; // 显示数码
dula = 0; // 打开段选1
dula = 1; // 关闭段选1
}
void main()
{
uchar i = 0;
wela = 1; // 打开位选1
display(0); // 初始显示0
while (1)
{
if (key == 0) // 按键按下
{
delay(5); // 延时去抖
if (key == 0) // 再次检测按键状态
{
i++; // 计数器加1
if (i > 9) // 大于9则清零
i = 0;
display(i); // 显示计数器值
}
while (!key); // 等待按键释放
}
}
}
```
程序的主要思路是:按键按下后计数器加1,当计数器的值大于9时清零,然后将计数器的值显示在数码管上。每次按键按下后需要等待按键释放,以避免多次计数。延时函数是为了去除按键的抖动。