基于51单片机,运用中断,用c语言设计按一个按键数码管显示加一,另一个按键减一,两位数码管,最小值为00,最大值为99
时间: 2024-04-29 08:21:10 浏览: 110
单片机与DSP中的基于单片机的频率计的C语言源代码
以下是基于51单片机,使用中断和C语言编写的按键控制数码管加减的代码:
```
#include <reg52.h>
// 数码管引脚定义
sbit D1 = P2^0;
sbit D2 = P2^1;
sbit D3 = P2^2;
sbit D4 = P2^3;
// 按键引脚定义
sbit KEY_ADD = P3^0;
sbit KEY_SUB = P3^1;
// 数码管显示变量
unsigned char num1 = 0;
unsigned char num2 = 0;
// 数码管显示函数
void display(unsigned char num)
{
unsigned char i;
unsigned char code tab[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
D1 = 0;
for(i=0;i<2;i++)
{
switch(i)
{
case 0:
D2 = 0;
P0 = tab[num/10];
D2 = 1;
break;
case 1:
D3 = 0;
P0 = tab[num%10];
D3 = 1;
break;
}
}
D1 = 1;
}
// 中断函数
void key_isr() interrupt 0
{
// 延时去抖动
unsigned char i;
for(i=0;i<10;i++)
{
if(KEY_ADD == 0)
{
num1++;
if(num1 > 99)
{
num1 = 99;
}
break;
}
if(KEY_SUB == 0)
{
num1--;
if(num1 < 0)
{
num1 = 0;
}
break;
}
delay(10);
}
}
// 主函数
void main()
{
// 中断初始化
IT0 = 1;
EX0 = 1;
EA = 1;
// 循环显示数码管
while(1)
{
display(num1);
}
}
```
在这个程序中,我们使用了中断来检测按键的状态。当按键被按下时,中断函数被触发,对计数变量进行加减操作,然后在主函数中循环显示数码管。在数码管显示函数中,我们使用了一个数字表格来将数字转换为对应的数码管显示码,并通过设置对应的引脚来控制数码管的显示。
阅读全文