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

📄 led.c

📁 51单片机实验例程
💻 C
字号:
/*******************************************************************************
*  标题:                  试验数码管上显示数字(译码器位选 共阴极)            *
*																			   *
*  连接方法:P0与J12 用8PIN排线连接	                                           *
********************************************************************************
*                         	       										       *
* 请学员认真消化本例程,用573锁存器和译码器控制和数码管                        *
********************************************************************************/

#include <reg51.h> 
#include <intrins.h>

sbit LS138A = P2^2;  	//定义138译码器的输入A脚由P2.2控制 
sbit LS138B = P2^3;	    //定义138译码器的输入脚B由P2.3控制
sbit LS138C = P2^4; 	//定义138译码器的输入脚C由P2.4控制

void delay(unsigned int i);      //函数声名

char DelayCNT;
 
//此表为 LED 的字模, 共阴数码管 0-9  - 
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; 

/************主函数**********************/ 
main()
{  
   unsigned int i,LedNumVal=1 ;
   unsigned int LedOut[10];
   
   DelayCNT=0;

  while(1)  //进入循环状态
  {	 
     if(++DelayCNT>=50)
	 {
	 	DelayCNT=0;		   //延时计数 每扫描一次加一次
	    ++LedNumVal;       //每隔50个扫描周期加一次
	 }

	 LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
     LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;
     LedOut[2]=Disp_Tab[LedNumVal%100/10];
     LedOut[3]=Disp_Tab[LedNumVal%10];
	 
	 LedOut[4]=Disp_Tab[LedNumVal%10000/1000];	   //千位
     LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80;  //百位带小数点
     LedOut[6]=Disp_Tab[LedNumVal%100/10];		   //十位
     LedOut[7]=Disp_Tab[LedNumVal%10];             //个位	 

	
	 for( i=0; i<9; i++)  //实现8位动态扫描循环
	 {	 
	  P0 = LedOut[i];  //将字模送到P0口显示
	  		
	  switch(i)	  //使用switch 语句控制位选  也可以是用查表的方式 学员可以试着自己修改				  
	     {	    
			case 0:LS138A=0; LS138B=0; LS138C=0;  break;         
	        case 1:LS138A=1; LS138B=0; LS138C=0;  break;             	
	        case 2:LS138A=0; LS138B=1; LS138C=0;  break; 
	        case 3:LS138A=1; LS138B=1; LS138C=0;  break; 
			case 4:LS138A=0; LS138B=0; LS138C=1;  break;
			case 5:LS138A=1; LS138B=0; LS138C=1;  break;
			case 6:LS138A=0; LS138B=1; LS138C=1;  break;
			case 7:LS138A=1; LS138B=1; LS138C=1;  break;
		  
	     }
		 
		delay(150);
	  }
	 
  }   
}	

/***************************************************************************
*																		   *
*		                    延时程序						               *
****************************************************************************/
void delay(unsigned int i)
{
    char j;
    for(i; i > 0; i--)
        for(j = 200; j > 0; j--);
}


⌨️ 快捷键说明

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