51单片机数码管系列

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--);
  }
           
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值