用51单片机学一个4位数码管显示的功能
时间: 2024-03-27 11:38:39 浏览: 12
好的,下面是一个简单的用51单片机控制4位共阳极数码管的代码:
```C
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};//数码管0~9显示表
void delay(uint i) //延时函数
{
while(i--);
}
void DigDisplay(uchar num, uchar position) //数码管显示函数
{
switch(position) //选择要显示的位数
{
case(1):
LSA=0;LSB=0;LSC=0;break; //第1位
case(2):
LSA=1;LSB=0;LSC=0;break; //第2位
case(3):
LSA=0;LSB=1;LSC=0;break; //第3位
case(4):
LSA=1;LSB=1;LSC=0;break; //第4位
}
P0=table[num]; //通过查表的方式显示数字
delay(100); //延时一段时间,使得人眼能够看到数字
P0=0x00; //关闭数码管
}
void main()
{
uchar i=0;
while(1)
{
DigDisplay(i%10+1,1); //显示个位数,每隔一段时间加1
DigDisplay(i/10%10,2); //显示十位数
DigDisplay(i/100%10,3); //显示百位数
DigDisplay(i/1000%10,4); //显示千位数
i++;
}
}
```
这段代码可以实现一个简单的数字计数器,每隔一段时间就会自动加1,并在4位共阳极数码管上显示出来。其中,`DigDisplay()`函数是用来控制数码管显示的函数,通过设置不同的`position`参数来选择要显示的位数,然后通过查表的方式显示数字。代码中还定义了一个循环计数器`i`,每次加1后显示在数码管上,从而实现了数码管显示的功能。