51单片机用六位数码管循环显示hello和21061
时间: 2023-06-13 15:02:07 浏览: 56
好的,以下是51单片机的代码:
```c
#include <reg51.h>
// 数码管位选和段选控制信号的端口定义
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit LED=P1;
// 数码管的段选控制值
unsigned char code smgduan[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x39};
void delay(unsigned int i) // 延时函数
{
while(i--);
}
void main()
{
unsigned int i,j;
while(1)
{
// 显示"HELLO"
for(i=0;i<6;i++) // 6位数码管循环显示
{
LSA=0;LSB=0;LSC=0; // 显示第一个数码管
LED=smgduan['H'-0x30]; // 'H'的ASCll码为0x48,减去0x30,即为0x18,即为smgduan数组的第24个元素,即H的段选值
delay(1000); // 延时1秒
LED=0x00; // 关闭所有数码管
LSA=1; // 显示第二个数码管
LED=smgduan['E'-0x30];
delay(1000);
LED=0x00;
LSA=0;LSB=1; // 显示第三个数码管
LED=smgduan['L'-0x30];
delay(1000);
LED=0x00;
LSA=1;
LED=smgduan['L'-0x30];
delay(1000);
LED=0x00;
LSA=0;LSB=0;LSC=1; // 显示第四个数码管
LED=smgduan['O'-0x30];
delay(1000);
LED=0x00;
LSA=1;
}
// 显示"21061"
for(j=0;j<6;j++)
{
LSA=0;LSB=0;LSC=0;
LED=smgduan[2];
delay(1000);
LED=0x00;
LSA=1;
LED=smgduan[1];
delay(1000);
LED=0x00;
LSA=0;LSB=1;
LED=smgduan[0];
delay(1000);
LED=0x00;
LSA=1;
LED=smgduan[6];
delay(1000);
LED=0x00;
LSA=0;LSB=0;LSC=1;
LED=smgduan[1];
delay(1000);
LED=0x00;
LSA=1;
}
}
}
```
这段代码先循环显示"HELLO",然后循环显示"21061",每个数字显示1秒,然后熄灭所有数码管,再显示下一个数字。