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

📄 ledhex.c.bak

📁 嵌入式arm2104
💻 BAK
字号:
/****************************************************************************
* File:LEDHEX.C
* 功能:LED数码管显示0-F字符,同时控制LED1、LED2、LED3、LED4显示对应的16进行值。
* 说明:将跳线器JP8、JP9、JP11短接。
****************************************************************************/
#include  "config.h"


/* PWM周期及占空比设置值 */
#define  CYCLE_DATA				256 //256
#define  DUTY_CYCLE_DATA		128 //1

/* 设置 LED 长和宽*/
#define  W						32
#define  H						16

#define  CLK					(0x1<<0)
#define  STR					(0x1<<1)
#define  DR 					(0x1<<2)
#define  DG 					(0x1<<3)

#define	 THEGPIO  				0x000000ff
 /*
 void turarray(ObjLed,ResLed,aa) 
 uint32 *ResLed,*ObjLed,aa;
 {
    uint32 *pt,*qt,k,m,n;
      pt=ObjLed;
      qt=ResLed;
      n=aa;
  for(k=0,m=0;k<4;k++,m++)
     *(pt+(n+k)) = *(qt+(n+22-2*m));
  for(k=4,m=0;k<8;k++,m++)
     *(pt+(n+k)) = *(qt+(n+23-2*m));
  for(k=8,m=0;k<12;k++,m++)
     *(pt+(n+k)) = *(qt+(n+6-2*m));
  for(k=12,m=0;k<16;k++,m++)
     *(pt+(n+k)) = *(qt+(n+7-2*m));
     
  for(k=16,m=0;k<20;k++,m++)
     *(pt+(n+k)) = *(qt+(n+30-2*m));
  for(k=20,m=0;k<24;k++,m++)
     *(pt+(n+k)) = *(qt+(n+31-2*m));
  for(k=24,m=0;k<28;k++,m++)
     *(pt+(n+k)) = *(qt+(n+14-2*m));
  for(k=28,m=0;k<32;k++,m++)
     *(pt+(n+k)) = *(qt+(n+15-2*m));
  return;   
 }  
 
  void turarray(ObjLed,ResLed,n) 
   int ObjLed[],ResLed[],n;
  {
   int k,m;
   for(k=0,m=0;k<4;k++,m++)
     ObjLed[k+n] = ResLed[22+n-2*m]; 
   for(k=4,m=0;k<8;k++,m++)
     ObjLed[k+n] = ResLed[23+n-2*m]; 
   for(k=8,m=0;k<12;k++,m++)
     ObjLed[k+n] = ResLed[6+n-2*m]; 
   for(k=12,m=0;k<16;k++,m++)
     ObjLed[k+n] = ResLed[7+n-2*m]; 
     
   for(k=16,m=0;k<20;k++,m++)
     ObjLed[k+n] = ResLed[30+n-2*m]; 
   for(k=20,m=0;k<24;k++,m++)
     ObjLed[k+n] = ResLed[31+n-2*m]; 
   for(k=24,m=0;k<28;k++,m++)
     ObjLed[k+n] = ResLed[14+n-2*m]; 
   for(k=28,m=0;k<32;k++,m++)
     ObjLed[k+n] = ResLed[15+n-2*m]; 
   return;   
 } */
