以c语言写51单片机:4位数码管动态显示,从1234开始,每次按S1键加1的代码
时间: 2023-05-20 08:02:21 浏览: 319
以下是一个简单的以C语言写的51单片机代码,实现了4位数码管动态显示,从1234开始,每次按S1键加1:
```c
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit S1 = P3^2; // S1按键
uchar code table[] = { // 数码管显示表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
void delay(uint ms) { // 延时函数
uint i, j;
for (i = ms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void main() {
uchar i = 0, j = 0, k = 0, l = 1; // i,j,k,l分别表示个、十、百、千位
while (1) {
if (S1 == 0) { // 检测S1按键是否按下
delay(10); // 延时去抖
if (S1 == 0) { // 再次检测S1按键是否按下
l++; // l加1
if (l == 10) { // 如果千位达到10,重置为1
l = 1;
k++;
if (k == 10) { // 如果百位达到10,重置为0
k = 0;
j++;
if (j == 10) { // 如果十位达到10,重置为0
j = 0;
i++;
if (i == 10) // 如果个位达到10,重置为0
i = 0;
}
}
}
}
}
P2 = 0xff; // 关闭所有数码管
P0 = table[i]; // 显示个位
P2 = 0xfe; // 打开第一位数码管
delay(5); // 延时一段时间
P2 = 0xff; // 关闭所有数码管
P0 = table[j]; // 显示十位
P2 = 0xfd; // 打开第二位数码管
delay(5); // 延时一段时间
P2 = 0xff; // 关闭所有数码管
P0 = table[k]; // 显示百位
P2 = 0xfb; // 打开第三位数码管
delay(5); // 延时一段时间
P2 = 0xff; // 关闭所有数码管
P0 = table[l]; // 显示千位
P2 = 0xf7; // 打开第四位数码管
delay(5); // 延时一段时间
}
}
```
这段代码使用了一个延时函数和一个数码管显示表,通过检测S1按键的状态来实现加1的功能。每次按下S1键,千位加1,如果千位达到10,则重置为1,百位加1,以此类推。同时,通过动态显示4位数码管来显示当前的数字。
阅读全文