两个for循环的动态扫描程序

/********************************************显示字符程序*******************************************/
void Show_Letter(u16 *Letter) //显示一遍225个LED,放while里 所以可以一直显示
{

// int k;
// for(k=0;k<15;k++) //将字符数组表存入replace[15]数组里,以便后面复位
// {
// replace[k]=Letter[k];
// }
//
u8 adcx;
adcx=Lsens_Get_Val();

int i,j;
for(i=0;i<15;i++){
for(j=0;j<15;j++)
{
switch(i) //打开LED正极 DCT1-DCT15
{
case 0:GPIO_SetBits(GPIOB, GPIO_Pin_6);break;
case 1:GPIO_SetBits(GPIOA, GPIO_Pin_9);break;
case 2:GPIO_SetBits(GPIOA, GPIO_Pin_10);break;
case 3:GPIO_SetBits(GPIOE, GPIO_Pin_1);break;
case 4:GPIO_SetBits(GPIOB, GPIO_Pin_7);break;
case 5:GPIO_SetBits(GPIOC, GPIO_Pin_9);break;
case 6:GPIO_SetBits(GPIOA, GPIO_Pin_8);break;
case 7:GPIO_SetBits(GPIOE, GPIO_Pin_4);break;
case 8:GPIO_SetBits(GPIOE, GPIO_Pin_3);break;
case 9:GPIO_SetBits(GPIOE, GPIO_Pin_2);break;
case 10:GPIO_SetBits(GPIOE, GPIO_Pin_0);break;
case 11:GPIO_SetBits(GPIOB, GPIO_Pin_9);break;
case 12:GPIO_SetBits(GPIOB, GPIO_Pin_8);break;
case 13:GPIO_SetBits(GPIOA, GPIO_Pin_11);break;
case 14:GPIO_SetBits(GPIOA, GPIO_Pin_12);break;
default:break;

}
switch(j) //轮询,将字符取模每位取出,如果为1,则置低LED负极,点亮LED DR1-DR15
{
case 0:{
if((*Letter&0x0001))
GPIO_ResetBits(GPIOB, GPIO_Pin_5); //置低 DR15
else
GPIO_SetBits(GPIOB, GPIO_Pin_5); //置高 DR15

// if(adcx>LIGHT)
// FLAG2=15*i+j+1;
};break;

case 1:{
if ((*Letter&0x0002))
GPIO_ResetBits(GPIOB, GPIO_Pin_4); //置低 DR14
else
GPIO_SetBits(GPIOB, GPIO_Pin_4 );

// if(adcx>LIGHT) //检测到LED灯亮,返回FLAG2值,以便置换字符数组
// FLAG2=15*i+j+1;
};break;

case 2:{
if (((*Letter)&0x0004))
GPIO_ResetBits(GPIOB, GPIO_Pin_3);
else
GPIO_SetBits(GPIOB, GPIO_Pin_3 );

// if(adcx>LIGHT)
// FLAG2=15*i+j+1;
};break;

case 3:{
if (((*Letter)&0x0008))
GPIO_ResetBits(GPIOD, GPIO_Pin_7);
else
GPIO_SetBits(GPIOD, GPIO_Pin_7 );

// if(adcx>LIGHT)
// FLAG2=15*i+j+1;
};break;

case 4:{
if ((*Letter)&0x0010)
GPIO_ResetBits(GPIOD, GPIO_Pin_6);
else
GPIO_SetBits(GPIOD, GPIO_Pin_6);

// if(adcx>LIGHT)
// FLAG2=15*i+j+1;
};break;

case 5:{
if ((*Letter)&0x0020)
GPIO_ResetBits(GPIOD, GPIO_Pin_5);
else
GPIO_SetBits(GPIOD, GPIO_Pin_5);

// if(adcx>LIGHT)
// FLAG2=15*i+j+1;
};break;

case 6:{
if ((*Letter)&0x0040)
GPIO_ResetBits(GPIOD, GPIO_Pin_4);
else
GPIO_SetBits(GPIOD, GPIO_Pin_4);

// if(adcx>LIGHT)
// FLAG2=15*i+j+1;
};break;

case 7:{
if ((*Letter)&0x0080)
GPIO_ResetBits(GPIOD, GPIO_Pin_3);
else
GPIO_SetBits(GPIOD, GPIO_Pin_3);

// if(adcx>LIGHT)
// FLAG2=15*i+j+1;
};break;

case 8:{
if ((*Letter)&0x0100)
GPIO_ResetBits(GPIOD, GPIO_Pin_2);
else
GPIO_SetBits(GPIOD, GPIO_Pin_2);

// if(adcx>LIGHT)
// FLAG2=15*i+j+1;
};break;

case 9:{
if ((*Letter)&0x0200)
GPIO_ResetBits(GPIOD, GPIO_Pin_1);
else
GPIO_SetBits(GPIOD, GPIO_Pin_1);

// if(adcx>LIGHT)
// FLAG2=15*i+j+1;
};break;

case 10:{
if ((*Letter)&0x0400)
GPIO_ResetBits(GPIOD, GPIO_Pin_0);
else
GPIO_SetBits(GPIOD, GPIO_Pin_0);

// if(adcx>LIGHT)
// FLAG2=15*i+j+1;
};break;

case 11:{
if ((*Letter)&0x0800)
GPIO_ResetBits(GPIOC, GPIO_Pin_12);
else
GPIO_SetBits(GPIOC, GPIO_Pin_12);

// if(adcx>LIGHT)
// FLAG2=15*i+j+1;
};break;

case 12:{
if ((*Letter)&0x1000)
GPIO_ResetBits(GPIOC, GPIO_Pin_11); //置低 DR3
else
GPIO_SetBits(GPIOC, GPIO_Pin_11);

// if(adcx>LIGHT)
// FLAG2=15*i+j+1;
};break;

case 13:{
if ((*Letter)&0x2000)
GPIO_ResetBits(GPIOC, GPIO_Pin_10); //置低 DR2
else
GPIO_SetBits(GPIOC, GPIO_Pin_10);

// if(adcx>LIGHT)
// FLAG2=15*i+j+1;
};break;

case 14:{
if ((*Letter)&0x4000)
GPIO_ResetBits(GPIOA, GPIO_Pin_15); //置低 DR1
else
GPIO_SetBits(GPIOA, GPIO_Pin_15);

// if(adcx>LIGHT)
// FLAG2=15*i+j+1;
};break;
default:break;
//
// if(adcx>LIGHT){
// count1++;
// switch(j){ //数组里置0,如果光笔读不到数据,可以考虑放在delay后面
// case 0:Letter[i]&=0xFFFE ;break;
// case 1:Letter[i]&=0xFFFD ;break;
// case 2:Letter[i]&=0xFFFB ;break;
// case 3:Letter[i]&=0xFFF7 ;break;
// case 4:Letter[i]&=0xFFEF ;break;
// case 5:Letter[i]&=0xFFDF ;break;
// case 6:Letter[i]&=0xFFBF ;break;
// case 7:Letter[i]&=0xFF7F ;break;
// case 8:Letter[i]&=0xFEFF ;break;
// case 9:Letter[i]&=0xFDFF ;break;
// case 10:Letter[i]&=0xFBFF ;break;
// case 11:Letter[i]&=0xF7FF ;break;
// case 12:Letter[i]&=0xEFFF ;break;
// case 13:Letter[i]&=0xDFFF ;break;
// case 14:Letter[i]&=0x7FFF ;break;
// default: ;break;
// }
// }
}



delay_us(30); //1ms延时保证亮度,长了会闪频,短了太暗,1ms左右刚好
LED_OFF();//关闭所有LED
}
Letter+=1;
}

// int l;
// if(count1>1){ //光笔第二次读到,原位置置1
// for(l=0;l<15;l++){
// Letter[k]=replace[k];
// count1=0;
// }
// }


}
/**************************************************************************************************/

原文地址:https://www.cnblogs.com/since1996/p/13408216.html