基于C51单片机的16*16 LED点阵屏电梯运行的楼层显示

学校的一个课设

可以去“我的下载”直接打包下载

设计16*16 LED点阵屏来模仿电梯运行的楼层显示装置,利用单片机I/O口接8只开关,代表1-8层楼层按键,若某一楼层的按键按下,点阵屏显示从当前位置向上或向下平滑滚动显示到指定楼层的位置,到达指定位置后由蜂鸣器发出声音led灯闪烁,后数字继续滚动显示。
在这里插入图片描述
在这里插入图片描述

#include<reg52.h>
#include<intrins.h> 
void delayms(unsigned char  t);

void dataset(unsigned char  a);
void dataset1(unsigned char  a);

void dataset2(unsigned char  a);
void dataset3(unsigned char  a);

void setlie(unsigned char  a,unsigned char  b);
void sethang(unsigned char  a,unsigned char  b);

void hang(unsigned char  a);
void lie(unsigned char  a);

void hanglie(unsigned char  a,unsigned char  b);
void clear();


void hangbianli(unsigned char *a);
void liebianli(unsigned char *a);

void all(unsigned char  a);
void all1(unsigned char  a);
void num(unsigned char n);

void shangxia(unsigned char x);

unsigned char  code hanglist[16][2] = {
    
    {
    
    0x80,0x00},{
    
    0x40,0x00} ,{
    
    0x20,0x00} ,{
    
    0x10,0x00} ,{
    
    0x08,0x00} ,{
    
    0x04,0x00} ,{
    
    0x02,0x00} ,{
    
    0x01,0x00} ,
														{
    
    0x00,0x80},{
    
    0x00,0x40} ,{
    
    0x00,0x20} ,{
    
    0x00,0x10} ,{
    
    0x00,0x08} ,{
    
    0x00,0x04} ,{
    
    0x00,0x02} ,{
    
    0x00,0x01}};
unsigned char  code shang[8][2] = {
    
    {
    
    0x01,0x80},{
    
    0x03,0xc0} ,{
    
    0x07,0xe0} ,{
    
    0x0f,0xf0} ,{
    
    0x03,0xc0} ,{
    
    0x03,0xc0} ,{
    
    0x03,0xc0} ,{
    
    0x03,0xc0}};
	
unsigned char  code zero[16][2] = {
    
    {
    
    0x00,0x00},{
    
    0x00,0x00} ,{
    
    0x0f,0xf0} ,{
    
    0x0f,0xf0} ,{
    
    0x0c,0x30} ,{
    
    0x0c,0x30} ,{
    
    0x0c,0x30} ,{
    
    0x0c,0x30} ,
														{
    
    0x0c,0x30},{
    
    0x0c,0x30} ,{
    
    0x0c,0x30} ,{
    
    0x0c,0x30} ,{
    
    0x0f,0xf0} ,{
    
    0x0f,0xf0} ,{
    
    0x00,0x00} ,{
    
    0x00,0x00}};
unsigned char  code one[16][2] = {
    
    {
    
    0x00,0x00},{
    
    0x00,0x00} ,{
    
    0x01,0x80} ,{
    
    0x03,0x80} ,{
    
    0x07,0x80} ,{
    
    0x01,0x80} ,{
    
    0x01,0x80} ,{
    
    0x01,0x80} ,
														{
    
    0x01,0x80},{
    
    0x01,0x80} ,{
    
    0x01,0x80} ,{
    
    0x01,0x80} ,{
    
    0x07,0xe0} ,{
    
    0x07,0xe0} ,{
    
    0x00,0x00} ,{
    
    0x00,0x00}};
unsigned char  code two[16][2] = {
    
    {
    
    0x00,0x00},{
    
    0x00,0x00} ,{
    
    0xf,0xf0} ,{
    
    0x0f,0xf0} ,{
    
    0x00,0x30} ,{
    
    0x00,0x30} ,{
    
    0x00,0x30} ,{
    
    0x0f,0xf0} ,
														{
    
    0x0f,0xf0},{
    
    0x0c,0x00} ,{
    
    0x0c,0x00} ,{
    
    0x0c,0x00} ,{
    
    0x0f,0xf0} ,{
    
    0x0f,0xf0} ,{
    
    0x00,0x00} ,{
    
    0x00,0x00}};
