51单片机按键控制数码管加一减一代码
时间: 2024-01-28 16:08:31 浏览: 185
以下是基于51单片机的按键控制数码管加一减一的代码:
```
#include <reg52.h> // 包含STC15F2K60S2单片机的寄存器定义
#include <intrins.h> // 包含_nop_()等函数的头文件
// 数码管共阴极引脚连接单片机P2口
sbit LED_COM1 = P2^2;
sbit LED_COM2 = P2^3;
sbit LED_COM3 = P2^4;
sbit LED_COM4 = P2^5;
// 数码管段选引脚连接单片机P0口
sbit LED_A = P0^0;
sbit LED_B = P0^1;
sbit LED_C = P0^2;
sbit LED_D = P0^3;
sbit LED_E = P0^4;
sbit LED_F = P0^5;
sbit LED_G = P0^6;
sbit LED_DP = P0^7;
// 按键引脚连接单片机P3口
sbit KEY_ADD = P3^0;
sbit KEY_SUB = P3^1;
// 数码管显示的数字,初始值为0
unsigned char led_code = 0;
// 数码管显示函数
void LED_Display(unsigned char num)
{
// 数码管编码表,0~9对应的编码
unsigned char LED_TABLE[10] = {
0x3F, 0x06, 0x5B, 0x4F, 0x66,
0x6D, 0x7D, 0x07, 0x7F, 0x6F
};
// 数码管共阴极,高电平不亮,低电平亮
LED_COM1 = 1;
LED_COM2 = 1;
LED_COM3 = 1;
LED_COM4 = 1;
// 判断显示的是哪一位数码管,并点亮
switch(num / 1000)
{
case 0: LED_COM1 = 0; break;
case 1: LED_COM2 = 0; break;
case 2: LED_COM3 = 0; break;
case 3: LED_COM4 = 0; break;
}
LED_DP = 0; // 小数点不亮
P0 = LED_TABLE[num / 1000]; // 显示千位数字
_nop_(); // 延时一段时间,让人眼可以看到
LED_COM1 = 1;
LED_COM2 = 1;
LED_COM3 = 1;
LED_COM4 = 1;
switch(num % 1000 / 100)
{
case 0: LED_COM1 = 0; break;
case 1: LED_COM2 = 0; break;
case 2: LED_COM3 = 0; break;
case 3: LED_COM4 = 0; break;
}
LED_DP = 0; // 小数点不亮
P0 = LED_TABLE[num % 1000 / 100]; // 显示百位数字
_nop_();
LED_COM1 = 1;
LED_COM2 = 1;
LED_COM3 = 1;
LED_COM4 = 1;
switch(num % 100 / 10)
{
case 0: LED_COM1 = 0; break;
case 1: LED_COM2 = 0; break;
case 2: LED_COM3 = 0; break;
case 3: LED_COM4 = 0; break;
}
LED_DP = 0; // 小数点不亮
P0 = LED_TABLE[num % 100 / 10]; // 显示十位数字
_nop_();
LED_COM1 = 1;
LED_COM2 = 1;
LED_COM3 = 1;
LED_COM4 = 1;
switch(num % 10)
{
case 0: LED_COM1 = 0; break;
case 1: LED_COM2 = 0; break;
case 2: LED_COM3 = 0; break;
case 3: LED_COM4 = 0; break;
}
LED_DP = 0; // 小数点不亮
P0 = LED_TABLE[num % 10]; // 显示个位数字
_nop_();
}
// 延时函数
void Delay(unsigned int t)
{
unsigned int i, j;
for(i = 0; i < t; i++)
for(j = 0; j < 125; j++);
}
void main()
{
// 初始显示数码管0
LED_Display(led_code);
while(1)
{
// 检测加一按键是否按下,如果按下则led_code加一
if(KEY_ADD == 0)
{
Delay(20); // 延时一段时间,确保按键稳定按下
if(KEY_ADD == 0)
{
led_code++;
if(led_code > 9999)
led_code = 0;
LED_Display(led_code); // 显示加一后的数码管值
}
while(!KEY_ADD); // 等待加一按键释放
}
// 检测减一按键是否按下,如果按下则led_code减一
if(KEY_SUB == 0)
{
Delay(20); // 延时一段时间,确保按键稳定按下
if(KEY_SUB == 0)
{
led_code--;
if(led_code < 0)
led_code = 9999;
LED_Display(led_code); // 显示减一后的数码管值
}
while(!KEY_SUB); // 等待减一按键释放
}
}
}
```
代码中使用了外部按键控制数码管的加一减一操作,数码管由四个共阴极的数码管组成,使用P2口控制共阴极引脚,使用P0口控制段选引脚。