• 两个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;
    // }
    // }


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

  • 相关阅读:
    mysql小数和类型转换函数
    concat()用法
    sql修改表名字段名
    having函数,case when与order by
    volatile实现原理与应用
    synchronized的实现原理与应用
    java8策略模式
    centos7快速升级gcc
    一个用户从发起请求到接收到响应,中间经过哪些服务,每个服务做什么事情
    Java注解
  • 原文地址:https://www.cnblogs.com/since1996/p/13408216.html
Copyright © 2020-2023  润新知