51单片机数码管系列
今天持续更新数码管系列。抱着学好单片机心态尝试编程,先模仿,后创新!欢迎初学者小白们学习,代码可能因为使用仪器不一样,有所偏差,稍微改变一下就可以了。——我使用的是普中双核A6
1静态显示0--F(共阳)
#include<reg51.h>
unsigned char i,j;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80, 0x90, 0x88, 0x83,0xc6, 0xa1, 0x86, 0x8e};
void delay(unsigned int a);
void main()
{
while(1)
{
for(i=0;i<16;i++)
{
P0=table[i];
delay(1000);
}
}
}
void delay(unsigned int a)
{ unsigned int i,j;
for(i=a;i>0;i--)
for(j=125;j>0;j--);
}
2//数码管动态显示01234567
//j10-j1,j22-j6,abc-567
#include<reg51.h>
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8};
void delay(unsigned int a);
sbit c=P2^7;
sbit b=P2^6;
sbit a=P2^5;
unsigned char i;
void main()
{
while(1)
{
for(i=0;i<8;i++)
{
switch(i)
{
case(0):c=0;b=0;a=0;break;
case(1):c=0;b=0;a=1;break;
case(2):c=0;b=1;a=0;break;
case(3):c=0;b=1;a=1;break;
case(4):c=1;b=0;a=0;break;
case(5):c=1;b=0;a=1;break;
case(6):c=1;b=1;a=0;break;
case(7):c=1;b=1;a=1;break;
}
P0=~table[i];
delay(3);
P0=0x00;
}
}
}
void delay(unsigned int a)
{ unsigned int i,j;
for(i=a;i>0;i--)
for(j=125;j>0;j--);
}
3数码管显示一个数值
//j10-j1,j22-j6,abc-567
#include<reg51.h>
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77};
unsigned char table1[8];
void delay(unsigned int a);
void display();
sbit c=P2^7;
sbit b=P2^6;
sbit a=P2^5;
void main()
{
unsigned int shu;
shu=289;
table1[0]=table[shu/100];
table1[1]=table[shu%100/10];
table1[2]=table[shu%10];
while(1)
{
display();
}
}
void display()
{
unsigned char i;
for(i=0;i<3;i++)
{
switch(i)
{
case(0):c=0;b=0;a=0;break;
case(1):c=0;b=0;a=1;break;
case(2):c=0;b=1;a=0;break;
}
P0=table1[i];
delay(3);
P0=0x00;
}
}
void delay(unsigned int a)
{ unsigned int i,j;
for(i=a;i>0;i--)
for(j=124;j>0;j--);
}
4.从右向左显示01234567,在从左向右显示HELLO,闪烁3次,
//j10-j1,j22-j6,abc-567
#include<reg51.h>
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80, 0x90, 0x88,
0x83,0xc6, 0xa1, 0x86, 0x8e}; //共阳极
unsigned char code table1[]={0x76,0x79,0x38,0x38,0x3f}; //hello
void delay(unsigned int a); //延迟函数
sbit c=P2^7; /定义138模块
sbit b=P2^6;
sbit a=P2^5;
unsigned char i,j,z;
void main()
{
while(1)
{
for(i=0;i<8;i++) //控制从右到左 从左到右for(i=7;i>0;i--),或者下列abc正常写
{
switch(i) //子程序76543210
{
case(7):c=0;b=0;a=0;break;
case(6):c=0;b=0;a=1;break;
case(5):c=0;b=1;a=0;break;
case(4):c=0;b=1;a=1;break;
case(3):c=1;b=0;a=0;break;
case(2):c=1;b=0;a=1;break;
case(1):c=1;b=1;a=0;break;
case(0):c=1;b=1;a=1;break;
}
P0=~table[i];
delay(1000);
P0=0x00;
}
delay(1000);
for(z=0;z<3;z++)
{
for(j=0;j<5;j++)
{
switch(j)
{
case(0):c=0;b=0;a=0;break;
case(1):c=0;b=0;a=1;break;
case(2):c=0;b=1;a=0;break;
case(3):c=0;b=1;a=1;break;
case(4):c=1;b=0;a=0;break;
case(5):c=1;b=0;a=1;break;
}
P0=table1[j];
delay(1000);
P0=0x00;
}
P2=0xff;
delay(1000);
}
}
}
void delay(unsigned int a)
{ unsigned int i,j;
for(i=a;i>0;i--)
for(j=125;j>0;j--);
}
5. // 数码动态显示4位及以下10进制数
#include <reg52.h>//j10-j1,j22-j6,abc-567
#define uchar unsigned char
#define uint unsigned int
void delay (uint z);
uchar code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //共阴极
uchar code smgwx[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};//数组,前面是高电平,后面是低电平
uint i=51,qian,bai,shi,ge;
void main()
{
if(i>999)//表示4位数
{
qian=i/1000;
bai=i%1000/100;
shi=i%1000%100/10;
ge=i%10;
}
else if(i>99)
{
qian=16;//指千位熄灭(0x00=熄灭)
bai=i/100;
shi=i%100/10;
ge=i%10;
}
else if(i>9)
{
qian=16;
bai=16;
shi=i/10;
ge=i%10;
}
else
{
qian=16;
bai=16;
shi=16;
ge=i%10;
}
while(1)
{
P1=smgwx[7];//选择个位
P0=smg[ge];
delay(1);
P0=0x00;//表示熄灭
P1=smgwx[6];//选择十位
P0=smg[shi];
delay(1);
P0=0x00;
P1=smgwx[5];
P0=smg[bai];
delay(1);
P0=0x00;
P1=smgwx[4];
P0=smg[qian];
delay(1);
P0=0x00;
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=124;y>0;y--);
}
6.显示Apple
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint z);
uchar smg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar i;
void main()
{
while(1)
{
P1=0xfe;
P0=0x77;
delay(1);
P1=0xfd;
P0=0x73;
delay(1);
P1=0xfb;
P0=0x73;
delay(1);
P1=0xf7;
P0=0x38;
delay(1);
P1=0xef;
P0=0x79;
delay(1);
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=124;y>0;y--);
}
7.循环显示1111 1111——ffff ffff
#include <reg52.h>
void delay(unsigned int z);
unsigned char smg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char i;
void main()
{
P1=0X00;//位选:0000 0000
while(1)
{
for(i=0;i<16;i++)
{
P0=smg[i];
delay(500);
}
}
}
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=124;y>0;y--);
}