用单片机AT89C51共阴极数码管循环显示0-9
时间: 2023-09-20 13:12:07 浏览: 246
AT89C51单片机的P0端口循环显示0~9.doc.doc
好的,以下是使用AT89C51单片机和共阴极数码管循环显示0-9的示例代码:
```c
#include <reg51.h>
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
unsigned char code LED_TBL[]={ // 数码管段码表
0xc0, //0
0xf9, //1
0xa4, //2
0xb0, //3
0x99, //4
0x92, //5
0x82, //6
0xf8, //7
0x80, //8
0x90 //9
};
void delay(unsigned int count) // 延时函数
{
unsigned int i,j;
for(i=0; i<count; i++)
for(j=0; j<120; j++);
}
void main()
{
unsigned char i = 0;
while(1)
{
LED1 = LED_TBL[i/10] & 0x01; // 显示十位数字
LED2 = LED_TBL[i/10] & 0x02;
LED3 = LED_TBL[i/10] & 0x04;
LED4 = LED_TBL[i/10] & 0x08;
delay(100); // 延时100ms
LED1 = LED_TBL[i%10] & 0x01; // 显示个位数字
LED2 = LED_TBL[i%10] & 0x02;
LED3 = LED_TBL[i%10] & 0x04;
LED4 = LED_TBL[i%10] & 0x08;
delay(100); // 延时100ms
i++;
if(i == 100) // 显示完0~99后重新从0开始
i = 0;
}
}
```
这个代码使用 `LED_TBL` 数组来存储数码管段码表,`i` 变量表示当前要显示的数字,并使用 `LED1`~`LED4` 输出控制相应的数码管段。在循环中,先显示当前数字的十位数,然后等待一段时间后再显示个位数,然后再延时一段时间。当 `i` 值达到100时,重新从0开始循环。这个代码假设使用的是共阴极数码管,因此需要将输出值取反。如果使用的是共阳极数码管,则需要将数组中的段码表反转。
阅读全文