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

📄 sp0604_实验22_数码管显示符点数技术.c

📁 基于AT89S52的pwm脉宽调制的C语言编程
💻 C
字号:
#include <REGX51.H>



#define PORTA P0
#define PORTC P2
#define LEDDATAPORT PORTA
#define LEDBITPORT  PORTC
const unsigned char LEDDATA[]=
{
  0x3f,0x06,0x5b,0x4f,0x66,
  0x6d,0x7d,0x07,0x7f,0x6f,
  0x77,0x7c,0x39,0x5e,0x79,0x71,
  0x00,0x40,
};
//数码管扫描代码表
unsigned char code LEDBITDATA[]=
{
  0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
};
							  
void Delay(unsigned int t)
{
  while(t)t--;
}






void main(void)
{
  unsigned char i;
  unsigned char LEDBuffer[8]={0,16,16,16,16,16,16,16};
  unsigned char ScanLEDCount;
  
  unsigned int SecondCount=0;
  unsigned char SwitchFunction=0;
  
  unsigned char DotPosition=0;
  unsigned char NagFlag=0;
  
  float Temp[10]={
                   3.1416,0.3621,0.0286,0.0094,0.0005,
				           12.763,0.3   ,0.48  ,0.06  ,0.008 ,
				         };
  
  long TempA;
  
  	
  
  while(1)
    {
  	  if(DotPosition!=0)
  	    {
  		    if(DotPosition==ScanLEDCount)LEDDATAPORT=LEDDATA[LEDBuffer[ScanLEDCount]]|0x80;
  		      else LEDDATAPORT=LEDDATA[LEDBuffer[ScanLEDCount]];
  		  }
  		  else LEDDATAPORT=LEDDATA[LEDBuffer[ScanLEDCount]];
  	  LEDBITPORT=LEDBITDATA[ScanLEDCount];
  	  ScanLEDCount++;
  	  if(ScanLEDCount==sizeof(LEDBuffer))ScanLEDCount=0;
  	  Delay(664);
  	  
  	  SecondCount++;
  	  if(SecondCount==1920)
  	    {
    		  SecondCount=0;
    		  
    		  Temp[SwitchFunction]=0-Temp[SwitchFunction];
    		  TempA=Temp[SwitchFunction]*100000;
    		  SwitchFunction++;
    		  if(SwitchFunction==sizeof(Temp)/4)SwitchFunction=0;
    		  
      		  NagFlag=0;
      		  if(TempA<0)
        	    {
      	  		  TempA=~TempA;
      	  		  TempA++;
      	  		  NagFlag=1;
    			    }
    
            for(i=0;i<sizeof(LEDBuffer);i++)LEDBuffer[i]=16;
            LEDBuffer[0]=0;
    		  
      		  if(TempA>=10000)DotPosition=5;
        	    else if(TempA>=1000)DotPosition=4;
    	  	      else if(TempA>=100)DotPosition=3;
    	    	    else if(TempA>=10)DotPosition=2;
    		  	      else if(TempA>=1)DotPosition=1;
      	 	  for(i=DotPosition;i<6;i++)LEDBuffer[i]=0;
      		  DotPosition=5;
    		  
      		  if(NagFlag==1)
    		      {
    			      if(TempA>=1000000)LEDBuffer[DotPosition+2]=17;
    			        else LEDBuffer[DotPosition+1]=17;
    			    }
      		  
      		  i=0;
      		  while(TempA)
        	    {
    	  	      LEDBuffer[i]=TempA%10;
    	  		    TempA/=10;
    	  		    i++;
    		      }
      		    
      		  while(LEDBuffer[0]==0)
        	    {
    	  	      for(i=0;i<sizeof(LEDBuffer);i++)LEDBuffer[i]=LEDBuffer[i+1];
    	  		    LEDBuffer[sizeof(LEDBuffer)-1]=16;
    	  		    DotPosition--;
    		      }		  
    		  }	  
  	  }
}

⌨️ 快捷键说明

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