51单片机实现按键控制各种数字并且显示到数码管中
时间: 2024-03-05 21:53:11 浏览: 32
首先,需要连接数码管和按键到51单片机上。数码管需要连接到单片机的端口,按键需要连接到单片机的另一个端口。然后,需要编写程序来检测按键的状态,并根据按键的状态来控制数码管的显示。
以下是一个基本的程序框架:
```
#include <reg51.h>
sbit key1 = P1^0; // 按键1
sbit key2 = P1^1; // 按键2
sbit key3 = P1^2; // 按键3
sbit key4 = P1^3; // 按键4
sbit seg_a = P2^0; // 七段数码管a段
sbit seg_b = P2^1; // 七段数码管b段
sbit seg_c = P2^2; // 七段数码管c段
sbit seg_d = P2^3; // 七段数码管d段
sbit seg_e = P2^4; // 七段数码管e段
sbit seg_f = P2^5; // 七段数码管f段
sbit seg_g = P2^6; // 七段数码管g段
void delay(unsigned int xms) // 延时函数
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--);
}
void display(unsigned char num) // 数码管显示函数
{
switch(num)
{
case 0: seg_a = 0; seg_b = 0; seg_c = 0; seg_d = 0; seg_e = 0; seg_f = 0; seg_g = 1; break;
case 1: seg_a = 1; seg_b = 0; seg_c = 0; seg_d = 1; seg_e = 1; seg_f = 1; seg_g = 1; break;
case 2: seg_a = 0; seg_b = 0; seg_c = 1; seg_d = 0; seg_e = 0; seg_f = 1; seg_g = 0; break;
case 3: seg_a = 0; seg_b = 0; seg_c = 0; seg_d = 0; seg_e = 1; seg_f = 1; seg_g = 0; break;
case 4: seg_a = 1; seg_b = 0; seg_c = 0; seg_d = 1; seg_e = 1; seg_f = 0; seg_g = 0; break;
case 5: seg_a = 0; seg_b = 1; seg_c = 0; seg_d = 0; seg_e = 1; seg_f = 0; seg_g = 0; break;
case 6: seg_a = 0; seg_b = 1; seg_c = 0; seg_d = 0; seg_e = 0; seg_f = 0; seg_g = 0; break;
case 7: seg_a = 0; seg_b = 0; seg_c = 0; seg_d = 1; seg_e = 1; seg_f = 1; seg_g = 1; break;
case 8: seg_a = 0; seg_b = 0; seg_c = 0; seg_d = 0; seg_e = 0; seg_f = 0; seg_g = 0; break;
case 9: seg_a = 0; seg_b = 0; seg_c = 0; seg_d = 0; seg_e = 1; seg_f = 0; seg_g = 0; break;
default: break;
}
}
void main()
{
unsigned char num = 0; // 显示的数字
while(1)
{
if(key1 == 0) // 按键1按下
{
num = 1; // 显示数字1
delay(20); // 延时消抖
}
else if(key2 == 0) // 按键2按下
{
num = 2; // 显示数字2
delay(20); // 延时消抖
}
else if(key3 == 0) // 按键3按下
{
num = 3; // 显示数字3
delay(20); // 延时消抖
}
else if(key4 == 0) // 按键4按下
{
num = 4; // 显示数字4
delay(20); // 延时消抖
}
display(num); // 显示数字
}
}
```
上述程序的实现原理是,不断循环检测按键的状态。如果某个按键被按下,就改变显示的数字,并延时一段时间以消除按键的抖动。然后调用数码管显示函数,将数字显示在数码管上。