52单片机极数码管制作四位计数器0-9999代码
时间: 2023-07-30 22:10:11 浏览: 94
数码管显示0-9999Hz频率计
以下是基于Keil C的52单片机极数码管制作四位计数器0-9999代码:
```c
#include <reg52.h>
// 数码管引脚定义
sbit Dig1 = P2^0;
sbit Dig2 = P2^1;
sbit Dig3 = P2^2;
sbit Dig4 = P2^3;
sbit DIO = P1^0;
sbit RCLK = P1^1;
sbit SCLK = P1^2;
// 数码管显示字符数组
unsigned char code disCode[] = {
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
// 延时函数
void delay(unsigned int t)
{
unsigned int i, j;
for (i = t; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
// 74HC595芯片数据发送
void sendByte(unsigned char dat)
{
unsigned char i;
for (i = 0; i < 8; i++) {
SCLK = 0;
DIO = dat & 0x80;
dat <<= 1;
SCLK = 1;
}
}
// 数码管位选函数
void selectDig(unsigned char dig)
{
Dig1 = Dig2 = Dig3 = Dig4 = 1;
switch (dig) {
case 1:
Dig1 = 0;
break;
case 2:
Dig2 = 0;
break;
case 3:
Dig3 = 0;
break;
case 4:
Dig4 = 0;
break;
default:
break;
}
}
// 数码管显示函数
void display(unsigned int num)
{
unsigned char i;
unsigned char disBuf[4] = {0};
for (i = 0; i < 4; i++) {
disBuf[i] = disCode[num % 10];
num /= 10;
}
for (i = 4; i > 0; i--) {
selectDig(i);
sendByte(disBuf[i - 1]);
}
}
// 主函数
void main()
{
unsigned int cnt = 0;
while (1) {
display(cnt);
cnt++;
if (cnt > 9999) {
cnt = 0;
}
delay(100);
}
}
```
该程序实现了四位计数器,每100ms数码管上的数字会加1,当数码管上的数字超过9999时,会重新从0开始计数。
阅读全文