单片机点亮4数码管的程序。
时间: 2024-05-13 18:15:29 浏览: 7
这是一个使用单片机点亮4位数码管的示例程序,使用的是51系列单片机:
```c
#include <reg51.h>
// 定义数码管端口
sbit DIG1 = P2^0;
sbit DIG2 = P2^1;
sbit DIG3 = P2^2;
sbit DIG4 = P2^3;
// 数码管显示表
unsigned char code LED_DispTable[] = {
// 0~9
0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f,
// A~F
0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
void Delay(unsigned int t)
{
// 延时函数
while(t--);
}
void main()
{
unsigned char i = 0;
unsigned char LED_Buffer[] = {0, 0, 0, 0};
while(1)
{
// 数码管循环显示
for(i = 0; i < 4; i++)
{
switch(i)
{
case 0:
DIG1 = 0;
DIG2 = 1;
DIG3 = 1;
DIG4 = 1;
break;
case 1:
DIG1 = 1;
DIG2 = 0;
DIG3 = 1;
DIG4 = 1;
break;
case 2:
DIG1 = 1;
DIG2 = 1;
DIG3 = 0;
DIG4 = 1;
break;
case 3:
DIG1 = 1;
DIG2 = 1;
DIG3 = 1;
DIG4 = 0;
break;
default:
break;
}
P0 = LED_DispTable[LED_Buffer[i]];
Delay(200);
P0 = 0x00;
}
// 数码管计数器加1
LED_Buffer[0]++;
if(LED_Buffer[0] == 10)
{
LED_Buffer[0] = 0;
LED_Buffer[1]++;
if(LED_Buffer[1] == 10)
{
LED_Buffer[1] = 0;
LED_Buffer[2]++;
if(LED_Buffer[2] == 10)
{
LED_Buffer[2] = 0;
LED_Buffer[3]++;
if(LED_Buffer[3] == 10)
{
LED_Buffer[3] = 0;
}
}
}
}
}
}
```
该程序使用定时器循环显示计数器的值,每个数码管显示一个数字,而计数器的值为四位数,每个数码管显示一位。程序中需要定义数码管的端口,以及数码管的显示表,循环显示时需要控制每个数码管的亮灭。需要注意的是,由于数码管是共阴极的,因此需要将要显示的数字取反再输出。