unsigned char  code three[16][2] = {
    
    {
    
    0x00,0x00},{
    
    0x00,0x00} ,{
    
    0xf,0xf0} ,{
    
    0x0f,0xf0} ,{
    
    0x00,0x30} ,{
    
    0x00,0x30} ,{
    
    0x00,0x30} ,{
    
    0x0f,0xf0} ,
														{
    
    0x0f,0xf0},{
    
    0x00,0x30} ,{
    
    0x00,0x30} ,{
    
    0x00,0x30} ,{
    
    0x0f,0xf0} ,{
    
    0x0f,0xf0} ,{
    
    0x00,0x00} ,{
    
    0x00,0x00}};
unsigned char  code four[16][2] = {
    
    {
    
    0x00,0x00},{
    
    0x00,0x00} ,{
    
    0xc,0x30} ,{
    
    0x0c,0x30} ,{
    
    0x0c,0x30} ,{
    
    0x0c,0x30} ,{
    
    0x0c,0x30} ,{
    
    0x0f,0xf0} ,
														{
    
    0x0f,0xf0},{
    
    0x00,0x30} ,{
    
    0x00,0x30} ,{
    
    0x00,0x30} ,{
    
    0x00,0x30} ,{
    
    0x00,0x30} ,{
    
    0x00,0x00} ,{
    
    0x00,0x00}};
unsigned char  code five[16][2] = {
    
    {
    
    0x00,0x00},{
    
    0x00,0x00} ,{
    
    0xf,0xf0} ,{
    
    0x0f,0xf0} ,{
    
    0x0c,0x00} ,{
    
    0x0c,0x00},{
    
    0x0c,0x00} ,{
    
    0x0f,0xf0},
																	{
    
    0x0f,0xf0} ,{
    
    0x00,0x30} ,{
    
    0x00,0x30} ,{
    
    0x00,0x30},{
    
    0x0f,0xf0} ,{
    
    0x0f,0xf0} ,{
    
    0x00,0x00} ,{
    
    0x00,0x00}};
unsigned char  code six[16][2] = {
    
    {
    
    0x00,0x00},{
    
    0x00,0x00} ,{
    
    0xf,0xf0} ,{
    
    0x0f,0xf0} ,{
    
    0x0c,0x00} ,{
    
    0x0c,0x00},{
    
    0x0c,0x00} ,{
    
    0x0f,0xf0},
																	{
    
    0x0f,0xf0} ,{
    
    0x0c,0x30} ,{
    
    0x0c,0x30} ,{
    
    0x0c,0x30},{
    
    0x0f,0xf0} ,{
    
    0x0f,0xf0} ,{
    
    0x00,0x00} ,{
    
    0x00,0x00}};
unsigned char  code seven[16][2] = {
    
    {
    
    0x00,0x00},{
    
    0x00,0x00} ,{
    
    0xf,0xf0} ,{
    
    0x0f,0xf0} , {
    
    0x00,0x30}, {
    
    0x00,0x30}, {
    
    0x00,0x30}, {
    
    0x00,0x30}, 
																	 {
    
    0x00,0x30}, {
    
    0x00,0x30}, {
    
    0x00,0x30}, {
    
    0x00,0x30}, {
    
    0x00,0x30}, {
    
    0x00,0x30},{
    
    0x00,0x00} ,{
    
    0x00,0x00}};
unsigned char  code eight[16][2] = {
    
    {
    
    0x00,0x00},{
    
    0x00,0x00} ,{
    
    0xf,0xf0} ,{
    
    0x0f,0xf0} ,{
    
    0x0c,0x30} ,{
    
    0x0c,0x30},{
    
    0x0c,0x30} ,{
    
    0x0f,0xf0},
																	{
    
    0x0f,0xf0} ,{
    
    0x0c,0x30} ,{
    
    0x0c,0x30} ,{
    
    0x0c,0x30},{
    
    0x0f,0xf0} ,{
    
    0x0f,0xf0} ,{
    
    0x00,0x00} ,{
    
    0x00,0x00}};

sbit sj0 = P0^1;    
sbit hs0 = P0^0;   
sbit dpt0 = P0^2;

sbit sj1 = P0^4;    
sbit hs1 = P0^3;   
sbit dpt1 = P0^5;

sbit sj2 = P2^1;    
sbit hs2 = P2^0;   
sbit dpt2 = P2^2; 

sbit sj3 = P2^4;    
sbit hs3 = P2^3;   
sbit dpt3 = P2^5; 

sbit LED = P3^0; 
sbit beep = P3^1;
																	
unsigned char  p = 0;    //¶à´Î
unsigned char state = 0; //µ±Ç°Â¥²ã±ê־λ
unsigned char ctrl = 0; //Â¥²ã¿ØÖÆλ
void main()
	
