⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led_display.c

📁 AT89S52控制的18B20数字温度传感器
💻 C
字号:
/*==========================================
                LED显示驱动程序

		文件名:LED_Display.c

		作者 YOUJJYY 
		时间:2007.4.6 
============================================*/

#include <at89x52.h>
#include <LED_Display.h>
#define uchar unsigned char

//***********显示数据的转换***************//
uchar TO_DATA(bit n_s,uchar I,uchar led_data)
 {
   uchar x[3],y;
  if(n_s==1)
   {
    switch(I)
	 {  
	   case 0:if(led_data!=y){P0=P0^0x20;y=led_data;}
	          break;      
	   case 1: {x[2]=(led_data>>4)+1;x[3]=(led_data&0x0f)+1;}
	           break;
	   case 2: {x[0]=(led_data>>4)+1;x[1]=(led_data&0x0f)+1;}
	           break;
	   default:break;
	    
	   }
	  return x[I];
	}
	else 
	  {
	   if(led_data<46)led_data=0;
	   else led_data-=47;
	   return led_data;
	   }
   }
  
/*****************LED显示程序***************/
void LED_Display(bit N_S,uchar data_size,uchar S_D,uchar *LED_data)//N_S是数字和字符串显示选择,
                                                                   //data_size显示多少位
																  //S_D是显示方式(0x00:静态,0x01:半动态,0x02:全动态)
																 //LED_data是要显示的数据
{
 uchar t,y,i,x,z,a,k=20,size=0;

//*****************显示方式S_D***************//
	 switch(S_D)
	  {
	   case 0:a=0;
	         break;
	   case 1:a=4,k=80,size/=4;
	         break;
	   case 2:a=1;//size-=4;
	        break;
	   default:break;
		}

//*************显示个数data_size***********//
   for(i=0;i<data_size;i++)					                  //BCD码转换成LED码
    {
	 if(N_S==1)size=0; 
      else size+=1;
    }		  

//****************显示程序**************//                            		 
   for(t=0;t<=size;t++)	  //要显示的位数
     {
	  for(y=0;y<=k;y++)		  //循环20显示
	    {
		  z=0x7f;		  
	      for(i=0;i<=3;i++)       //一次显示
	       {
		     P2=z;
			 z>>=1;
			 z+=0x80;
			 x=TO_DATA(N_S,i,LED_data[i+t*a]);
			  P0=BCD_ASCII[x];
			  Delay_1ms(3);//延时时间
			 }	      
			}
	 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -