写一个单片机可调整的2位共阴数码管
时间: 2023-12-03 19:44:23 浏览: 46
以下是一个基于51单片机的可调节2位共阴数码管的代码:
```c
#include <reg51.h>
sbit dig1 = P2^0; // 数码管第一位
sbit dig2 = P2^1; // 数码管第二位
sbit A = P1^0; // 数码管A段
sbit B = P1^1; // 数码管B段
sbit C = P1^2; // 数码管C段
sbit D = P1^3; // 数码管D段
sbit E = P1^4; // 数码管E段
sbit F = P1^5; // 数码管F段
sbit G = P1^6; // 数码管G段
unsigned char code table[] = { // 数码管显示表
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
0x7F, 0x6F
};
void delay(unsigned int i)
{
while(i--);
}
void display(unsigned char num)
{
unsigned char temp;
temp = num / 10;
dig1 = 0;
P1 = table[temp];
delay(100);
dig1 = 1;
temp = num % 10;
dig2 = 0;
P1 = table[temp];
delay(100);
dig2 = 1;
}
void main()
{
unsigned char i = 0;
while(1)
{
for(i = 0; i < 100; i++)
{
display(i);
}
}
}
```
此代码中,使用了P1口控制数码管各段的显示,P2口控制数码管的位选。其中`table`数组为数码管显示表,`delay`函数为简单的延时函数,`display`函数将数字转换为对应的段选值并显示在数码管上。程序主循环中,通过调用`display`函数,实现了数码管从0到99的循环显示。
需要注意的是,本代码中使用的是共阴数码管,如果使用共阳数码管需要将相应的段选值取反,即将`table`数组中的值取反。