{
    
    			 
	     state = 1; 
       ctrl = 1;
	     LED = 0;
	     beep = 0;
       while(1)
			 {
    
    
				
				switch(~P1)

				{
    
    
					case 0x01:
					ctrl = 1;
					break;
					case 0x02:
					ctrl = 2;
					break;
					case 0x04:
				  ctrl = 3;
					break;
					case 0x08:
				  ctrl = 4;
					break;
					case 0x10:
				  ctrl = 5;
					break;
					case 0x20:
				  ctrl = 6;
					break;
					case 0x40:
				  ctrl = 7;
					break;
					case 0x80:
          ctrl = 8;
					break;
				 default: break;
				}
				

				 
				 if(ctrl > state)
				 {
    
    
					 LED = 0;
					 
				  for( ; state < ctrl ; state ++) //Ò»¸öСËã·¨ µ½´ïÌض¨Â¥²ãʱºò²»ÔÙÏÔʾÁË ÒòΪelse{}¾ÍÊÇÏÔʾ
					{
    
    
              for(p = 0; p<50; p++)
				      num(state);	   
						
					    shangxia(1);						
					}	
					
					beep = 1;


				  }
				 
					
					
					
				 else if (ctrl < state)
				 {
    
    
					 LED = 0;
				 
				 	for( ; state > ctrl ; state --) //Ò»¸öСËã·¨ µ½´ïÌض¨Â¥²ãʱºò²»ÔÙÏÔʾÁË ÒòΪelse{}¾ÍÊÇÏÔʾ
					{
    
    
              for(p = 0; p<50; p++)
				      num(state);	   
						
					    shangxia(0);						
					}	
					beep = 1;
					
				 }
				 else{
    
    
				   num(state);
				   LED = 1;
					 beep = 0;
				 }
				 
			



}}			 
				 
				 
 
				 
void shangxia(unsigned char x)
{
    
    
	      if(x == 0 )
				{
    
    						
				 //ÏÂ
				for(p = 0; p<30; p++)
				all1(0); 
				delayms(300); 
				for(p = 0; p<30; p++)
				all1(4);
				delayms(300);
				for(p = 0; p<30; p++)
				all1(8);
				delayms(300);
					
				for(p = 0; p<30; p++)
				all1(0); 
				delayms(300); 
				for(p = 0; p<30; p++)
				all1(4);
				delayms(300);
				for(p = 0; p<30; p++)
				all1(8);
				delayms(300);
				}
				else
				//ÉÏ
        {
    
    
				for(p = 0; p<30; p++)
				all(0); 
				delayms(100); 
				for(p = 0; p<30; p++)
				all(4);
				delayms(100);
				for(p = 0; p<30; p++)
				all(8);
				delayms(100);
				
				for(p = 0; p<30; p++)
				all(0); 
				delayms(100); 
				for(p = 0; p<30; p++)
				all(4);
				delayms(100);
				for(p = 0; p<30; p++)
				all(8);
   			delayms(100);
				}
}
		



void num(unsigned char n) 
{
    
    
				 unsigned char  i = 0;
					for(i = 0; i<16; i++)
					{
    
     
						hangbianli(hanglist[i]);
						if(n == 0)
						{
    
    
						liebianli(zero[i]);
						}
						else if(n == 1)
						{
    
    
						liebianli(one[i]);
						}
						else if(n == 2)
						{
    
    
						liebianli(two[i]);
						}
						else if(n == 3)
						{
    
    
						liebianli(three[i]);
						}
						else if(n == 4)
						{
    
    
						liebianli(four[i]);
						}
						else if(n == 5)
						{
    
    
						liebianli(five[i]);
						}
						else if(n == 6)
						{
    
    
						liebianli(six[i]);
						}
						else if(n == 7)
						{
    
    
						liebianli(seven[i]);
						}
						else if(n == 8)
						{
    
    
						liebianli(eight[i]);
						}
						else
					  {
    
    }
						delayms(10);

					  }

					clear();
}

void all(unsigned char  a) 
{
    
    
				 unsigned char  i = 0;
					for(i = 8; i<16; i++)
					{
    
    
						hangbianli(hanglist[i-a]);
						liebianli(shang[i-8]);
						delayms(10);
					 }				
					clear();
}

void all1(unsigned char  a) 
{
    
    
				 unsigned char  i = 0;
					for(i = 0; i<9; i++)
					{
    
    
						hangbianli(hanglist[i+a]);
						liebianli(shang[7-i]);
						delayms(10);
					 }				
					clear();
}



