51单片机极数码管制作四位计数器0000-9999代码
时间: 2023-07-30 12:10:11 浏览: 222
以下是51单片机控制4位共阴数码管进行计数的代码:
```c
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit D1 = P2^4; // 数码管第一位
sbit D2 = P2^5; // 数码管第二位
sbit D3 = P2^6; // 数码管第三位
sbit D4 = P2^7; // 数码管第四位
uchar code table[] = { // 数码管显示数字的码表
0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f
};
void delay(uint i) // 延时函数
{
while(i--);
}
void display(uchar num) // 数码管显示函数
{
D1 = 1; D2 = 1; D3 = 1; D4 = 1; // 先全部清零,防止两个数码管同时亮
switch(num / 1000) { // 第一位
case 0: D1 = 0; P0 = table[0]; break;
case 1: D1 = 0; P0 = table[1]; break;
case 2: D1 = 0; P0 = table[2]; break;
// ... 其他数字同理
}
delay(100); // 延时一段时间,让人眼能够看到
D1 = 1; // 第一位数码管关闭
switch(num % 1000 / 100) { // 第二位
case 0: D2 = 0; P0 = table[0]; break;
case 1: D2 = 0; P0 = table[1]; break;
case 2: D2 = 0; P0 = table[2]; break;
// ... 其他数字同理
}
delay(100);
D2 = 1;
// 第三位和第四位同理,这里不再赘述
}
void main()
{
uint i = 0;
while(1) {
display(i++); // 循环计数
if(i >= 10000) i = 0; // 计数器归零
}
}
```
这里需要注意的是需要连接外部晶振并设置时钟频率。同时,由于数码管共阴,所以需要将控制端设置为低电平才能点亮对应的数码管段。
阅读全文