写一段单片机程序使动态数码管显示按下k1k2数码管数字加一,按下k3k4数码管数字减一,k1k3控制数码管左四位,k2k4控制数码管右四位。(加需要能加到100,减需要能减到-10)。
时间: 2023-04-07 08:02:49 浏览: 232
好的,我可以回答这个问题。以下是单片机程序的代码:
#include <reg52.h>
sbit K1 = P1^0;
sbit K2 = P1^1;
sbit K3 = P1^2;
sbit K4 = P1^3;
sbit D1 = P2^0;
sbit D2 = P2^1;
sbit D3 = P2^2;
sbit D4 = P2^3;
sbit D5 = P2^4;
sbit D6 = P2^5;
sbit D7 = P2^6;
sbit D8 = P2^7;
int num = 0;
void delay(int time) {
int i, j;
for(i = 0; i < time; i++) {
for(j = 0; j < 120; j++);
}
}
void display(int n) {
int a, b, c, d;
if(n >= 0) {
a = n / 1000;
b = n % 1000 / 100;
c = n % 100 / 10;
d = n % 10;
} else {
a = 10;
b = 10;
c = -n % 100 / 10;
d = -n % 10;
}
D1 = 1;
P0 = a;
delay(5);
D1 = 0;
D2 = 1;
P0 = b;
delay(5);
D2 = 0;
D3 = 1;
P0 = c;
delay(5);
D3 = 0;
D4 = 1;
P0 = d;
delay(5);
D4 = 0;
}
void main() {
while(1) {
if(K1 == 0 && K3 == 0) {
num += 1000;
if(num > 100) {
num = 0;
}
display(num);
while(K1 == 0 && K3 == 0);
} else if(K2 == 0 && K4 == 0) {
num -= 1000;
if(num < -10) {
num = 0;
}
display(num);
while(K2 == 0 && K4 == 0);
} else if(K1 == 0) {
num += 100;
if(num > 100) {
num = 0;
}
display(num);
while(K1 == 0);
} else if(K2 == 0) {
num -= 100;
if(num < -10) {
num = 0;
}
display(num);
while(K2 == 0);
} else if(K3 == 0) {
num += 10;
if(num > 100) {
num = 0;
}
display(num);
while(K3 == 0);
} else if(K4 == 0) {
num -= 10;
if(num < -10) {
num = 0;
}
display(num);
while(K4 == 0);
}
}
}
希望这个程序能够帮助你解决问题。
阅读全文