//µ¥¶ÀµãµÆµÄ´úÂë
//void hanglie(unsigned char  a,unsigned char  b)
//{
    
    
//				lie(b);
//        hang(a);
//}


//void hang(unsigned char  a)
//{
    
    
//	if(a == 0)
//  sethang(0x80,0x00);
//	else if (a == 1)
//	sethang(0x40,0x00);
//	else if (a == 2)
//	sethang(0x20,0x00);
//	else if (a == 3)
//	sethang(0x10,0x00);
//	else if (a == 4)
//	sethang(0x08,0x00);
//  else if (a == 5)
//	sethang(0x04,0x00);
//	else if (a == 6)
//	sethang(0x02,0x00);
//	else if (a == 7)
//	sethang(0x01,0x00);
//	else if (a == 8)
//	sethang(0x00,0x80);
//	else if (a == 9)
//	sethang(0x00,0x40);
//	else if (a == 10)
//	sethang(0x00,0x20);
//	else if (a == 11)
//	sethang(0x00,0x10);
//	else if (a == 12)
//	sethang(0x00,0x08);
//	else if (a == 13)
//	sethang(0x00,0x04);
//	else if (a == 14)
//	sethang(0x00,0x02);
//	else if (a == 15)
//  sethang(0x00,0x01);		
//}



//void lie(unsigned char  a)
//{
    
    
//	if(a == 0)
//  setlie(0x80,0x00);
//	else if (a == 1)
//	setlie(0x40,0x00);
//	else if (a == 2)
//	setlie(0x20,0x00);
//	else if (a == 3)
//	setlie(0x10,0x00);
//	else if (a == 4)
//	setlie(0x08,0x00);
//  else if (a == 5)
//	setlie(0x04,0x00);
//	else if (a == 6)
//	setlie(0x02,0x00);
//	else if (a == 7)
//	setlie(0x01,0x00);
//	else if (a == 8)
//	setlie(0x00,0x80);
//	else if (a == 9)
//	setlie(0x00,0x40);
//	else if (a == 10)
//	setlie(0x00,0x20);
//	else if (a == 11)
//	setlie(0x00,0x10);
//	else if (a == 12)
//	setlie(0x00,0x08);
//	else if (a == 13)
//	setlie(0x00,0x04);
//	else if (a == 14)
//	setlie(0x00,0x02);
//	else if (a == 15)
//  setlie(0x00,0x01);		
//}

void hangbianli(unsigned char * a)
{
    
    
	sethang(a[0],a[1]);
	
}
void liebianli(unsigned char * a)
{
    
    
	setlie(a[0],a[1]);
	
}
void clear()
{
    
    
	sethang(0xff,0xff);
	setlie(0x00,0x00);
	
}


void sethang(unsigned char  a,unsigned char  b)
{
    
    
		   dataset2(~a);
			 dataset3(~b);
}

void setlie(unsigned char  a,unsigned char  b)
{
    
    
		   dataset(a);
			 dataset1(b);
}

void dataset(unsigned char  a)
{
    
       
	    
  unsigned char  i;
  unsigned char  b =  0x01;
	dpt0 = 0;
	for (i = 0;i<8;i++)
	{
    
    
		hs0 = 0;
    sj0 = a&b;
	  hs0 = 1;
		b = b << 1;
	}
		
    dpt0 = 1;
}

void dataset1(unsigned char  a)
	
{
    
       

	    
  unsigned char  i;
  unsigned char  b =  0x01;
	dpt1 = 0;
	for (i = 0;i<8;i++)
	{
    
    
		hs1 = 0;
    sj1 = a&b;
	  hs1 = 1;
		b = b << 1;
	}
		
    dpt1 = 1;
}


void dataset2(unsigned char  a)
{
    
       

  unsigned char  i;
  unsigned char  b =  0x01;
	dpt2 = 0;
	for (i = 0;i<8;i++)
	{
    
    
		hs2 = 0;
    sj2 = a&b;
	  hs2 = 1;
		b = b << 1;
	}
		
    dpt2 = 1;
}



void dataset3(unsigned char  a)
{
    
       

	  
  unsigned char  i;
  unsigned char  b =  0x01;
	dpt3 = 0;
	for (i = 0;i<8;i++)
	{
    
    
		hs3 = 0;
    sj3 = a&b;
	  hs3 = 1;
		b = b << 1;
	}
		
    dpt3 = 1;
}
 
void delayms(unsigned char  t)
{
    
    
unsigned char  i,j;
for(i=t;i>0;i--)
for(j=123;j>0;j--);
}

猜你喜欢

转载自blog.csdn.net/helloworld573/article/details/107134001