数码管的静态显示
控制不同的LED灯亮灭,进而控制数码管显示不同的数字
比如 数字 2 ,他的8位二进制数为 0101 1011,读数从dp到a,转化为16进制为0x5b
共阴极数码管的编码表为
uchar code table2[] =
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
共阳极数码管的编码表为
uchar code table1[] =
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
- Example
- 循环显示0-9
静态显示原理图如下:
代码如下:
#include
#define uchar unsigned char;
#define uint unsigned int;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极
uchar a,i,j,z;
void delay(z) //延时函数
{
for(j=z;j>0;j--)
for(i=110;i>0;i--);
}
void main() //主函数
{
while(1)
{
for(a=0;a<10;a++)//循环9次
{
P2=table[a]; //依次写入
delay(1000); //延时1s
}
}
}
数码管的动态显示
-
4位数码管显示1234,使用动态扫描
动态显示原理图如下:
代码如下:
#include
#define uchar unsigned char;
#define uint unsigned int;
sbit du=P2^0; //段选
sbit we=P2^1; //位选
//位选是控制i哪一个数码管亮,段选是控制数码管显示什么
uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //段选
uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7}; //位选
uchar i,j,z;
uint numd,numw;
void delay(z) //
{
for(j=z;j>0;j--)
for(i=110;i>0;i--);
}
void display() //
{
P0=tabledu[numd]; //段选
delay(10);
du=1; //打开段选锁存器
du=0; //保持显示
P0=tablewe[numw]; //位选
delay(10);
we=1; //打开位选锁存器
we=0; //
numd++; //
if(numd==5)
numd=1;
numw++; //
if(numw==4)
numw=0;
}
void main()
{
numd=1;
numw=0;
while(1)
{
display(); //
delay(1000);
}
}