在P3.2、P3.3引脚分别接两个按钮开关,开关另一端接地,在P1或P2口接两个七段数码管,实现外部中断0时,七段数码管的值加1,外部中断1时,七段数码管的值减1。
时间: 2023-05-20 21:03:22 浏览: 128
两位数码管可用按键切换个十位,进行加减
这是一个涉及编程的问题,我可以回答。以下是可能的解决方案:
```c
#include <reg52.h>
sbit button1 = P3^2; // 定义按钮1引脚
sbit button2 = P3^3; // 定义按钮2引脚
sbit led1 = P1^0; // 定义七段数码管1引脚
sbit led2 = P1^1; // 定义七段数码管2引脚
unsigned char code segTable[] = { // 数码管段码表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
unsigned char num = 0; // 数码管显示的数字
void delay(unsigned int ms) { // 延时函数
unsigned int i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 110; j++);
}
}
void display(unsigned char n) { // 数码管显示函数
led1 = segTable[n / 10]; // 显示十位
led2 = segTable[n % 10]; // 显示个位
}
void int0() interrupt 0 { // 外部中断0处理函数
num++; // 数码管加1
display(num); // 显示数字
}
void int1() interrupt 2 { // 外部中断1处理函数
num--; // 数码管减1
display(num); // 显示数字
}
void main() {
EA = 1; // 开启总中断
EX0 = 1; // 开启外部中断0
IT0 = 1; // 设置外部中断0为下降沿触发
EX1 = 1; // 开启外部中断1
IT1 = 1; // 设置外部中断1为下降沿触发
while (1) {
delay(100); // 延时100ms
}
}
```
这是一个基于8051单片机的程序,实现了在P3.2、P3.3引脚分别接两个按钮开关,开关另一端接地,在P1或P2口接两个七段数码管,实现外部中断0时,七段数码管的值加1,外部中断1时,七段数码管的值减1。
阅读全文