/****************************************************************************
* 名称:main()
* 功能:控制LED数码管显示,并控制LED1、LED2、LED3、LED4显示。
****************************************************************************/
int  main(void)
{  
   uint32 i,j,kk,k,m,p,q,mm,nn,Temp,TempA,TempB,TempC;//
   uint32 PTMP,LEDPIN[512],PTMPH,LEDP[512];
   static int LedTempA[64], LedTemp[64],LedTempB[64];
   static int LedData[64]={  //80
/*中*///0x0100,0x0100,0x2108,0x3FFC,0x2108,0x2108,0x2108,0x2108,0x2108,0x3FF8,0x2108,0x0100,0x0100,0x0100,0x0100,0x0100,
/*文*///0x0200,0x0100,0x0100,0xFFFE,0x0820,0x0820,0x0820,0x0440,0x0440,0x0280,0x0100,0x0280,0x0460,0x181E,0xE008,0x0000, 
/*测*///0x4002,0x27C2,0x2442,0x8452,0x4552,0x5552,0x1552,0x2552,0x2552,0x2552,0xC552,0x4102,0x4282,0x4242,0x444A,0x4804,     
/*试*///0x0020,0x4028,0x2024,0x3024,0x27FE,0x0020,0xE020,0x27E0,0x2120,0x2110,0x2110,0x210A,0x29CA,0x3606,0x2002,0x0000
/*中*/  0x01,0x00,0x01,0x00,0x21,0x08,0x3F,0xFC,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,
        0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,         
/*文*///  0x02,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x08,0x20,0x08,0x20,0x08,0x20,0x04,0x40,
      //  0x04,0x40,0x02,0x80,0x01,0x00,0x02,0x80,0x04,0x60,0x18,0x1E,0xE0,0x08,0x00,0x00, 
/*测*/  0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52,0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52,
        0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02,0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04,
        0x0020,0x4028,0x2024,0x3024,0x27FE,0x0020,0xE020,0x27E0,
        0x2120,0x2110,0x2110,0x210A,0x29CA,0x3606,0x2002,0x0000

                           };
                     
                         
     // 显示为16*16
   
   PLLCFG = 0x24;				//设置60MHz
   PLLCON = 0x03;
   PLLFEED = 0xaa;
   PLLFEED = 0x55;
   
   VPBDIV = 0x01;				// 全速(不分频)
	
   PINSEL0 = 0x00080000;        // 设置PWM6连接到P0.9管脚
   PINSEL1 = 0x00000000;		// 设置PWM5连接到P0.21管脚 0x00000400;
   PWMPR = 0x00;			    // 不分频,计数频率为Fpclk
   PWMMCR = 0x02;			    // 设置PWMMR0匹配时复位PWMTC
   PWMMR0 = CYCLE_DATA;    		// 设置PWM周期
   PWMMR6 = DUTY_CYCLE_DATA;	// 设置PWM占空比
   
   PWMLER = 0x41;			    // PWMMR0、PWMMR6锁存
   PWMPCR = 0x4000;				// 允许PWM6输出,单边PWM
   PWMTCR = 0x09;			    // 启动定时器,PWM使
   
   IODIR = THEGPIO; 				// I/O 端口的方向选择
   IOCLR = THEGPIO; 
  
   kk = 0;
   p = 0;
  
  IOSET = DG;
  IOSET = DR;
  for(k=0;k<64;k++)
  {  
       LedTempA[k]=0x00;
       LedTempB[k] = LedData[k];
  }
 while(1)
 {    
   for(k=0;k<64;k++)
     LedTempB[k] = LedData[k];    
     for(nn=0;nn<32;nn++)
     {    
      for(kk=0;kk<32;kk+=2)
      { 
         TempA=LedTempB[kk];
         TempC=TempA;
         Temp=TempA>>0x01;
         LedTempB[kk] = Temp;
         
         TempA=LedTempB[kk+1];
         TempB=TempA;
         Temp =TempA >> 0x01;     
         if(TempC & 0x01 ==1)    
           LedTempB[kk+1] = Temp|0x80;    
         else LedTempB[kk+1] = Temp;
         
         TempA=LedTempB[kk+32];
         TempC=TempA;
         Temp =TempA >> 0x01;     
         if(TempB & 0x01 ==1)    
           LedTempB[kk+32] = Temp|0x80;    
         else LedTempB[kk+32] = Temp;
         
         TempA=LedTempB[kk+33];
         TempB=TempA;
         Temp =TempA >> 0x01;     
         if(TempC & 0x01 ==1)    
           LedTempB[kk+33] = Temp|0x80;    
         else LedTempB[kk+33] = Temp;
         
         TempA=LedTempA[kk];  // 移入
         TempC=TempA;
         Temp =TempA>>0x01;
         if(TempB & 0x01 ==1)
            LedTempA[kk]=Temp|0x80;
         else LedTempA[kk]=Temp;
         
         TempA=LedTempA[kk+1];
         TempB=TempA;
         Temp =TempA >> 0x01;     
         if(TempC & 0x01 ==1)    
           LedTempA[kk+1] = Temp|0x80;    
         else LedTempA[kk+1] = Temp;
         
         TempA=LedTempA[kk+32];
         TempC=TempA;
         Temp =TempA >> 0x01;     
         if(TempB & 0x01 ==1)    
           LedTempA[kk+32] = Temp|0x80;    
         else LedTempA[kk+32] = Temp;
         
         TempA=LedTempA[kk+33];
         TempB=TempA;
         Temp =TempA >> 0x01;     
         if(TempC & 0x01 ==1)    
           LedTempA[kk+33] = Temp|0x80;    
         else LedTempA[kk+33] = Temp;                  
         Temp = TempA = TempB = TempC =0;
     }     
//---------------------------------------------------------------------------------    
/*       
  //  for(mm=0;mm<nn;mm++)
  //  {
       for(kk=0;kk<32;kk+=2)
       { 
         TempA=LedTempA[kk];
         TempC=TempA;
         Temp=TempA>>0x01;
         LedTempA[kk] = Temp;
         
         TempA=LedTempA[kk+1];
         TempB=TempA;
         Temp =TempA >> 0x01;     
         if(TempC & 0x01 ==1)    
           LedTempA[kk+1] = Temp|0x80;    
         else LedTempA[kk+1] = Temp;
         
         TempA=LedTempA[kk+32];
         TempC=TempA;
         Temp =TempA >> 0x01;     
         if(TempB & 0x01 ==1)    
           LedTempA[kk+32] = Temp|0x80;    
         else LedTempA[kk+32] = Temp;
         
         TempA=LedTempA[kk+33];
         TempB=TempA;
         Temp =TempA >> 0x01;     
         if(TempC & 0x01 ==1)    
           LedTempA[kk+33] = Temp|0x80;    
         else LedTempA[kk+33] = Temp;  
       } 
  // } 
 */  
  for(k=0,m=0;k<4;k++,m++)
     LedTemp[k] = LedTempA[22-2*m]; 
  for(k=4,m=0;k<8;k++,m++)
     LedTemp[k] = LedTempA[23-2*m]; 
  for(k=8,m=0;k<12;k++,m++)
     LedTemp[k] = LedTempA[6-2*m]; 
  for(k=12,m=0;k<16;k++,m++)
     LedTemp[k] = LedTempA[7-2*m]; 
     
  for(k=16,m=0;k<20;k++,m++)
     LedTemp[k] = LedTempA[30-2*m]; 
  for(k=20,m=0;k<24;k++,m++)
     LedTemp[k] = LedTempA[31-2*m]; 
  for(k=24,m=0;k<28;k++,m++)
     LedTemp[k] = LedTempA[14-2*m]; 
  for(k=28,m=0;k<32;k++,m++)
     LedTemp[k] = LedTempA[15-2*m];  
 
  for(k=32+0,m=0;k<32+4;k++,m++)
     LedTemp[k] = LedTempA[32+22-2*m]; 
  for(k=32+4,m=0;k<32+8;k++,m++)
     LedTemp[k] = LedTempA[32+23-2*m]; 
  for(k=32+8,m=0;k<32+12;k++,m++)
     LedTemp[k] = LedTempA[32+6-2*m]; 
  for(k=32+12,m=0;k<32+16;k++,m++)
     LedTemp[k] = LedTempA[32+7-2*m]; 
     
  for(k=32+16,m=0;k<32+20;k++,m++)
     LedTemp[k] = LedTempA[32+30-2*m]; 
  for(k=32+20,m=0;k<32+24;k++,m++)
     LedTemp[k] = LedTempA[32+31-2*m]; 
  for(k=32+24,m=0;k<32+28;k++,m++)
     LedTemp[k] = LedTempA[32+14-2*m]; 
  for(k=32+28,m=0;k<32+32;k++,m++)
     LedTemp[k] = LedTempA[32+15-2*m];
 /*
   turarray(LedTemp,LedData,0); 
   turarray(LedTemp,LedData,32);  */     
     
      for(kk=0;kk<33;kk+=32)
      { 
        for(i=kk,p=0;i<kk+16;i++)  //H i<16 // for(i=k,p=0;i<k+8;i++)  //H i<16
	    {
	     
	      PTMP = LedTemp[i];
	      PTMPH = LedTemp[i+16];
	      if(p>=16) 
	      	 p = 0;
	      for(j=0;j<8;j++) //W 
	      {
	         q=j;   //   q=p;	   	    
	         LEDPIN[p] = ((PTMP & (0x1 << q) ) >> q) << 3;//((PTMP & (0x1 << q) ) >> q) << 3; //p
	         if(LEDPIN[p]== 0x00) //0x1
	         {
	              IOSET = DG;
	         }
	         else
	         {
	              IOCLR = DG;
	         }
	         LEDP[p] = ((PTMPH & (0x1 << q) ) >> q) << 2;//((PTMP & (0x1 << q) ) >> q) << 3; //p
	        if(LEDP[p]== 0x00) //0x1
	         {
	              IOSET = DR;
	         }
	         else
	         {
	              IOCLR = DR;
	         } 
	         IOSET = CLK;
	         for(k=0;k<10;k++);
	         IOCLR = CLK;
	         p++;
	      }	      
	    }
	  }   
	    IOSET = STR;
	    for(k=0;k<10;k++);
	   	IOCLR = STR;
	 	
	    PWMMR6 = 128;
		PWMLER = 0x41;			    // PWMMR0、PWMMR6锁存
	  	PWMPCR = 0x4000;				// 允许PWM6输出,单边PWM
	   	PWMTCR = 0x09;			    // 启动定时器,PWM使
	    for(k=0;k<2500000;k++);
    } //nn++   	
 } //while
 while(1){}
  return(1);
}

⌨️ 快捷键说明

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