📄 ledhex.c.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 + -